【发布时间】:2016-09-07 13:23:07
【问题描述】:
我正在开发一个可以接收推送通知的应用程序,在某些情况下,它会触发后台获取操作。因此,我为我的应用启用了remote-notification 后台功能。
当应用暂停时,推送通知会导致应用唤醒并执行application:didReceiveRemoteNotification:fetchCompletionHandler,横幅会出现在主屏幕上,并且通知会一直保留在通知中心,直到用户点击它以启动应用。它完全可以正常工作。
当应用程序未运行时,只要应用程序未被用户强制退出(请参阅apple's documentation),应用程序就会启动通知,并且应用程序会执行application:didFinishLaunchingWithOptions 和application:didReceiveRemoteNotification:fetchCompletionHandler。横幅出现在主屏幕上,但随后通知消失。它不会保留在通知中心。此外,如果设备被锁定,有时通知甚至在发出警报声之前就消失了。
有趣的是,如果我禁用远程通知后台模式,一切正常。在这种情况下,当推送通知到达时应用程序不会启动。
当远程通知后台模式开启并且传入通知启动未运行的应用程序时,如何防止通知消失?我是否需要在application:didFinishLaunchingWithOptions 中包含一些内容,让应用知道它正在后台启动,并且不应丢弃通知?
【问题讨论】:
-
您是否正确调用了
application:didReceiveRemoteNotification:fetchCompletionHandler:方法中的完成处理程序? -
是的,不是这样。我实际上只是想出了问题所在。我会尽快发布答案。基本上,我的
application:didFinishLaunchingWithOptions有一行注册推送与我正在使用的SDK (Kinvey)。我不知道究竟会发生什么,但是当它被调用时,应用程序似乎重新注册推送,并处理传入的推送。所以我写了几行以避免在后台启动应用程序时调用它,并且解决了它。
标签: ios push-notification background-process appdelegate