当应用程序死亡时收到的iOS无声通知

问题描述:

当发送后台推送与"content-available": "1",到应用程序被用户杀害,应用程序未启动到后台模式和application:didReceiveRemoteNotification:fetchCompletionHandler:不被称为Apple doc say当应用程序死亡时收到的iOS无声通知

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

我的问题是:是否有任何方式的下一次用户启动应用程序访问此无声推送有效载荷?

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

NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; 

我使用的情况是,我只依靠推式信道接收数据的应用程序,但应用程序不能他们。

+0

依靠推送可能是一个坏主意,如果用户拒绝推送通知的权限会怎么样?或随后关闭它们? –

+0

用户权限不会影响静默推送。即使用户关闭此推送**通知**,该应用程序仍然可以接收无声有效载荷 – Jan

+0

啊。然后我今天学到了一些新东西! –

望着文档,好像你应该实现此方法:

可选FUNC应用(_应用:UIApplication的, didReceiveRemoteNotification用户信息:AnyHashable:任何], fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult) - > Void)

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

+0

我确实实现了这个方法,但在应用程序被终止时不会调用它。我引用的文档是文档(如果此方法为 – Jan

+0

)而且您已启用“推送通知”选项,并在选择Xcode项目时选择了位于“功能”选项卡中的“背景获取”和“远程通知”复选框? –

+0

是的,我做到了。 “正常”背景无声通知正常工作。我只是问是否有办法在下次应用程序启动时获取有效载荷,以防用户杀死该应用程序 – Jan

您可以使用VoIP Push消息,在这里看到:

Voice Over IP (VoIP) Best Practices

有许多优点,使用PushKit接收VoIP的推动:

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

要知道,你的应用程序必须启用具有VoIP功能的背景模式,如果使用不当,这可能是应用程序商店审批的问题。

+0

是的,我正在研究这种VoIP推送。这不仅仅适用于真正使用VoIP的应用吗? – Jan

+0

我相信我不能使用PushKit,如果我的应用根本不提供VoIP功能,我可以吗? – Jan