IOS。处理推送通知而不是应用程序未运行

Posted

技术标签:

【中文标题】IOS。处理推送通知而不是应用程序未运行【英文标题】:iOS. Handling push notifications than app is not running 【发布时间】:2016-10-11 23:05:36 【问题描述】:

比应用程序收到推送并且应用程序没有运行我需要调用我的 API 的网络方法。我需要在没有来自用户的任何交互的情况下静默进行(比如点击通知或其他东西 - 没有它)

我将推送有效负载中的内容可用密钥设置为 1。

我该怎么做?

我实现了

 func application( application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void) 

作为测试,我添加了

  UIApplication.sharedApplication().applicationIconBadgeNumber = 20

但看起来它不起作用,因为我关闭了我的应用并发送了测试通知,bagde 编号不是 20

【问题讨论】:

【参考方案1】:

这是因为您的应用没有运行。当应用程序在后台时,didReceiveRemoteNotification 可以被调用。如果您的应用程序被退出/终止,则无法静默执行某些操作(除了更新徽章,您需要将徽章编号直接发送到通知的有效负载中)。

【讨论】:

【参考方案2】:

如果您想在不启动应用程序的情况下更新应用程序的徽章,您需要从您的服务器以推送通知的形式发送它。请参阅 Apple 文档:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html

您实现的方法仅在应用程序运行时调用。但如果你在推送负载中包含“badge”参数,ios 会自动为你设置。

【讨论】:

【参考方案3】:

如果您需要触发从服务器下载内容的 API 调用,则需要将推送负载中的 content-available 键设置为 1。

根据 Apple 文档中的 Using Push Notifications to Initiate a Download:

如果您的服务器在新内容可用时向用户的设备发送推送通知 对于您的应用,您可以要求系统在后台运行您的应用 以便它可以立即开始下载新内容。这 这种后台模式的目的是最大限度地减少时间 在用户看到推送通知和您的应用程序之间经过 能够显示相关的内容。应用程序通常是 大约在用户看到通知的同时醒来 但这仍然会给您比其他方式更多的时间。

要支持此后台模式,请启用远程通知 选项卡的“功能”选项卡的“背景模式”部分 你的 Xcode 项目。 (您也可以通过包括 UIBackgroundModes 键与应用程序中的远程通知值 Info.plist 文件。)

对于触发下载操作的推送通知, 通知的有效负载必须包含内容可用密钥及其 值设置为 1。当该键存在时,系统会唤醒应用程序 后台(或将其启动到后台)并调用应用程序 代表的 应用程序:didReceiveRemoteNotification:fetchCompletionHandler: 方法。您对该方法的实现应该下载 相关内容并将其集成到您的应用中。

【讨论】:

如果你设置为1,那么应用即使没有运行也会在后台唤醒并调用didReceiveRemoteNotification方法。您可以通过该方法调用 API 并存储新数据。希望对您有所帮助,您走在正确的轨道上!

以上是关于IOS。处理推送通知而不是应用程序未运行的主要内容,如果未能解决你的问题,请参考以下文章

ios 应用未运行时推送通知单击处理程序

Xamarin.iOS 应用程序未运行时未处理 Amazon SNS 推送通知

即使应用程序未在后台运行,VoIP 推送通知也会自动打开应用程序,这在 iOS 中是不是可行?

保存收到的远程推送通知 - ios

当应用程序处于未运行或后台状态时,如何处理推送通知有效负载而不点击它

检测是不是未通过 iOS 中的推送通知打开应用程序?