2017-07-09 2 views
0

Hallo habe ich das Tutorial für die Telefonnummer Auth in schnellen folgen, dies ist mein Code:Firebase Telefonnummer Authentification IOS Fehler: Optional ("Token mismatch")

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. 
} 

} 

und für die Überprüfung dieser 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. 
} 

} 

ich betreibe meine app gebe ich die Nummer, aber ich bekomme diese Fehlermeldung Fehler:

Optional("Token mismatch")

Tha nks Sie für Hilfe

+0

Ich gatting gleichen Fehler, können Sie Lösung für dieses Problem bekommen ?? –

Antwort

0

Stellen Sie sicher, dass Sie einen Verweis auf die Datenbank haben. Der Fehler besagt, dass das Dienstkonto die Telefonnummer nicht erkennt. Wenn Sie einen Benutzer mit einer Telefonnummer registrieren, müssen Sie die Datenbank aktualisieren.

let ref = Database.database().reference(fromURL: "https://MyFireBaseProject.com/") 

Ihre Datenbank-URL finden Sie in der Datenbankkonsole.

2

Bitte denken Sie daran, über die Art des Zertifikats, das Sie verwenden, während die Build-Sharing,

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) 

} 

Dies ist wichtig, da beim Senden Push-Benachrichtigung der URL Änderungen in der Server-Seite.

SANDBOX_ENDPOINT_URL = 'ssl://gateway.sandbox.push.apple.com:2195'; const SERVICE_ENDPOINT_URL = 'ssl://gateway.push.apple.com:2195';

Ich glaube, der Tokentyp wird verwendet, um die URL von APNS zu wählen.