Odpowiedz

8

Teraz otrzymałem odpowiedź po napotkaniu wielu problemów związanych z generowaniem nowego lub modyfikowania tokena dla powiadomienia push.

1) Usuń stary Firebase żeton

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

2) Poproś o nowe Firebase żeton

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

To "messaging(). Connect" jest potrzebne do odnowienia tokena? –

+0

tak, ponieważ nie ma sposobu na odnowienie tokena, najpierw musimy usunąć token i po tym żądaniu nowego tokena, więc "messaging(). Connect" wymagane. jeśli znajdziesz inny sposób, sugestie są zawsze mile widziane. – PRAVEEN

+0

To "usuń" nie jest już używane, musimy użyć wartości logicznej "shouldEstablishDirectChannel" i nie odświeżamy tokena, zachowujemy to samo. Kiedy ja to rozwiążę, tutaj zamieszczę. Dzięki! –

0

Rozumiem, że chcesz zmienić lub zaktualizować Firebase token.

utworzyć następujące dwie metody

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

zadzwonić do

unregisterFirebaseToken (:)

i kontroli zamknięcia jeśli jest prawdziwa wtedy zadzwonić

registerFi rebaseToken()

to zawiedzie po raz pierwszy i jeden z metody delegata zostanie wywołana tj

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

Tym razem

registerFirebaseToken()

zostanie wywołany ponownie z metody delegatów, a otrzymasz nowy token.

0

Updated odpowiedzi na 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 

Otrzymujemy Ta zaktualizowana token w sposób MessagingDelegate jak również token odświeżania

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