É possível usar os serviços relacionados a jogos do Google Play para fazer login em um jogo Android criado no Firebase e escrito em Unity. Para usar o login desses serviços com o Firebase, primeiro faça login do jogador no Google Play Games e solicite um código de autenticação do OAuth 2.0. Em seguida, envie esse código para PlayGamesAuthProvider
a fim de gerar uma credencial do Firebase, que poderá ser usada para acessar a plataforma.
Antes de começar
Configurar seu projeto do Unity
Adicione o arquivo de configuração do Firebase e o SDK do Firebase Unity para Unity ao projeto do Unity, conforme descrito em Adicionar o Firebase ao seu projeto do Unity. Siga as instruções para Android.
Lembre-se de importar
FirebaseAuth.unitypackage
.No editor do Unity, defina o nome do pacote do Android para seu jogo em Build Settings > Player Settings > Other Settings.
Em seguida, acesse Build Settings > Player Settings > Publishing Settings para selecionar ou criar uma chave e um repositório de chaves que serão usados para fazer login no seu pacote do Android. Para que seu APK funcione, ele precisa estar assinado com o login do Play Games. Esse requisito se aplica não apenas à publicação, mas também ao período de desenvolvimento do seu jogo.
Configurar seu projeto do Firebase
No console do Firebase, acesse o projeto do Firebase em que você registrou seu projeto do Unity.
Configure a impressão digital SHA-1 do seu jogo na página Configurações do console do Firebase usando a chave definida no Unity.
Crie a impressão digital SHA-1 da sua chave com o comando
keytool
:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
Como alternativa, você pode receber o hash SHA do certificado de assinatura com o comando gradle
signingReport
:gradlew signingReport
Seu APK precisa estar assinado com essa chave, inclusive durante o desenvolvimento.
Ative Google Play Games como um provedor de login:
No console do Firebase, abra a seção Authentication.
Gere e receba a chave secreta e o ID do ciente do servidor da Web do seu projeto:
Na guia Método de login, ative o provedor de login do Google.
Copie o ID do cliente do servidor da Web e o secret do provedor de login do Google.
Na guia Método de login, ative o provedor de login Play Games e especifique o ID e a chave secreta do cliente do servidor da Web do seu projeto, que foi recebido na última etapa.
Configurar o Play Games services com as informações do app Firebase
No Console do Google Play, abra o app Google Play ou crie um.
Na seção Expandir, clique em Play Games services> Configuração e Gerenciamento > Configuração.
Clique em Sim, meu jogo já usa APIs do Google, selecione seu projeto do Firebase na lista e clique em Usar.
Na página de configuração do Play Games services, clique em Adicionar credencial.
- Selecione o tipo de Servidor de jogos.
- No campo Cliente OAuth, selecione o ID do cliente da Web do seu projeto. Verifique se esse é o mesmo ID do cliente especificado quando você ativou o login do Play Games.
- Salve as alterações.
Ainda na página de configuração do Play Games services, clique em Adicionar credencial novamente.
- Selecione o tipo Android.
- No campo Cliente OAuth, selecione o ID do cliente Android do seu projeto. Caso você não veja o ID do cliente do Android, configure a impressão digital SHA-1 do jogo no Console do Firebase.
- Salve as alterações.
Nas páginas Eventos, Conquistas e Placares, crie todos os recursos do Play Games que você quer usar no seu jogo. Caso não queira criar um recurso, crie uma entrada de marcador de posição. Em seguida, em qualquer uma das páginas Eventos, Conquistas ou Placares, clique em Acessar recursos e copie o snippet de recursos do Android para algum lugar de fácil acesso. Você vai precisar do snippet para configurar o plug-in Google Play Games services.
O snippet de recursos terá a seguinte aparência:
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <!-- app_id --> <string name="app_id" translatable="false">123456789000</string> <!-- package_name --> <string name="package_name" translatable="false">com.example.game</string> <!-- event Wiped Raid --> <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string> </resources>
Na página Testadores, adicione os endereços de e-mail de qualquer usuário que precise fazer login no seu jogo antes de liberá-lo na Play Store.
Integrar o login do Play Games ao seu jogo
Faça o download da versão mais recente do Plug-in do Play Games para Unity e extraia o arquivo.
Importe o pacote do Unity do plug-in para seu projeto do Unity. O pacote do Unity pode ser encontrado no diretório
current-build
do arquivo de lançamento.Configure o plug-in do Play Games:
- Clique em Janela > Google Play Games > Configuração > Configuração do Android para abrir a tela de configuração do Android.
- Cole o snippet de recursos do Android que você copiou do Play Console no campo Definição de recursos.
- Cole o ID do cliente do seu servidor da Web que você forneceu ao ativar o login do Play Games no console do Firebase no campo ID do cliente.
- Clique em Configurar.
No seu jogo, defina um cliente do Play Games com a configuração
RequestServerAuthCode
ativada:using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading.Tasks; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .RequestServerAuthCode(false /* Don't force refresh */) .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate();
Em seguida, quando um jogador optar por fazer login com o Play Games, chame
Social.localUser.Authenticate()
:Social.localUser.Authenticate((bool success) => { // handle success or failure });
Autenticar no Firebase
Depois de adicionar o login do Play Games ao seu jogo, você poderá usar o código de autenticação dos serviços do Play Games no Firebase.
Depois que o usuário fizer login usando o Play Games, acesse o gerenciador de continuação do login e receba um código de autenticação para a conta do jogador:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
Em seguida, troque o código de autenticação dos serviços do Play Games por uma credencial do Firebase que será usada para autenticar o usuário:
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Próximas etapas
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada ao ID do Play Games. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em cada app no seu projeto.
No seu jogo, é possível receber o UID do Firebase referente ao usuário usando o objeto Firebase.Auth.FirebaseUser
:
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
string playerName = user.DisplayName;
// 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, é possível usar a variável auth
para acessar o código exclusivo do usuário que fez login. Use essa informação para controlar quais dados os usuários podem acessar.
Para ter acesso às informações do jogador do Play Games de um usuário ou para acessar os serviços relacionados a jogos do Google Play, use as APIs fornecidas pelo plug-in do Play Games.
Para desconectar um usuário, chame SignOut()
:
auth.SignOut();