在后台模式下未收到iOS APNS

时间:2011-11-15 13:46:18

标签: iphone ios push-notification apple-push-notifications

我正在尝试在后台模式下收到通知。我不希望用户在收到通知中的警报时启动我的应用程序。但似乎iOS没有向回调函数didReceiveRemoteNotification发送通知: 有什么投入?

为了在后台模式下接收推送,我需要执行哪些特殊操作。

仅供参考:我也尝试使用voip后台模式,但仍然没有!

基本上我希望我的应用程序在不启动应用程序的情况下接收通知,并在应用程序在后台运行时执行某些操作。

2 个答案:

答案 0 :(得分:5)

  

但似乎iOS没有将通知发送到回调函数didReceiveRemoteNotification:

这是真的。如果您的应用位于后台,则除非用户通过与通知提醒进行交互来实际启动应用,否则您不会收到有关传入推送通知的通知。

  

基本上我希望我的应用能够收到通知,而无需用户启动我的应用/用户干预,并在后台运行时执行某些操作。

那是不可能的。

答案 1 :(得分:1)

可以获得远程通知并被唤醒。但了解当前实现及其受应用程序行为的影响非常重要。所有事情都可能在Apple下发生变化。 在撰写本文时,以下是您需要知道的内容(前2位大多数人显然都知道):

  1. 首先,您的应用程序必须包含"远程通知"作为必需的背景模式。
  2. 您的应用程序必须按https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html
  3. 中所述注册远程通知
  4. 您必须知道哪个回调在您的应用程序(UIApplicationDelegate for Swift)中根据您当前的应用程序状态(前景,背景,暂停等)执行
    • 前景 - 将致电application:didReceiveRemoteNotification或更优先application:didReceiveRemoteNotification:fetchCompletionHandler
    • 背景/暂停 - 只会(可能)致电application:didReceiveRemoteNotification:fetchCompletionHandler,您更好会在30秒内调用fetchCompletionHandler或您的应用终止。如果您没有使用fetchCompletionHandler实现该方法,那么您可能只能从系统 IF 接收徽章/警报,并将其放入APN邮件的内容中。否则,你什么也看不见。
  5. 现在,抓住了。当前iOS 配置文件您的应用程序,然后确定是否实际唤醒您的应用程序。如果你花了很多时间测试APN,它最终会让你的应用程序成为一个糟糕的公民,它不会唤醒你的应用程序(除非你至少插上电源)。它将等到您的应用程序随后启动(您可以鼓励用户通过APN消息中的系统徽章/警报进行),然后将该远程通知放入密钥{{1}下的did / willFinishLaunchingWithOptions launchOptions中}