Правильный способ получения токена для FCM - iOS 10 Swift 3
Я реализовал Firebase с FirebaseAuth/FCM и т.д. и успешно отправил уведомление через Firebase Console.
Однако мне нужно будет отправить уведомление с моего собственного сервера приложений.
Мне интересно, какой путь является правильным способом получить идентификатор регистрации для устройства: -
1) получить регистрационный идентификатор регистрации из didRegisterForRemoteNotificationWithDeviceToken
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var token = ""
for i in 0..<deviceToken.count {
token += String(format: "%02.2hhx", arguments: [deviceToken[i]])
}
print("Registration succeeded!")
print("Token: ", token)
Callquery(token)
}
2) Получить регистрационный токен из firebase (на основе документа Firebase, который извлекает текущий токен регистрации)
let token = FIRInstanceID.instanceID().token()!
i использовал первый способ, push-уведомление не принимается, даже если идентификатор регистрации хранится в базе данных моего сервера приложений, и я получаю этот результат сеанса CURL: -
{"multicast_id":6074293608087656831,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
Я также попробовал второй способ и получил фатальную ошибку при запуске приложения, как показано ниже:
![введите описание изображения здесь]()
оценил, может ли кто-нибудь указать мне правильный путь, спасибо!
Ответы
Ответ 1
Функция tokenRefreshNotification
не всегда вызывается при запуске приложения.
Однако при размещении кода внутри регулярной функции делегата didRegisterForRemoteNotificationsWithDeviceToken
я могу получить токен каждый раз:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
if let refreshedToken = FIRInstanceID.instanceID().token() {
print("InstanceID token: \(refreshedToken)")
}
}
(скорость 3)
Ответ 2
Swift 3 + Firebase 4.0.4:
static var FirebaseToken : String? {
return InstanceID.instanceID().token()
}
Ответ 3
Рекомендуемый способ Firebase:
let token = Messaging.messaging().fcmToken
Ссылка: Настройка клиентского приложения CloudBase Firebase для iOS
Ответ 4
Перейдите со вторым параметром, и это будет казаться действительно глупым/простым, но чтобы исправить эту необязательную фатальную ошибку nil, просто удалите разворот в конце
Ваш код:
var token = FIRInstanceID.instanceID().token()!
Сделать это:
var token = FIRInstanceID.instanceID().token()
Это по крайней мере устранит этот неприятный сбой
Ответ 5
Значок устройства FCM swift3
let fcmDeviceToken = FIRInstanceID.instanceID().token()
print("FCM token: \(fcmDeviceToken ?? "")")
Ответ 6
Первый регистр для уведомления об обновлении токена firebase:
NotificationCenter.default.addObserver(self, selector:
#selector(tokenRefreshNotification), name:
NSNotification.Name.InstanceIDTokenRefresh, object: nil)
Затем вы можете получить токен в селекторе tokenRefreshNotification:
func tokenRefreshNotification(_ notification: Notification) {
if let refreshedToken = FIRInstanceID.instanceID().token() {
print("InstanceID token: \(refreshedToken)")
}
// Connect to FCM since connection may have failed when attempted before having a token.
connectToFcm()
}
Ответ 7
попробуйте это
let credential = FIRFacebookAuthProvider.credential(withAccessToken;FBSDKAccessToken.current().tokenString)