Was soll ich tun, um das Token in der Firebase zu ändern oder anzufordern? das eindeutige Token, das von firebase auf der Grundlage von Geräteinformationen generiert wird.
Jetzt habe ich meine Antwort erhalten, nachdem ich viele Probleme damit hatte, ein neues Token für die Push-Benachrichtigung zu generieren oder das Token der Firebase zu ändern.
1) Löschen Sie das 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) Fordern Sie ein neues Firebase-Token an
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.")
}
}
UPDATE FÜR Swift 4 & Firebase 4.8.2 (Befolgen Sie einfach zwei Schritte) ????????
1) Lösche altes Token
let instance = InstanceID.instanceID()
instance.deleteID { (error) in
print(error.debugDescription)
}
2) Anforderung eines neuen Tokens
if let token = InstanceID.instanceID().token() {
print("Token : \(token)");
} else {
print(“Error: unable to fetch token");
}
Messaging.messaging().shouldEstablishDirectChannel = true
Sie können das aktualisierte Token in der MessagingDelegate-Methode didReceiveRegistrationToken
und im Refresh Token abrufen.
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase Token : \(fcmToken)")
}
Aktualisierte 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 dieses aktualisierte Token sowohl in der MessagingDelegate-Methode als auch im Refresh Token
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
}
Ich verstehe, dass Sie das Firebase-Token ändern oder aktualisieren möchten.
Erstellen Sie die folgenden zwei Methoden
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)
}
}
}
Ruf den
unregisterFirebaseToken (:)
und in der Schließung prüfen, ob wahr, dann anrufen
registerFirebaseToken ()
dies wird zum ersten Mal fehlschlagen und eine der Delegate-Methoden wird aufgerufen, d.h.
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
registerFirebaseToken()
}
}
Diesmal
registerFirebaseToken ()
wird von der Delegate-Methode erneut aufgerufen und Sie erhalten ein neues Token.
im Moment ist InstanceID.instanceID().token()
veraltet.
Sie sollten dies verwenden:
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
Dann in AppDelegate:
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
//Here is your new FCM token
print("Registered with FCM with token:", fcmToken)
}