答えて

8

私は、プッシュ通知のためのfirebaseの新しいトークンまたは変更トークンを生成するための多くの問題に直面した後、私の答えを得ました。

1)

2歳Firebaseトークン

let instance = FIRInstanceID.instanceID() 
_ = FIRInstanceID.delete(instance) 
FIRInstanceID.instanceID().delete { (err:Error?) in 
    if err != nil{ 
     print(err.debugDescription); 
    } else { 
     print("Token Deleted"); 
    } 
} 
を削除しますが)、私はあなたがfirebaseトークンを変更したり、更新したいことを理解し、新たな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.") 
    } 
} 
+0

更新トークンにはこの "messaging()。connect"が必要ですか? –

+0

はい、トークンを更新する方法がないので、最初にトークンを削除してから新しいトークンを要求しなければならないので、 "messaging()。connect"が必要です。あなたが別の方法を見つけたら、提案はいつでも歓迎します。 – PRAVEEN

+0

この「削除」はもう使用されません。「shouldEstablishDirectChannel」ブール値を使用する必要があります。トークンをリフレッシュしていないので、同じままにしてください。私はそれを解決するとき、私はここに入れます。ありがとう! –

0

を要求します。

真その後

registerFiを呼び出す場合、次の二つの方法

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(:)

と閉鎖チェックで

を呼び出して作成します。 rebaseToken()

これが初めて失敗し、デリゲートメソッドの1、すなわち

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

と呼ばれるこの時間

registerFirebaseToken()

デリゲートメソッドから再度呼び出され、新しいトークンが取得されます。

0

スウィフト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方法ならびに更新トークンにこの更新されたトークンを受け取る

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) { 
    print("Firebase registration token: \(fcmToken)") 
} 
関連する問題