回答

8

现在,我在面对生成推送通知的Firebase新标记或更改标记的许多麻烦后得到了我的答案。

1)删除旧的火力地堡令牌

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

2)申请新的火力地堡令牌

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

是的,因为没有办法更新令牌,首先我们必须删除令牌,然后请求新令牌,因此需要“消息()。连接”。如果你会找到另一种方式,建议总是欢迎。 – PRAVEEN

+0

这个“删除”不再使用,我们必须使用“shouldEstablishDirectChannel”布尔值,并且它不刷新令牌,保持不变。当我解决它时,我会放在这里。谢谢! Swift 3中的 –

0

我知道你想改变或更新火力令牌。

创建以下两种方法

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

,并在封闭检查,如果为true,则调用

registerFi rebaseToken()

这将首次失败和委托方法的一个将被称为即

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

这次

registerFirebaseToken()

将从委托方法中再次调用,您将获得一个新的令牌。

0

为雨燕4,火力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)") 
}