直接运行代码以响应接收到 APNS 消息
Posted
技术标签:
【中文标题】直接运行代码以响应接收到 APNS 消息【英文标题】:Running code directly in response to recieving an APNS message 【发布时间】:2019-11-08 09:02:34 【问题描述】:我们有一个 ios 应用程序,我们通过 FCM 向其发送通知。
理想情况下,我们希望能够让应用程序直接从通知中运行一些代码。
如果我们发送数据类型通知并且应用程序在前台,这似乎是可行的。
但是 - 如果 a) 应用程序在后台 b) 应用程序已终止。有什么方法可以自动启动应用程序,或者在应用程序终止时让应用程序自行备份。
谢谢
【问题讨论】:
【参考方案1】:应用在前台
在 AppDelegate 中实现 didReceiveRemoteNotification 委托方法来处理通知并在应用处于前台时运行您想要的代码。
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any])
//write your code here when app is in foreground
应用在后台
当应用程序处于后台并且用户收到推送通知时,如果用户点击通知,didReceiveRemoteNotification 将被调用,但如果用户点击应用程序图标,则不会调用此方法,在此如果您必须与您的服务器通信,或者您可以使用之前的值检查徽章编号(您可以将其存储在 NSUserDefaults 中)并运行您想要的代码。
应用已终止
当应用程序被终止时,didReceiveRemoteNotification方法不会被调用, 但是您可以在 appdelegate 的 didFinishWithLaunchOptions 方法中检查 launchOptions 以了解应用程序是否已通过通知启动,并相应地执行您的任务。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
if launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] != nil
// Do your task here
【讨论】:
感谢 Prakash 的明确回答。我想探索的是我是否可以在后台模式下执行代码——而不必等待用户与通知进行交互。在我的问题中,我提到了使用“数据”消息(而不是通知),因此这些消息在发出通知方面无论如何都不会涉及用户。例如,是否可以在使用 info.plist 中的一种背景模式的代码中处理 APNS 消息,如果可以,哪一种最适合响应 FCM/APNS 消息? 只要在 info.plist 中为“远程通知”选择了“启用后台模式”,非通知(即仅数据)FCM/APNS 事件确实执行触发 didReceiveRemoteNotification 事件。 所以我可以让代码在后台执行的唯一方法是发送静默通知。但是,静默通知的优先级低于警报通知,无论如何,根据苹果文档,不能保证一定会交付。所以这里的底线问题是如何在发送警报通知后在后台执行代码?这甚至可能吗?以上是关于直接运行代码以响应接收到 APNS 消息的主要内容,如果未能解决你的问题,请参考以下文章