控制台中收到 Firebase 云消息通知,但未显示在 phone - Swift 应用程序中
Firebase Cloud Message Notification being received in Console but not being displayed in phone - Swift App
所以我正在尝试使用 Firebase Functions 为我的应用程序中的消息中心实施云消息传递。我的 firebase 函数说它已经在工作了,我确实在我的控制台日志中收到了消息,但是,通知没有部署在我的后台模式 phone 中。
我已经实现了在我的用户登录主视图后接收通知的权限。这是我的代码:
func askNotificationPermission() {
//Firebase Push Notifications
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in
print("HOLA TE DIERON PERMISO")
})
Messaging.messaging().shouldEstablishDirectChannel = true
UIApplication.shared.registerForRemoteNotifications()
Messaging.messaging().delegate = self
}
我已经在 didFinishLaunchingApplication
中实现了必要的 Firebase 功能:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//MARK: Firebase
FirebaseApp.configure()
//Firebase Cloud Messaging
Messaging.messaging().delegate = self
//MARK: Others
//KeyboardManager
IQKeyboardManager.shared.enable = true
//navbar
let navControl = UINavigationBar.appearance()
let myColor : UIColor = UIColor(red: 0, green: 0.1333, blue: 0.3176, alpha: 1)
navControl.tintColor = myColor
return true
}
这是我在 App Delegate 中对通知的扩展:
extension AppDelegate: UNUserNotificationCenterDelegate, MessagingDelegate {
func applicationDidEnterBackground(_ application: UIApplication) {
Messaging.messaging().shouldEstablishDirectChannel = true
}
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
let dataDict: [String: String] = ["token": fcmToken]
NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
//TODO: If necessary send token to application server
//Note: This callback is fired at each app startup and whenever a new token is generated
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
Messaging.messaging().appDidReceiveMessage(userInfo)
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print("USER INFO: ",userInfo)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
print("USER INFO IN DID RECEIVE REMOTE NOTIFICAITON:", userInfo, UIBackgroundFetchResult.newData)
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo as! [String:Any]
completionHandler([.alert, .badge, .sound])
print("HOLI")
}
}
我不知道可能是什么问题,也不知道为什么我在控制台中收到信息但没有推送到应用程序。我搜索了几个 Whosebug 问题,但 none 有效。
这是我的控制台记录的内容:
2020-08-06 11:06:06.804344-0500 FleaMarket_UserSide[13985:4429211] [] nw_read_request_report [C2] Receive failed with error "Software caused connection abort"
[AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): {
"content-available" = 1;
}, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): did you get it?, AnyHashable("google.c.sender.id"): 520471783461]
USER INFO IN DID RECEIVE REMOTE NOTIFICAITON: [AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): {
"content-available" = 1;
}, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): did you get it?, AnyHashable("google.c.sender.id"): 520471783461] UIBackgroundFetchResult
2020-08-06 11:06:06.835793-0500 FleaMarket_UserSide[13985:4429216] 6.27.0 - [Firebase/Firestore][I-FST000001] WatchStream (282c75618) Stream error: 'Unavailable: Socket is not connected'
我发现了我的错误。它在我的 firebase 函数中。我写错了我的有效载荷。我写过:
var 新消息 = {
数据: {
标题:组名,
body: 消息
},
主题:提供主题,
};
根据 Firebase 文档,正确的负载是通知:
var newmessage = {
notification: {
title: groupName,
body: message
},
topic: offerTopic,
};
确保坚持在此处找到的 firebase 云消息文档,否则它不会将其视为通知而不会推送。
https://firebase.google.com/docs/cloud-messaging/ios/topic-messaging
所以我正在尝试使用 Firebase Functions 为我的应用程序中的消息中心实施云消息传递。我的 firebase 函数说它已经在工作了,我确实在我的控制台日志中收到了消息,但是,通知没有部署在我的后台模式 phone 中。
我已经实现了在我的用户登录主视图后接收通知的权限。这是我的代码:
func askNotificationPermission() {
//Firebase Push Notifications
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in
print("HOLA TE DIERON PERMISO")
})
Messaging.messaging().shouldEstablishDirectChannel = true
UIApplication.shared.registerForRemoteNotifications()
Messaging.messaging().delegate = self
}
我已经在 didFinishLaunchingApplication
中实现了必要的 Firebase 功能:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//MARK: Firebase
FirebaseApp.configure()
//Firebase Cloud Messaging
Messaging.messaging().delegate = self
//MARK: Others
//KeyboardManager
IQKeyboardManager.shared.enable = true
//navbar
let navControl = UINavigationBar.appearance()
let myColor : UIColor = UIColor(red: 0, green: 0.1333, blue: 0.3176, alpha: 1)
navControl.tintColor = myColor
return true
}
这是我在 App Delegate 中对通知的扩展:
extension AppDelegate: UNUserNotificationCenterDelegate, MessagingDelegate {
func applicationDidEnterBackground(_ application: UIApplication) {
Messaging.messaging().shouldEstablishDirectChannel = true
}
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
let dataDict: [String: String] = ["token": fcmToken]
NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
//TODO: If necessary send token to application server
//Note: This callback is fired at each app startup and whenever a new token is generated
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
Messaging.messaging().appDidReceiveMessage(userInfo)
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print("USER INFO: ",userInfo)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
print("USER INFO IN DID RECEIVE REMOTE NOTIFICAITON:", userInfo, UIBackgroundFetchResult.newData)
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo as! [String:Any]
completionHandler([.alert, .badge, .sound])
print("HOLI")
}
}
我不知道可能是什么问题,也不知道为什么我在控制台中收到信息但没有推送到应用程序。我搜索了几个 Whosebug 问题,但 none 有效。
这是我的控制台记录的内容:
2020-08-06 11:06:06.804344-0500 FleaMarket_UserSide[13985:4429211] [] nw_read_request_report [C2] Receive failed with error "Software caused connection abort" [AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): did you get it?, AnyHashable("google.c.sender.id"): 520471783461] USER INFO IN DID RECEIVE REMOTE NOTIFICAITON: [AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): did you get it?, AnyHashable("google.c.sender.id"): 520471783461] UIBackgroundFetchResult 2020-08-06 11:06:06.835793-0500 FleaMarket_UserSide[13985:4429216] 6.27.0 - [Firebase/Firestore][I-FST000001] WatchStream (282c75618) Stream error: 'Unavailable: Socket is not connected'
我发现了我的错误。它在我的 firebase 函数中。我写错了我的有效载荷。我写过:
var 新消息 = { 数据: { 标题:组名, body: 消息 }, 主题:提供主题, };
根据 Firebase 文档,正确的负载是通知:
var newmessage = {
notification: {
title: groupName,
body: message
},
topic: offerTopic,
};
确保坚持在此处找到的 firebase 云消息文档,否则它不会将其视为通知而不会推送。
https://firebase.google.com/docs/cloud-messaging/ios/topic-messaging