[英]Firebase Phone Number Authentification IOS Error: Optional(“Token mismatch”)
Hi I have follow the tutorial for the phone number auth in swift , this is my code: 嗨,我已经按照swift的电话号码auth教程进行了操作,这是我的代码:
import UIKit
import FirebaseAuth
class SignInViewController: UIViewController {
@IBOutlet weak var number: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
let myColor : UIColor = UIColor.white
number.layer.borderWidth = 2.0
number.layer.borderColor = myColor.cgColor
number.layer.cornerRadius = 15.0
number.attributedPlaceholder = NSAttributedString(string :"Enter your number", attributes : [NSForegroundColorAttributeName : UIColor.white] )
}
@IBAction func sendCode(_ sender: Any){
let alert = UIAlertController(title: "Phone Number", message: "Is this your phone number? \n \(number.text!)", preferredStyle: .alert)
let action = UIAlertAction(title: "Yes", style: .default) {(UIAlertAction) in
PhoneAuthProvider.provider().verifyPhoneNumber(self.number.text!){ (verificationID, error) in
if error != nil{
print("Error: \(String(describing: error?.localizedDescription))")
}else {
let defaults = UserDefaults.standard
defaults.set(verificationID, forKey: "authVID")
self.performSegue(withIdentifier: "code", sender: Any?.self)
}
}
}
let cancel = UIAlertAction(title: "No", style: .cancel, handler: nil)
alert.addAction(action)
alert.addAction(cancel)
self.present(alert,animated : true, completion : nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
and for the verification this code : 为了验证此代码:
import UIKit
import FirebaseAuth
class VerificationCodeViewController: UIViewController {
@IBOutlet weak var code: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
let myColor : UIColor = UIColor.white
code.layer.borderWidth = 2.0
code.layer.borderColor = myColor.cgColor
code.layer.cornerRadius = 15.0
code.attributedPlaceholder = NSAttributedString(string :"Enter your verification code", attributes : [NSForegroundColorAttributeName : UIColor.white] )
// Do any additional setup after loading the view.
}
@IBAction func verifyCode(_ sender: Any) {
let defaults = UserDefaults.standard
let credential : PhoneAuthCredential = PhoneAuthProvider.provider().credential(withVerificationID: defaults.string(forKey: "authVID")!, verificationCode: code.text!)
Auth.auth().signIn(with: credential) { (user,error) in
if error != nil {
print("error: \(String(describing: error?.localizedDescription))")
}else{
print("Phone number: \(String(describing: user?.phoneNumber))")
let userInfo = user?.providerData[0]
print("Provider ID: \(String(describing: userInfo?.providerID))")
self.performSegue(withIdentifier: "logged", sender: Any?.self)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
I run my app I enter the number but i get this error Error: 我运行我的应用程序,输入了数字,但出现此错误错误:
Optional("Token mismatch") 可选(“令牌不匹配”)
Thanks you for help 谢谢你的帮助
Please have in mind, about the type of certificate you are using while sharing the build, 请注意,关于共享版本时您使用的证书类型,
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// If you are using the development certificate you have to use this,
Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.prod)
// If you are using distribution certificate you should use this
Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.sandbox)
// If you want Firebase to automatically detect the type use this.
Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.unknown)
}
This is important because while sending push notification the URL changes in the server side. 这很重要,因为在发送推送通知时,URL在服务器端发生了变化。
SANDBOX_ENDPOINT_URL = 'ssl://gateway.sandbox.push.apple.com:2195'; SANDBOX_ENDPOINT_URL ='ssl://gateway.sandbox.push.apple.com:2195'; const SERVICE_ENDPOINT_URL = 'ssl://gateway.push.apple.com:2195'; const SERVICE_ENDPOINT_URL ='ssl://gateway.push.apple.com:2195';
I believe the token type will be used to choose the URL of APNS. 我相信令牌类型将用于选择APNS的URL。
Make sure that you have a reference to the database. 确保您有对数据库的引用。 The error is saying that the service account is not recognizing the phone number. 该错误表明服务帐户无法识别电话号码。 When you're registering a user with a phone number, you need to be updating the database. 使用电话号码注册用户时,需要更新数据库。
let ref = Database.database().reference(fromURL: "https://MyFireBaseProject.com/")
Your database URL can be found in the database console. 您的数据库URL可以在数据库控制台中找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.