Изменить / обновить токен уведомления Firebase или идентификатор экземпляра принудительно с помощью кода?

Что я должен сделать, чтобы изменить или запросить токен в firebase? уникальный токен, сгенерированный firebase на основе информации об устройстве.

5 ответов

Решение

Теперь я получил свой ответ после того, как столкнулся с множеством проблем, связанных с генерацией новых или измененных токенов в firebase для push-уведомлений.

1) Удалить старый токен Firebase

let instance = FIRInstanceID.instanceID()
_ = FIRInstanceID.delete(instance)
FIRInstanceID.instanceID().delete { (err:Error?) in
    if err != nil{
        print(err.debugDescription);
    } else {
        print("Token Deleted");
    }
}

2) Запросить новый токен Firebase

if let token = FIRInstanceID.instanceID().token() {
    print("Token \(token) fetched");
} else {
    print("Unable to fetch token");
}

FIRMessaging.messaging().connect { (error) in
    if (error != nil) {
        print("Error connecting to FCM. \(error.debugDescription)")
    } else {
        print("Connected to FCM.")
    }
}

ОБНОВЛЕНИЕ ДЛЯ SWIFT 4 и Firebase 4.8.2 (выполните два простых шага)

1) Удалить старый токен

let instance = InstanceID.instanceID()
instance.deleteID { (error) in
    print(error.debugDescription)
}

2) Запрос нового токена

if let token = InstanceID.instanceID().token() {
    print("Token : \(token)");
} else {
    print(“Error: unable to fetch token");
}

Messaging.messaging().shouldEstablishDirectChannel = true

Вы можете получить обновленный токен в методе MessagingDelegate. didReceiveRegistrationToken и в Обновить токен.

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

Теперь InstanceID.instanceID().token() устарела.

Вы должны использовать это:

let instance = InstanceID.instanceID()
instance.deleteID { (error) in
  print(error.debugDescription)
}

instance.instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instange ID: \(error)")
  } else {
    print("Remote instance ID token: \(String(describing: result?.token))")
  }
}
Messaging.messaging().shouldEstablishDirectChannel = true

Затем в AppDelegate:

extension AppDelegate: MessagingDelegate {

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    //Here is your new FCM token
    print("Registered with FCM with token:", fcmToken)
}

ОБНОВЛЕНО ДЛЯ СООБЩЕНИЙ FIREBASE 7.3.0

      class func regenerateFCM(){
    Installations.installations().delete { (err) in
        if let err = err {
            print(err)
        }else{
            Installations.installations().authTokenForcingRefresh(true) { (result,err) in
                if let result = result {
                    print(result)
                   
                    Messaging.messaging().deleteToken { (err) in
                        if let err = err {
                            print(err)
                        }else{
                            print("FCM TOKEN DELETED")
                            Messaging.messaging().token { (token, err) in
                                if let token = token {
                                    print("NEW FCM TOKEN GENERATED")
                                    print(token)
                                }
                                if let err = err {
                                    print("ERROR WHILE GENERATING NEW FCM TOKEN")
                                    print(err)
                                }
                            }
                        }
                    }
                    
                }else if let err = err {
                    print(err)
                }
            }
        }
    }
}

ОБНОВЛЕНИЕ ДЛЯ FIREBASE 8.5.0

      Messaging.messaging().deleteToken { err in
        if let err = err {
            print("Error while generating new FCM Token")
            print(err)
        }else{
            Messaging.messaging().token { token, err in
                 if let token = token {
                    print("NEW FCM TOKEN GENERATED")
                    print(token)
                }
            }
        }
    }

Обновленный ответ для Swift 4, FireBase 4.8.2, FirebaseMessaging (2.0.8)

debugPrint("Existing Token :- \(Messaging.messaging().fcmToken!)")

let instance = InstanceID.instanceID()
instance.deleteID { (error) in
    print(error.debugDescription)
}

if let token = InstanceID.instanceID().token() {
    print("Token \(token) fetched");
} else {
    print("Unable to fetch token");
}
Messaging.messaging().shouldEstablishDirectChannel = true

Этот обновленный токен мы получаем как в методе MessagingDelegate, так и в токене Refresh.

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

Я понимаю, что вы хотите изменить или обновить маркер Firebase.

Создайте следующие два метода

func registerFirebaseToken() {
    if let token = InstanceID.instanceID().token() {
        print("FIREBASE: Token \(token) fetched")
    } else {
        print("FIREBASE: Unable to fetch token");
    }

    Messaging.messaging().shouldEstablishDirectChannel = true
}

func unregisterFirebaseToken(completion: @escaping (Bool)->()) {
    // Delete the Firebase instance ID
    InstanceID.instanceID().deleteID { (error) in
        if error != nil{
            print("FIREBASE: ", error.debugDescription);
            completion(false)
        } else {
            print("FIREBASE: Token Deleted");
            completion(true)
        }
    }
}

Позвоните

unregisterFirebaseToken(:)

и в проверке закрытия, если истина, то позвоните

registerFirebaseToken()

это не удастся в первый раз, и будет вызван один из методов делегата, т.е.

extension AppDelegate: MessagingDelegate {
    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
        registerFirebaseToken()
    }
}

Этот раз

registerFirebaseToken()

будет вызван снова из метода делегата, и вы получите новый токен.

Другие вопросы по тегам