Firebaseでトークンを変更またはリクエストするには、どうすればよいですか?デバイス情報に基づいてfirebaseによって生成された一意のトークン。
プッシュ通知用の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(単純な2つの手順に従う)のために更新)????????
1)古いトークンを削除
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
と更新トークンで更新されたトークンを取得できます。
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)
}
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メソッドと更新トークンで受け取ります。
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
}
Firebaseトークンを変更または更新したいとのことですが、.
次の2つのメソッドを作成します
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の場合は呼び出します
registerFirebaseToken()
これは初めて失敗し、デリゲートメソッドの1つが呼び出されます。
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
registerFirebaseToken()
}
}
今回
registerFirebaseToken()
デリゲートメソッドから再度呼び出され、新しいトークンを取得します。