如果应用程序被强制退出,则处理 IOS 远程通知
Posted
技术标签:
【中文标题】如果应用程序被强制退出,则处理 IOS 远程通知【英文标题】:Handle IOS remote notifications if the app is forced quit 【发布时间】:2018-09-24 04:16:58 【问题描述】:我像下面显示的代码 sn-p 一样处理远程通知,但是当用户强制应用程序时,我无法启动应用程序并重定向到特定页面。
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void)
let userInfo = response.notification.request.content.userInfo
let page = userInfo["page"] as! String
if page == "message"
NotificationCenter.default.post(name: Notification.Name(rawValue: "Messages"), object: nil)
我从这里的某个地方读到,在 appdelegate didfinishlaunchingwithoptions 我们可以添加一行:
if let remoteNotification = launchOptions?[.remoteNotification] as? [AnyHashable : Any]
但我不知道如何从这本词典中提取消息信息
更新了我的通知响应:
4 elements
▿ 0 : 2 elements
▿ key : AnyHashable("aps")
- value : "aps"
▿ value : 2 elements
▿ 0 : 2 elements
- key : alert
▿ value : 2 elements
▿ 0 : 2 elements
- key : title
- value : New Message
▿ 1 : 2 elements
- key : body
- value : You have a new message from John
▿ 1 : 2 elements
- key : sound
- value : default
▿ 1 : 2 elements
▿ key : AnyHashable("gcm.message_id")
- value : "gcm.message_id"
- value : 0:
▿ 2 : 2 elements
▿ key : AnyHashable("google.c.a.e")
- value : "google.c.a.e"
- value : 1
▿ 3 : 2 elements
▿ key : AnyHashable("page")
- value : "page"
- value : message
【问题讨论】:
【参考方案1】:只需要像这样获取“页面”
if let remoteNotification = launchOptions?[.remoteNotification] as? [AnyHashable : Any]
if let page = remoteNotification["page"] as? String
if page == "message"
注意 - 如果这不起作用,请显示您在应用中收到的通知响应
【讨论】:
我可以看看控制台打印的 JSON 格式吗? 兄弟我想我可以从通知中获取消息数据,但是我认为我不能用特定的变量值来笑特定的屏幕,有什么办法吗? 您的意思是启动(应用程序终止时重新启动应用程序?)应用程序。如果是,则根据苹果指南是不可能的。您可能需要拥有 Voip 服务(PushKit),但这也不会直接让您打开应用程序【参考方案2】:您需要从 didfinishlaunchingwithoptions 委托方法访问 launchOptions 字典,然后访问您的通知负载,如下所示。尝试首先记录 userInfo 字典以查看其内容,然后访问您的通知负载。
var userInfo = launchOptions["UIApplicationLaunchOptionsRemoteNotificationKey"] as? [AnyHashable:任何] var apsInfo = userInfo?["aps"] as? [AnyHashable : 任意]
【讨论】:
apsinfo是否等于userNotificationCenter中的response.notification.request.content.userInfo? 不,不一样。从 launchOptions 字典访问页面键。 它给了我错误“无法使用 'String' 类型的索引为 '[UIApplicationLaunchOptionsKey : Any]' 类型的值下标” 如果让 notificationPayload = launchOptions? [UIApplicationLaunchOptionsKey.remoteNotification] 作为? NSDictionary 试试上面那一行。以上是关于如果应用程序被强制退出,则处理 IOS 远程通知的主要内容,如果未能解决你的问题,请参考以下文章
iOS的通知:如何WhatsApp的接收通知,并强制关闭,即使他们以后的过程?