当用户在通知上单击“允许”时,FCM令牌剂量将保存在数据库中

时间:2019-02-08 12:38:21

标签: swift xcode firebase firebase-cloud-messaging

我开发了一个目前在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)
        }
    }

1 个答案:

答案 0 :(得分:0)

我注意到,“ FCM令牌”仅在用户登录时才发送到数据库,因此,当用户未登录时首次打开应用程序时,问题就来了。

解决方案是:

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
        UserDefaults.standard.setValue("fcmToken", forKey: fcmToken)
    }
  • 稍后从userDefaults获取令牌

    让deviceToken = UserDefaults.standard.value(forKey:“ fcmToken”)为?字符串?? “未找到”

    在用户登录后立即将其发送到服务器。