使用电话号码身份验证的令牌不匹配-iOS

时间:2018-12-24 11:55:46

标签: ios swift xcode firebase-authentication token

我正在尝试使用Firebase使用电话号码身份验证登录帐户。

最初,我使用设备部署了该应用程序,并且运行良好。但是,当我尝试将应用程序部署到另一台设备上时,它引发了错误Token Mismatch

我在stackoverflow中搜索了几个答案,然后找到了这个answer,我一直在关注,但它对我没有用。

我已经检查了以下内容:

  1. 确保在“项目设置”>“云消息传递”下,我已将有效的开发和生产APNS证书上载到Firebase仪表板。 (我的APNS证书的有效期至明年)。
  2. 在Xcode的.entitlements文件中,确保APS Environment值设置为“开发”或“生产”,具体取决于您的测试情况。 (我也检查过)。
  3. 最后(这是我所缺少的),在AppDelegate.swift内部和方法didRegisterForRemoteNotificationsWithDeviceToken中进行检查,将值从.sandbox更改为.prod,或更改为{{ 1}},让应用程序捆绑包根据您的配置文件确定要使用的令牌类型。

这第三次我也改变了

.unknown

但是,当我在其他设备上运行此应用程序时,总是会引发该错误。

但是,当我注释这段代码 let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined() print("==== This is device token ",token) let data = Data(token.utf8) Auth.auth().setAPNSToken(data, type: AuthAPNSTokenType.unknown) ,然后在运行该应用程序之后,我便取消了注释这段代码// Auth.auth().setAPNSToken(data, type: AuthAPNSTokenType.unknown)的注释,然后再次运行该应用程序,终于可以运行了。但是可悲的是,当我运行另一个iOS设备时,它仍然给我错误。 我想知道为什么吗?

1 个答案:

答案 0 :(得分:1)

按照步骤

1)导入Firebase和FirebaseAuth

import Firebase import FirebaseAuth

2)在didFinishLaunchingWithOptions中配置firebase。

FirebaseApp.configure()

3)在AppDelegate中编写这两个函数。

  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let firebaseAuth = Auth.auth()
    firebaseAuth.setAPNSToken(deviceToken, type: AuthAPNSTokenType.prod)

}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    let firebaseAuth = Auth.auth()
    if (firebaseAuth.canHandleNotification(userInfo)){
        print(userInfo)
        return
    }
}

4)在您的ViewController类中,重复步骤 first ,并编写用于在所需的手机号码上发送OTP的代码。

@IBAction func sendCodeAction(_ sender: Any) {
    let ugrMgr = UserManager.userManager
    let phoneNumber = Auth.auth().currentUser?.phoneNumber
    print(phoneNumber!)
    print(ugrMgr.mobile!)
    PhoneAuthProvider.provider().verifyPhoneNumber("+91" + ugrMgr.mobile!, uiDelegate: nil) { (verificationID, error) in
        if let error = error {
            print(error.localizedDescription)
            mainInstance.ShowAlertWithError(error.localizedDescription as NSString, msg: error.localizedDescription as NSString)
            return
        }
    self.verificationID = verificationID

    }

}