Autenticar con Firebase de forma anónima en las plataformas de Apple

Puedes usar Firebase Authentication para crear y usar cuentas anónimas temporales a fin de autenticar con Firebase. Estas cuentas se pueden usar para permitir que los usuarios que aún no se hayan registrado en la app trabajen con datos protegidos mediante reglas de seguridad. Si un usuario anónimo decide registrarse para usar la app, puedes vincular sus credenciales de acceso con la cuenta anónima, de manera que pueda continuar usando sus datos protegidos en sesiones futuras.

Antes de comenzar

Usa Swift Package Manager para instalar y administrar las dependencias de Firebase.

  1. En Xcode, con tu proyecto de app abierto, navega a File > Add Packages.
  2. Cuando se te solicite, agrega el repositorio del SDK de Firebase para plataformas de Apple:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Elige la biblioteca de Firebase Authentication.
  5. Cuando termines, Xcode comenzará a resolver y descargar automáticamente tus dependencias en segundo plano.

A continuación, debes realizar los siguientes pasos de configuración:

  1. Si aún no conectaste la app al proyecto de Firebase, puedes hacerlo desde Firebase console.
  2. Habilita la autenticación anónima:
    1. En Firebase console, abre la sección Authentication.
    2. En la página Métodos de acceso, habilita el método de acceso Anónimo.
    3. Opcional: Habilita la limpieza automática. Si habilitas este parámetro de configuración, se borrarán automáticamente las cuentas anónimas de más de 30 días. En los proyectos que tienen habilitada la limpieza automática, la autenticación anónima ya no se considerará en los límites de uso ni las cuotas de facturación. Consulta Realiza una limpieza automática.

Autentica con Firebase de forma anónima

Cuando un usuario que no accedió a su cuenta usa una función de la app que requiere autenticación en Firebase, sigue estos pasos para que el usuario acceda de forma anónima:

  1. Importa el módulo FirebaseCore en tu UIApplicationDelegate, así como cualquier otros módulos de Firebase que use el delegado de la app. Por ejemplo, para usar Cloud Firestore y Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Configura una instancia compartida de FirebaseApp en el método application(_:didFinishLaunchingWithOptions:) del delegado de la app:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Si usas SwiftUI, debes crear un delegado de la aplicación y adjuntarlo al struct de tu App a través de UIApplicationDelegateAdaptor o NSApplicationDelegateAdaptor. También debes inhabilitar el swizzling del delegado de la app. Para obtener más información, consulta las instrucciones de SwiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Llama al método signInAnonymouslyWithCompletion: de la siguiente forma:

    Swift

    Auth.auth().signInAnonymously { authResult, error in
      // ...
    }
    

    Objective-C

    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
    
  5. Si el método signInAnonymouslyWithCompletion: se completa sin errores, podrás obtener los datos de la cuenta del usuario anónimo con el objeto FIRAuthDataResult:

    Swift

    guard let user = authResult?.user else { return }
    let isAnonymous = user.isAnonymous  // true
    let uid = user.uid
    

    Objective-C

    FIRUser *user = authResult.user;
    BOOL isAnonymous = user.anonymous;  // YES
    NSString *uid = user.uid;
    

Convierte una cuenta anónima en una permanente

Cuando un usuario anónimo se registra en la app, tal vez sea conveniente permitirle que continúe su trabajo con su cuenta nueva. Por ejemplo, puede que desees hacer que los elementos que el usuario agregó a su carrito de compras antes de registrarse estén disponibles en el carrito de compras de su cuenta nueva. Para hacerlo, completa los siguientes pasos:

  1. Cuando se registre el usuario, completa el flujo de acceso del proveedor de autenticación del usuario hasta el paso anterior a llamar a uno de los métodos FIRAuth.signInWith. Por ejemplo, obtén el token de ID de Google, el token de acceso a Facebook o la dirección de correo electrónico y contraseña del usuario.
  2. Obtén una FIRAuthCredential para el proveedor de autenticación nuevo:

    Acceso con Google
    Swift
    guard
      let authentication = user?.authentication,
      let idToken = authentication.idToken
    else {
      return
    }
    
    let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                   accessToken: authentication.accessToken)
    
    Objective-C
    FIRAuthCredential *credential =
    [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                     accessToken:result.user.accessToken.tokenString];
    
    Acceso con Facebook
    Swift
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    
    Acceso con correo electrónico y contraseña
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
    
  3. Pasa el objeto FIRAuthCredential al método linkWithCredential:completion: del usuario que accedió:

    Swift
        user.link(with: credential) { authResult, error in
      // ...
    }
    }
    
    Objective-C
        [[FIRAuth auth].currentUser linkWithCredential:credential
        completion:^(FIRAuthDataResult *result, NSError *_Nullable error) {
      // ...
    }];
    

Si la llamada a linkWithCredential:completion: se realiza correctamente, la cuenta nueva del usuario puede acceder a los datos de Firebase de la cuenta anónima.

Realiza una limpieza automática

Cuando habilitas la limpieza automática en Firebase console, se borran automáticamente las cuentas anónimas de más de 30 días. Si habilitas este parámetro de configuración, evitarás que tu base de datos de usuarios se llene de cuentas sin usar. En los proyectos que tienen la limpieza automática habilitada, la autenticación anónima no se registrará para los límites de uso ni las cuotas de facturación.

  • Las cuentas anónimas creadas después de que se habilite la limpieza automática se borrarán 30 días después de su creación.
  • Las cuentas anónimas creadas antes de que se habilite la limpieza automática se borrarán alrededor de 30 días después de la habilitación de esta opción.
  • Si desactivas la limpieza automática, las cuentas anónimas programadas para borrarse permanecerán en ese estado.
  • Si “actualizas” una cuenta anónima vinculándola a cualquier método de acceso, esta no se borrará automáticamente.

Si quieres saber a cuántos usuarios afectará el cambio antes de habilitar esta función y ya actualizaste tu proyecto a Firebase Authentication con Identity Platform, puedes filtrar por is_anon en Cloud Logging.

Próximos pasos

Ahora que los usuarios pueden autenticar con Firebase, puedes controlar su acceso a la información de tu base de datos con las reglas de Firebase.