Saltar al contenido

Firebase Auth usando el número de teléfono devuelve un error interno

Puede darse el caso de que halles algún fallo en tu código o trabajo, recuerda probar siempre en un entorno de testing antes añadir el código al proyecto final.

Solución:

Probado con la última Firebase iOS SDK, es decir, 4.0.0 y Xcode 8.3

En primer lugar, elimine esto key FirebaseAppDelegateProxyEnabled de info.plist. Esto no es necesario.

Ahora en AppDelegate.swift agregar las siguientes funciones

import Firebase
import UserNotifications

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate , UNUserNotificationCenterDelegate{
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

        if #available(iOS 10.0, *) 
            // For iOS 10 display notification (sent via APNS)
            UNUserNotificationCenter.current().delegate = self
            let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
            UNUserNotificationCenter.current().requestAuthorization(
                options: authOptions,
                completionHandler: _, _ in )
         else 
            let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
            application.registerUserNotificationSettings(settings)
        

        application.registerForRemoteNotifications()
        FirebaseApp.configure()
        return true
    
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
    // Pass device token to auth.
    let firebaseAuth = Auth.auth()

    //At development time we use .sandbox
    firebaseAuth.setAPNSToken(deviceToken, type: AuthAPNSTokenType.sandbox)

    //At time of production it will be set to .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
    
*

Envía un código de verificación al teléfono del usuario:

En la clase en la que desea integrar la autenticación telefónica, escriba:

Nota : Yo he añadido +91 como su código de país para la India. Puede agregar el código de país según su región.

 PhoneAuthProvider.provider().verifyPhoneNumber("+919876543210") { (verificationID, error) in
       if ((error) != nil) 
             // Verification code not sent.
             print(error)
        else 
              // Successful. User gets verification code 
              // Save verificationID in UserDefaults
             UserDefaults.standard.set(verificationID, forKey: "firebase_verification")
             UserDefaults.standard.synchronize()
             //And show the Screen to enter the Code.
                      

Iniciar sesión del usuario con el código de verificación:

 let verificationID = UserDefaults.standard.value(forKey: "firebase_verification")
 let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID! as! String, verificationCode: self.txtEmailID.text!)

   Auth.auth().signIn(with: credential, completion: (_ user: User, _ error: Error?) -> Void in
         if error != nil 
            // Error
          else 
             print("Phone number: (user.phoneNumber)")
              var userInfo: Any? = user.providerData[0]
                    print(userInfo)
                
          as! AuthResultCallback)

En mi caso, fue el tipo de token apns el que estaba mal:

Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.prod)

debería haber sido:

Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.sandbox)

Vuelva a verificar que el ID del paquete de la aplicación en Xcode coincida con el ID del paquete en Firebase exactamente. Y por exactamenteasegúrese de que sus mayúsculas y minúsculas coincidan; a Xcode le gusta usar mixed mayúsculas y minúsculas de forma predeterminada para la parte del nombre de la aplicación del ID del paquete.

Si termina cambiando la ID del paquete en Xcode, asegúrese de eliminar manualmente el perfil de aprovisionamiento de la aplicación antes de generar uno nuevo en Xcode, o fallará repetidamente (Apple aparentemente ignora el caso en los nombres de perfil).

Si aceptas, puedes dejar un enunciado acerca de qué le añadirías a esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *