iOS Firebase 云消息传递在应用关闭时获取数据
Posted
技术标签:
【中文标题】iOS Firebase 云消息传递在应用关闭时获取数据【英文标题】:iOS Firebase Cloud Messaging Get Data when App Close 【发布时间】:2016-10-27 18:17:22 【问题描述】:我有一个应用程序。它使用 FCM 推送通知。消息的 json 看起来像:
"to": "xxx", "notification" :
"body" : "Hi",
"badge" : 1,
"sound" : "default"
,
"data" :
"id" : "xxx",
"first_name" : "xxx",
"last_name" : "xxx",
"full_name" : "xxx",
"primary_image" : "xxx",
"matchid" : "xxx",
"type": "match"/"message"
,
"content_available": true,
"priority": "high"
我在数据中有一个“类型”来检测触摸我的通知时将启动哪个屏幕。如果 type == "match" -> 转到 MatchVC,然后键入 == "message" -> 转到 MessageVC。我有一个问题,如果我的应用程序在前台,我可以从didReceiveRemoteNotification:userinfo
获取数据,然后我可以检测到推送屏幕,但是如果我的应用程序是后台或关闭,我只会收到没有来自didReceiveRemoteNotification:userinfo
的数据的通知。当我点击通知时,它只会打开我的应用程序。任何解决方案都值得赞赏。
【问题讨论】:
【参考方案1】:在 Firebase ios sdk 中,您将在应用委托中拥有以下代码 sn-p。
注意有 2 个 userNotificationCenter 方法。当应用程序处于前台时,将调用第一个。当您点击托盘中的推送通知时,将调用 2nd。
可以从 Firebase 官方 Github 存储库(iOS 快速入门)中找到完整代码。 https://github.com/firebase/quickstart-ios/blob/master/messaging/MessagingExampleSwift/AppDelegate.swift
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
let userInfo = notification.request.content.userInfo
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey]
print("Message ID: \(messageID)")
// Print full message.
print("userInfo 1st")
print(userInfo)
let id = userInfo["id"]
let firstName = userInfo["first_name"]
print(id ?? "")
print(firstName ?? "")
// Change this to your preferred presentation option
completionHandler([])
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void)
let userInfo = response.notification.request.content.userInfo
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey]
print("Message ID: \(messageID)")
// Print full message.
print("userInfo 2nd")
print(userInfo)
let id = userInfo["id"]
let firstName = userInfo["first_name"]
print(id ?? "")
print(firstName ?? "")
completionHandler()
【讨论】:
以上是关于iOS Firebase 云消息传递在应用关闭时获取数据的主要内容,如果未能解决你的问题,请参考以下文章
无法将iOS CriticalAlert发送到Firebase云消息传递
IOS 应用程序中的 Firebase 云消息传递 (FCM) 无法正常工作
IOS Firebase 云消息传递“InvalidApnsCredential”