繁体   English   中英

收到推送通知后,如何判断我的iPhone应用程序是否正在运行?

[英]How do I tell if my iPhone app is running when a Push Notification is received?

我正在向我的iPhone应用程序发送推送通知,我想要执行一组不同的指令,具体取决于应用程序是否已经启动。 我是iPhone开发的新手,虽然我怀疑UIApplication或我的项目的AppDelegate类有解决方案,但我还没有找到一个好的答案。 有没有简单的方法来检查这个?

这是处理应用程序的活动/非活动状态的更合适的方法。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {   
        // check for the app state
        UIApplicationState state = [application applicationState];

        if (state == UIApplicationStateActive) {
            //the app is in the foreground, so here you do your stuff since the OS does not do it for you
            //navigate the "aps" dictionary looking for "loc-args" and "loc-key", for example, or your personal payload)
        }

    application.applicationIconBadgeNumber = 0;
}

didReceiveRemoteNotification:在应用程序运行时被调用,是的,但是当它被暂停时, iOS会负责贴上徽章等。如果应用程序在前台,操作系统什么都不做,只需调用你的didReceiveRemoteNotification: .

根据“发布”的含义,您要么寻找:

  • 凯文上面的答案(区分发布或未发布)
  • 或者这个(区分暂停或活跃,但已经启动):

使用在应用程序变为活动时设置为true的标志,并在应用程序未处于活动状态时设置为false。

标记(在头文件[.h]中):

BOOL applicationIsActive;

代码(在实现文件[.m]中):

- (void)applicationDidBecomeActive:(UIApplication *)application {
    applicationIsActive = YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    applicationIsActive = NO;
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if (applicationIsActive) {
        // Handle notification in app active state here
    }
    else {
        // Handle notification in app suspended state here
    }

这是有效的,因为当应用程序暂停时,OS在“唤醒”过程中调用“applicationDidBecomeActive”之前调用“applicationDidReceiveRemoteNotification”。

“完整”答案实际上是凯文的回答加上这个答案。

希望这可以帮助。

UIApplication委托有方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

你需要实现的。 这会在应用程序运行时收到通知。

如果您的应用当前未运行且收到通知,则可以启动您的应用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

使用launchOptions字典中保存的通知详细信息。 如果字典为零,则用户正常点击应用程序图标。

如果要检查iOS上的applicationState是否小于4,则需要检查是否支持applicationState:

if ([application respondsToSelector:@selector(applicationState)] ){
  // Safe to check applicationState
  UIApplicationState state = [application applicationState];
}

推送通知的Apple文档解释了这一点:

但是,有两种情况,applicationDidFinishLaunching:不是合适的实现站点:

  • 通知到达时应用程序正在运行。
  • 通知有效内容包含应用程序可以使用的自定义数据。

在第一种情况下,当iPhone OS收到远程通知时应用程序正在运行的情况下,如果要立即下载数据,则应实现应用程序:didReceiveRemoteNotification:UIApplicationDelegate的方法。 下载后,请务必从应用程序图标中删除徽章。 (如果您的应用程序经常向其提供者检查新数据,则可能不需要实现此方法。)

这意味着如果您的应用程序:didReceiveRemoteNotification:delegate方法被调用,则您的应用程序正在运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM