【发布时间】:2020-08-06 16:23:50
【问题描述】:
因此,我正在尝试使用 Firebase 功能为我的应用中的消息中心实施云消息传递。我的 firebase 功能说它已经在工作,并且我确实在控制台日志中收到了消息,但是,通知没有在我的手机中以后台模式部署。
我已经实现了在我的用户登录主视图后接收通知的权限。这是我的代码:
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")
}
}
我不知道可能是什么问题以及为什么我在控制台中收到信息但它没有被推送到应用程序。我搜索了几个 stackoverflow 问题,但没有一个有效。
这是我的控制台记录的内容:
2020-08-06 11:06:06.804344-0500 FleaMarket_UserSide[13985:4429211] [] nw_read_request_report [C2] 接收失败,出现错误“软件导致连接中止” [AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): { “内容可用”= 1; }, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): 你明白了吗, AnyHashable("google.c.sender.id"): 520471783461] 收到远程通知中的用户信息:[AnyHashable("title"): Jay Shetty Meditations, AnyHashable("aps"): { “内容可用”= 1; }, AnyHashable("gcm.message_id"): 1596729966264394, AnyHashable("message"): 你明白了吗, 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) 流错误:'不可用:套接字未连接'
【问题讨论】:
-
如果你还没有启用远程通知服务stackoverflow.com/questions/30979218/…
-
@naga 我已经将 FirebaseAppDelegateProxyEnabled 设置为 YES,但我还是不明白
-
@naga 并通过启用远程通知服务......你的意思是能力吗?如果是这样,那么是的。我已经启用了它。当我通过 Firebase 内部的 CLOUD MESSAGING 发送推送通知时,我确实会收到推送通知
-
您好,您是否尝试按照任何指南或教程来实现这一目标?例如,您尝试过this 吗?
标签: ios swift google-cloud-functions firebase-cloud-messaging