我正在尝试使用Firebase使用电话号码身份验证登录帐户。
最初,我使用设备部署了该应用程序,并且运行良好。但是,当我尝试将应用程序部署到另一台设备上时,它引发了错误Token Mismatch
。
我在stackoverflow
中搜索了几个答案,然后找到了这个answer,我一直在关注,但它对我没有用。
我已经检查了以下内容:
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设备时,它仍然给我错误。
我想知道为什么吗?
答案 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
}
}