正确的方式来检索FCM的令牌 – iOS 10 Swift 3
我已经通过FirebaseAuth / FCM等实现了Firebase,并通过Firebase控制台成功发送了通知。
不过,我需要从我自己的应用程序服务器推送通知。
我想知道下面哪种方式是正确的方式来检索设备的注册ID:
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()!
我正在使用第一种方式,即使注册ID相应地存储在我的应用程序服务器数据库上,也没有收到推送通知,我得到这个CURL会话结果: –
{"multicast_id":6074293608087656831,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
我也尝试了第二种方式,并得到致命错误,如下所示运行应用程序: –
如果有人能指出我正确的方式感谢赞赏,谢谢!
tokenRefreshNotification
函数在启动应用程序时并不总是被调用。
但是,将代码放在常规的didRegisterForRemoteNotificationsWithDeviceToken
委托函数内时,每次都可以获取令牌:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { if let refreshedToken = FIRInstanceID.instanceID().token() { print("InstanceID token: \(refreshedToken)") } }
(swift 3)
Swift 3 + Firebase 4.0.4:
static var FirebaseToken : String? { return InstanceID.instanceID().token() }
去第二个选项,这看起来真的很愚蠢/简单,但要解决这个零可选的致命错误,只需删除最后的解压
你的代码:
var token = FIRInstanceID.instanceID().token()!
做了:
var token = FIRInstanceID.instanceID().token()
那至less会解决这个令人讨厌的崩溃
FCM设备令牌swift3
let fcmDeviceToken = FIRInstanceID.instanceID().token() print("FCM token: \(fcmDeviceToken ?? "")")
Firebase推荐的方式:
let token = Messaging.messaging().fcmToken
参考: 在iOS上设置Firebase云消息传递客户端应用程序
首先注册firebase令牌刷新通知:
NotificationCenter.default.addObserver(self, selector: #selector(tokenRefreshNotification), name: NSNotification.Name.InstanceIDTokenRefresh, object: nil)
然后,您可以在tokenRefreshNotificationselect器中接收标记:
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() }
尝试这个
let credential = FIRFacebookAuthProvider.credential(withAccessToken;FBSDKAccessToken.current().tokenString)