我开发了一个目前在App Store中的应用。但是,在启动之前,我用iPhone测试了该应用程序,FCM令牌已在数据库中注册。但是现在随着用户开始使用该应用程序,我可以看到FCM令牌没有保存在数据库中吗?我要求我的朋友对其进行测试,但他都没有得到存储在数据库中的FCM令牌。
因此,通知不会显示(因为该功能没有电话可将通知发送到)。
有人能弄清楚吗? (过去几天我一直在尝试解决此问题,似乎无法发现问题出在哪里)
我的第一个ViewController中的代码,用户注册后即可到达。
func registerForRemoteNotifications() {
Messaging.messaging().delegate = self
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
}
UIApplication.shared.registerForRemoteNotifications()
}
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
if let userUid = Auth.auth().currentUser?.uid {
Database.database().reference().child("profile/" + userUid + "/fcmToken").setValue(fcmToken)
}
}
答案 0 :(得分:0)
我注意到,“ FCM令牌”仅在用户登录时才发送到数据库,因此,当用户未登录时首次打开应用程序时,问题就来了。
解决方案是:
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
UserDefaults.standard.setValue("fcmToken", forKey: fcmToken)
}
稍后从userDefaults获取令牌
让deviceToken = UserDefaults.standard.value(forKey:“ fcmToken”)为?字符串?? “未找到”
在用户登录后立即将其发送到服务器。