Firebase FCM не обновляет неверный токен Swift после закрытия приложения - PullRequest
0 голосов
/ 12 июня 2019

Я использую FCM для отправки push-уведомлений в свое приложение через функции Firebase. Я могу сгенерировать токен и отправить пользователю push-уведомления, но как только приложение полностью закрывается, токен становится недействительным. Я пытаюсь обновить токен с помощью метода, описанного ниже, но он просто возвращает тот же токен, который уже есть в моей базе данных и который Firebase Functions говорит, что он недействителен. Этот последний метод не вызывается.

class PushNotificationManager: NSObject, MessagingDelegate, UNUserNotificationCenterDelegate {
    let userID: String
    init(userID: String) {
        self.userID = userID
        super.init()
    }

    func registerForPushNotifications() {
        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 })
            // For iOS 10 data message (sent via FCM)
            Messaging.messaging().delegate = self

        } else {
            let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
            UIApplication.shared.registerUserNotificationSettings(settings)
        }
        UIApplication.shared.registerForRemoteNotifications()
        updateFirestorePushTokenIfNeeded()
    }

    func updateFirestorePushTokenIfNeeded() {
        InstanceID.instanceID().instanceID { (result, error) in
            if let error = error {
                print("Error fetching remote instance ID: \(error)")
            } else if let result = result {
                print("Remote instance ID token: \(result.token)")
                var ref: DatabaseReference!
                ref = Database.database().reference()
                ref.child("users").child((Auth.auth().currentUser?.uid)!).updateChildValues(["fcmToken" :  result.token])
            }
        }

    }

    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
        print("Firebase registration token: \(fcmToken)")

        var ref: DatabaseReference!
        ref = Database.database().reference()
        ref.child("users").child((Auth.auth().currentUser?.uid)!).updateChildValues(["fcmToken" :  fcmToken])
    }
}
...