application:didReceiveRemoteNotification:fetchCompletionHandler Not Called

Wes*_*ick 23 objective-c apple-push-notifications ios ios7

application:didReceiveRemoteNotification:fetchCompletionHandler当应用程序强行退出时,似乎不会调用该函数.我的印象是,无论应用程序处于什么状态,都会调用该函数,但似乎只有在应用程序已在后台运行时才会调用它.有没有办法在后台唤醒应用程序,如果它尚未使用新的iOS 7远程通知后台模式运行?

nvr*_*rst 51

application:didReceiveRemoteNotification:fetchCompletionHandler:即使应用程序被暂停,根本没有运行,后台运行或活动,也会被调用.另外值得注意的是,该方法仅适用于iOS 7.这是苹果文档.

但是,如果应用程序被强行关闭(即通过使用应用程序切换器进行查杀),该应用程序将无法启动.(参见答案) 编辑:我在iOS 7.1上再次检查了这一点,看看他们是否修复了这个问题,但仍然存在这样的情况:如果手动杀死应用程序,应用程序将不会被唤醒并且application:didReceiveRemoteNotification:fetchCompletionHandler:不会被调用

当接收到推送时,应用程序仅在"如果需要"时才被唤醒以调用该application:didReceiveRemoteNotification:fetchCompletionHandler:方法(即,您必须在推送通知有效负载内设置"content-available"标志.参见SO回答).如果用户然后通过点击通知打开应用程序,则将再次调用该方法.

编辑:没有在iOS 8上检查过这个.还有其他人吗?

  • 它不是另一个应用程序状态,iOS看到强行关闭应用程序,因为用户不希望该应用程序运行任何进程线程,直到下次启动.它正如苹果公司所预期的那样,尽管他们的设计推理是有问题的,如果不是完全屁股倒退和愚蠢的人们如何实际使用应用程序切换器 (6认同)
  • 虽然看起来很混乱,但是当应用程序根本没有运行时会调用该方法,尽管如果应用程序被强制关闭它将无法运行.那是另一个申请状态吗? (4认同)

kid*_*kid 24

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

    //Remote Notification Info
    NSDictionary * remoteNotifiInfo = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];

    //Accept push notification when app is not open
    if (remoteNotifiInfo) {
       [self application:application didReceiveRemoteNotification: remoteNotifiInfo];
    }

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

  • -1,它不是强制退出下的进程。当用户通过点击通知按钮启动应用程序时,上面的代码运行。 (2认同)