Correct way to retrieve token for FCM - iOS 10 Swift 3
i had implement Firebase with FirebaseAuth/FCM etc and did sent notification successfully through Firebase Console.
However i would need to push the notification from my own app server.
i am wondering below which way is correct way to retrieve the registration id for the device:-
1) retrieve registration id token from 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) Retrieve Registration token from firebase (Based on Firebase document which retrieve the current registration token)
let token = FIRInstanceID.instanceID().token()!
i was using the first way, the push notification is not being received even the registration id is stored on my app server database accordingly and i get this CURL session result :-
{"multicast_id":6074293608087656831,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
i had also tried the second way and get fatal error while running the app as below:-
appreciated if anyone could point me the right way, thanks!
Solution 1:
The tokenRefreshNotification
function doesn't always get called when launching the app.
However, when placing the code inside the regular didRegisterForRemoteNotificationsWithDeviceToken
delegate function, I can get the token every time:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
if let refreshedToken = InstanceID.instanceID().token() {
print("InstanceID token: \(refreshedToken)")
}
}
(Swift 3 + Firebase 4.0.4)
Solution 2:
The recommended way by Firebase:
let token = Messaging.messaging().fcmToken
Reference : Setting Up a Firebase Cloud Messaging Client App on iOS
Solution 3:
Swift 3 + Firebase 4.0.4 :
static var FirebaseToken : String? {
return InstanceID.instanceID().token()
}