0

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

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

我该怎么做?

我实施了

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

作为测试,我添加了

  UIApplication.sharedApplication().applicationIconBadgeNumber = 20

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

4

3 回答 3

0

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

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

如果您的服务器在您的应用程序有新内容可用时向用户的设备发送推送通知,您可以要求系统在后台运行您的应用程序,以便它可以立即开始下载新内容。这种后台模式的目的是尽量减少从用户看到推送通知到您的应用能够显示相关内容之间的时间。应用程序通常在用户看到通知的大致同一时间被唤醒,但这仍然会给您比其他情况更多的时间。

要支持这种后台模式,请在 Xcode 项目的 Capabilities 选项卡的 Background mode 部分启用 Remote notifications 选项。(您还可以通过在应用程序的 Info.plist 文件中包含带有远程通知值的 UIBackgroundModes 键来启用此支持。)

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

于 2016-10-11T23:34:51.077 回答
0

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

于 2016-10-11T23:30:40.420 回答
0

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

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

于 2016-10-11T23:30:49.900 回答