Autenticar anonimamente com o Firebase em plataformas da Apple

Você pode usar Firebase Authentication para criar e usar contas anônimas temporárias e fazer a autenticação no Firebase. Com essas contas, os usuários que ainda não se registraram no seu app podem trabalhar com os dados protegidos pelas regras de segurança. Se um usuário anônimo se registrar no seu app, vincule as credenciais de login à conta anônima para que ele continue trabalhando com os dados protegidos nas sessões futuras.

Antes de começar

  1. Use o Swift Package Manager para instalar e gerenciar as dependências do Firebase.

    1. No Xcode, com seu projeto do app aberto, navegue até File > Add Packages.
    2. Quando solicitado, adicione o repositório do SDK do Firebase para as plataformas Apple:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Escolha a biblioteca Firebase Authentication.
    5. Adicione a sinalização -ObjC à seção Outras sinalizações do vinculador das configurações de compilação do destino.
    6. Quando terminar, o Xcode começará a resolver e fazer o download das dependências em segundo plano automaticamente.
  2. Caso você ainda não tenha vinculado o app ao projeto do Firebase, faça isso no console do Firebase.
  3. Ative a autenticação anônima:
    1. No console do Firebase, abra a seção Auth.
    2. Na página Métodos de login, ative o método de login Anônimo.
    3. Opcional: se o projeto teve upgrade para o Firebase Authentication with Identity Platform, você pode ativar a limpeza automática. Quando você faz isso, contas anônimas com mais de 30 dias são automaticamente excluídas. Em projetos com a limpeza automática ativada, a autenticação anônima não é mais contabilizada nos limites de uso ou nas cotas de faturamento. Consulte Limpeza automática.

Fazer a autenticação anônima no Firebase

Quando um usuário não conectado acessar um recurso do app que exige autenticação no Firebase, faça login dele anonimamente executando as seguintes etapas:

  1. Importe o módulo FirebaseCore no UIApplicationDelegate, assim como qualquer outro módulo do Firebase usado pelo delegado do app. Por exemplo, para usar Cloud Firestore, Authentication e:

    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. Configure uma instância compartilhada do FirebaseApp no método application(_:didFinishLaunchingWithOptions:) do delegado do 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. Se você estiver usando a SwiftUI, crie um delegado do aplicativo e o anexe ao struct App via UIApplicationDelegateAdaptor ou NSApplicationDelegateAdaptor. Também é necessário desativar o swizzling do delegado do app. Para mais informações, consulte as instruções da 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. Chame o método signInAnonymouslyWithCompletion::

    Swift

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

    Objective-C

    [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,
                                                      NSError * _Nullable error) {
       // ...
     }];
  5. Se o método signInAnonymouslyWithCompletion: for concluído com sucesso, você poderá coletar os dados da conta do usuário anônimo a partir do 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;

Converter uma conta anônima em permanente

Quando um usuário anônimo se inscreve no seu app, ele pode continuar trabalhando com a nova conta. Por exemplo, você pode deixar no carrinho de compras dessa conta os itens adicionados antes do registro. Para isso, execute as seguintes etapas:

  1. Quando o usuário se registrar, conclua o fluxo de login do provedor de autenticação até a chamada de um dos métodos, mas sem incluir essa etapa FIRAuth.signInWith. Por exemplo, use o token de ID do Google, o token de acesso do Facebook ou o e-mail e a senha.
  2. Consiga um FIRAuthCredential para o novo provedor de autenticação:

    Login do 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];
    Login do Facebook
    Swift
    let credential = FacebookAuthProvider
      .credential(withAccessToken: AccessToken.current!.tokenString)
    Objective-C
    FIRAuthCredential *credential = [FIRFacebookAuthProvider
        credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString];
    Login com e-mail/senha
    Swift
    let credential = EmailAuthProvider.credential(withEmail: email, password: password)
    Objective-C
    FIRAuthCredential *credential =
        [FIREmailAuthProvider credentialWithEmail:email
                                                 password:password];
  3. Transmita FIRAuthCredential para o método linkWithCredential:completion: do usuário que fez login:

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

Se a chamada a linkWithCredential:completion: for realizada corretamente, a nova conta do usuário terá acesso aos dados do Firebase da conta anônima.

Limpeza automática

Se você fez upgrade do seu projeto para o Firebase Authentication with Identity Platform, será possível ativar a limpeza automática no console do Firebase. Quando esse recurso é ativado, você permite que o Firebase exclua automaticamente contas anônimas com mais de 30 dias. Em projetos com a limpeza automática ativada, a autenticação anônima não é contabilizada nos limites de uso ou nas cotas de faturamento.

  • Todas as contas anônimas criadas após a ativação da limpeza automática podem ser excluídas automaticamente a qualquer momento 30 dias após a criação.
  • As contas anônimas estarão qualificadas para exclusão automática 30 dias depois da ativação da limpeza automática.
  • Se você desativar a limpeza automática, todas as contas anônimas programadas para exclusão vão continuar dessa forma.
  • Se você fizer "upgrade" de uma conta anônima com vinculação a qualquer método de login, ela não vai ser excluída automaticamente.

Se quiser conferir quantos usuários serão afetados antes de ativar esse recurso e tiver atualizado o projeto para o Firebase Authentication with Identity Platform, filtre por is_anon no Cloud Logging.

Próximas etapas

Agora que os usuários podem se autenticar com o Firebase, use as regras do Firebase para controlar os acessos ao banco de dados.