Изменить / обновить токен уведомления Firebase или идентификатор экземпляра принудительно с помощью кода?
Что я должен сделать, чтобы изменить или запросить токен в firebase? уникальный токен, сгенерированный firebase на основе информации об устройстве.
5 ответов
Теперь я получил свой ответ после того, как столкнулся с множеством проблем, связанных с генерацией новых или измененных токенов в firebase для push-уведомлений.
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) Удалить старый токен
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)
}
ОБНОВЛЕНО ДЛЯ СООБЩЕНИЙ 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.
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)
}
}
}
Позвоните
unregisterFirebaseToken(:)
и в проверке закрытия, если истина, то позвоните
registerFirebaseToken()
это не удастся в первый раз, и будет вызван один из методов делегата, т.е.
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
registerFirebaseToken()
}
}
Этот раз
registerFirebaseToken()
будет вызван снова из метода делегата, и вы получите новый токен.