Autenticar usando Yahoo e Unity

Você pode permitir que seus usuários se autentiquem com o Firebase usando provedores OAuth como o Yahoo, integrando o login OAuth genérico baseado na web em seu aplicativo usando o SDK do Firebase para realizar o fluxo de login de ponta a ponta. Como esse fluxo requer o uso de SDKs do Firebase baseados em telefone, ele só é compatível com plataformas Android e Apple.

Antes de você começar

Antes de usar o Firebase Authentication , você precisa:

  • Registre seu projeto Unity e configure-o para usar o Firebase.

    • Se o seu projeto do Unity já usa o Firebase, ele já está registrado e configurado para o Firebase.

    • Se você não tiver um projeto do Unity, poderá baixar um aplicativo de exemplo .

  • Adicione o SDK do Firebase Unity (especificamente FirebaseAuth.unitypackage ) ao seu projeto Unity.

Observe que adicionar o Firebase ao seu projeto do Unity envolve tarefas no console do Firebase e no seu projeto aberto do Unity (por exemplo, você baixa os arquivos de configuração do Firebase do console e os move para o seu projeto do Unity).

Acesse a classe Firebase.Auth.FirebaseAuth

A classe FirebaseAuth é o gateway para todas as chamadas de API. É acessível por meio de FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Lidar com o fluxo de login com o SDK do Firebase

Para lidar com o fluxo de login com o SDK do Firebase, siga estas etapas:

  1. Construa uma instância de FederatedOAuthProviderData configurada com o ID do provedor apropriado para o Yahoo.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
    
  2. Opcional : Especifique parâmetros OAuth customizados adicionais que você deseja enviar com a solicitação OAuth.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Prompt user to re-authenticate to Yahoo.
    providerData.CustomParameters.Add("prompt", "login");
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    

    Para obter os parâmetros suportados pelo Yahoo, consulte a documentação do Yahoo OAuth . Observe que você não pode passar parâmetros exigidos pelo Firebase com custom_parameters() . Esses parâmetros são client_id , redirect_uri , response_type , scope e state .

  3. Opcional : Especifique escopos adicionais do OAuth 2.0 além profile e email que você deseja solicitar do provedor de autenticação. Se o seu aplicativo exigir acesso a dados privados de usuários das APIs do Yahoo, você precisará solicitar permissões para as APIs do Yahoo em Permissões de API no console do desenvolvedor do Yahoo. Os escopos OAuth solicitados devem corresponder exatamente aos pré-configurados nas permissões da API do aplicativo. Por exemplo, se o acesso de leitura/gravação for solicitado aos contatos do usuário e pré-configurado nas permissões da API do aplicativo, sdct-w deverá ser passado em vez do escopo OAuth somente leitura sdct-r . Caso contrário, o fluxo falhará e um erro será mostrado ao usuário final.

    providerData.Scopes = new List<string>();
    
    // Request access to Yahoo Mail API.
    providerData.Scopes.Add("mail-r");
    // This must be preconfigured in the app's API permissions.
    providerData.Scopes.Add("sdct-w");
    

    Para saber mais, consulte a documentação de escopos do Yahoo .

  4. Depois que os dados do seu provedor forem configurados, use-os para criar um FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
        new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Autentique-se com o Firebase usando o objeto do provedor Auth. Observe que, diferentemente de outras operações do FirebaseAuth, isso assumirá o controle da sua IU, exibindo uma visualização da web na qual o usuário pode inserir suas credenciais.

    Para iniciar o fluxo de login, chame SignInAndRetrieveDataWithCredentialAsync :

<<../_includes/_sign_in_with_provider_unity.md>>>

  1. Embora os exemplos acima se concentrem em fluxos de entrada, você também tem a capacidade de vincular um provedor do Yahoo a um usuário existente usando LinkWithProviderAsync . Por exemplo, você pode vincular vários provedores ao mesmo usuário, permitindo que eles façam login com qualquer um deles.

    user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("LinkWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("LinkWithProviderAsync encountered an error: "
              + task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  2. O mesmo padrão pode ser usado com ReauthenticateWithProviderAsync , que pode ser usado para recuperar credenciais novas para operações confidenciais que exigem login recente.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

Próximos passos

Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais (ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação) com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.

  • Nos seus aplicativos, você pode obter informações básicas do perfil do usuário no objeto Firebase.Auth.FirebaseUser :

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • Nas regras de segurança do Firebase Realtime Database e do Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado na variável auth e usá-lo para controlar quais dados um usuário pode acessar.

Você pode permitir que os usuários façam login no seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.

Para desconectar um usuário, chame SignOut() :

auth.SignOut();