应用程序被杀时收到iOS静默通知

时间:2017-03-01 08:14:13

标签: ios apple-push-notifications

"content-available": "1"的后台推送发送到被用户杀死的应用时,应用程序不会启动到后台模式,application:didReceiveRemoteNotification:fetchCompletionHandler:不会被称为Apple doc say }:

  

使用此方法处理应用的传入远程通知。 [...]此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从暂停状态唤醒),并在远程通知到达时将其置于后台状态。   但是,如果用户强行退出,系统不会自动启动您的应用。

我的问题是:有没有办法在下次用户启动应用程序时访问此静默推送有效负载?

我尝试使用launchOptions方法的didFinishLaunchingWithOptions,但它们不包含推送有效负载。

NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];

我的用例是我只依靠推送渠道向应用程序接收数据,但应用程序无法它们。

3 个答案:

答案 0 :(得分:1)

最简单的答案是:不,你不能。

您还将无法使用VoIP推送,唯一的选择是将常规推送与推送通知服务扩展一起使用。在您的应用程序和此扩展之间共享钥匙串,在收到通知时将推送有效内容保存在钥匙串中,并在进入前台时与您的应用程序一起检索。 缺点是您需要向用户呈现视觉通知,但它可以保持沉默,您可以选择呈现所需的任何文本(最佳选择取决于您的应用程序做什么以及此通知的目的)。

答案 1 :(得分:0)

您可以使用VoIP推送消息,请参阅此处:

Voice Over IP (VoIP) Best Practices

  

使用PushKit接收VoIP推送有很多好处:

     
      
  • [...]
  •   
  • 如果在收到VoIP推送时它未运行,您的应用会自动重新启动。
  •   
  • [...]
  •   

请注意,您的应用必须具有启用VoIP功能的后台模式,如果误用,这可能是应用商店批准的问题。

答案 2 :(得分:-1)

查看文档,您似乎应该实现此方法:

可选的func应用程序(_ application:UIApplication, didReceiveRemoteNotification userInfo:[AnyHashable:Any],    fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult) - >空隙)

在该方法中,编写代码以存储有效负载(userInfo)。也许暂时将它存储在userDefaults中。然后,当应用程序启动时,检查有效负载是否可用。