【问题标题】:iOS APNS not received in background mode在后台模式下未收到 iOS APNS
【发布时间】:2015-02-11 03:40:43
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

但是好像iOS没有将通知发送到回调函数didReceiveRemoteNotification:

确实如此。如果您的应用程序在后台,您将不会收到有关传入推送通知的通知,除非用户通过与通知警报交互来实际启动应用程序。

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

这是不可能的。

【讨论】:

【解决方案2】:

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

  1. 首先,您的应用程序必须包含“远程通知”作为必需的后台模式。
  2. 您的应用程序必须按照https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html 中的说明注册远程通知
  3. 您必须知道根据您当前的应用程序状态(前台、后台、暂停等)在您的应用程序(Swift 的 UIApplicationDelegate)中执行哪个回调
    • 前台——将调用application:didReceiveRemoteNotification或更优选application:didReceiveRemoteNotification:fetchCompletionHandler
    • Background/Suspended -- 只会(可能)调用application:didReceiveRemoteNotification:fetchCompletionHandler 并且你更好在 30 秒内调用 fetchCompletionHandler 否则你的应用程序将被终止。如果您没有使用 fetchCompletionHandler 实现该方法,那么您可能只能从系统 IF 接收徽章/警报,您将它们放在 APN 消息的内容中。否则,您将什么也看不到。

现在,问题来了。当前的 iOS 配置文件 您的应用程序,然后决定是否真正唤醒您的应用程序。如果您花费大量时间测试 APN,它最终会认为您的应用程序是一个坏公民,并且不会唤醒您的应用程序(除非您至少接通电源)。它只会等到您的应用程序随后启动(您可以鼓励用户通过 APN 消息中的系统徽章/警报来执行此操作),然后将该远程通知放入键 UIApplicationLaunchOptionsRemoteNotificationKey

【讨论】:

  • 还有一件事。您会认为卸载您的应用程序会重置分析。它不是。您必须在手机上“重置内容”才能获取该信息 (AFAIK)。
猜你喜欢
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2016-04-14
  • 2015-11-05
相关资源
最近更新 更多