Antwort

8

Jetzt habe ich meine Antwort nach vielen Schwierigkeiten für die Generierung neuer oder Änderung Token der Firebase für Push-Benachrichtigung.

1) Löschen Sie alte Firebase Token

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

2) anfordern neue Firebase Token

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.") 
    } 
} 
+0

Diese "messaging(). Connect" wird für erneute Token benötigt? –

+0

Ja, weil es keine Möglichkeit gibt, das Token zu erneuern, müssen wir zuerst das Token löschen und danach ein neues Token anfordern, also "messaging(). Connect" erforderlich. Wenn Sie einen anderen Weg finden, sind Vorschläge immer willkommen. – PRAVEEN

+0

Dieses "delete" wird nicht mehr verwendet, wir müssen "boolean" shouldEstablishDirectChannel verwenden, und es wird das Token nicht aktualisiert, behalten Sie dasselbe. Wenn ich es auflöse, werde ich hier setzen. Vielen Dank! –

0

Ich verstehe, dass Sie die Feuerbasis Token ändern oder aktualisieren möchten.

erstellen die folgenden zwei Verfahren

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) 
     } 
    } 
} 

Rufen Sie die

unregisterFirebaseToken (:)

und in der Schließung zu überprüfen, ob wahr rufen dann

registerFi (RebaseToken)

dies zum ersten Mal versagen wird und eine der Delegatmethode wird also

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

Diesmal

registerFirebaseToken()

nennen Wird von der Delegate-Methode erneut aufgerufen und Sie erhalten ein neues Token.

0

aktualisiert Antwort für 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 

Wir erhalten diese aktualisierte Token in MessagingDelegate Verfahren sowie in Refresh Token

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