我应该怎么做才能更改或请求 firebase 中的令牌?firebase 根据设备信息生成的唯一令牌。
5 回答
现在,在为推送通知生成新的或更改 firebase 令牌时遇到许多麻烦后,我得到了答案。
1) 删除旧的 Firebase 令牌
let instance = FIRInstanceID.instanceID()
_ = FIRInstanceID.delete(instance)
FIRInstanceID.instanceID().delete { (err:Error?) in
if err != nil{
print(err.debugDescription);
} else {
print("Token Deleted");
}
}
2) 请求新的 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.")
}
}
SWIFT 4 和 Firebase 4.8.2 的更新(遵循简单的两个步骤)
1) 删除旧Token
let instance = InstanceID.instanceID()
instance.deleteID { (error) in
print(error.debugDescription)
}
2) 请求新令牌
if let token = InstanceID.instanceID().token() {
print("Token : \(token)");
} else {
print(“Error: unable to fetch token");
}
Messaging.messaging().shouldEstablishDirectChannel = true
您可以在 MessagingDelegate 方法didReceiveRegistrationToken
和 Refresh Token 中获取更新的令牌。
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase Token : \(fcmToken)")
}
目前InstanceID.instanceID().token()
已弃用。
你应该使用这个:
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
然后在 AppDelegate 中:
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
//Here is your new FCM token
print("Registered with FCM with token:", fcmToken)
}
已针对 FireBASE 消息传递 7.3.0 进行了更新
class func regenerateFCM(){
Installations.installations().delete { (err) in
if let err = err {
print(err)
}else{
Installations.installations().authTokenForcingRefresh(true) { (result,err) in
if let result = result {
print(result)
Messaging.messaging().deleteToken { (err) in
if let err = err {
print(err)
}else{
print("FCM TOKEN DELETED")
Messaging.messaging().token { (token, err) in
if let token = token {
print("NEW FCM TOKEN GENERATED")
print(token)
}
if let err = err {
print("ERROR WHILE GENERATING NEW FCM TOKEN")
print(err)
}
}
}
}
}else if let err = err {
print(err)
}
}
}
}
}
Firebase 8.5.0 的更新
Messaging.messaging().deleteToken { err in
if let err = err {
print("Error while generating new FCM Token")
print(err)
}else{
Messaging.messaging().token { token, err in
if let token = token {
print("NEW FCM TOKEN GENERATED")
print(token)
}
}
}
}
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
我们在 MessagingDelegate 方法和 Refresh Token 中收到这个更新的令牌
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
}
我了解到您想要更改或更新 firebase 令牌。
创建以下两个方法
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)
}
}
}
调用
注销FirebaseToken(:)
并在闭包中检查是否为真,然后调用
注册FirebaseToken()
这将第一次失败,并且将调用一个委托方法,即
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
registerFirebaseToken()
}
}
这次
注册FirebaseToken()
将再次从委托方法调用,您将获得一个新令牌。