如何将 Firebase 帐户关联到 Google Play 游戏帐户

Posted

技术标签:

【中文标题】如何将 Firebase 帐户关联到 Google Play 游戏帐户【英文标题】:How to link Firebase account to Google Play Games account 【发布时间】:2017-08-25 14:57:12 【问题描述】:

我有一个使用 Play 游戏服务的 android 游戏。 Play 游戏服务似乎与特定的 Google 登录相关联。如果玩家开始游戏,它会自动登录到 Play 游戏。

现在我也希望将 Firebase 整合到我的游戏中,例如方便聊天。

如何将 Play 游戏 user accountcreate/login 用于 Firebase 帐户?

Play Games 是否有某种令牌给我,我可以直接传递给 Firebase?

我试图避免使用我自己的后端服务器,并避免让用户在我的游戏中登录两次,因为那是相当糟糕的用户体验。

我有哪些选择?我很困惑如何处理这个问题。

-- 已解决--

首先,我需要从 Firebase 身份验证选项卡启用 Google 登录。 然后我在我的基础活动中使用了这段代码:

private FirebaseAuth mAuth;

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestIdToken("<appidfromfirebase>.apps.googleusercontent.com")
        .build();


mGoogleApiClient = new GoogleApiClient.Builder(this)
    .enableAutoManage(this, this)
    .addConnectionCallbacks(this)
    .addApi(Games.API)
    .addScope(Games.SCOPE_GAMES)
    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
    .build();


@Override
    public void onConnected(Bundle connectionHint) 
        if (mGoogleApiClient.hasConnectedApi(Games.API)) 
            Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient).setResultCallback(
                    new ResultCallback<GoogleSignInResult>() 
                        @Override
                        public void onResult(GoogleSignInResult googleSignInResult) 
                            GoogleSignInAccount acct = googleSignInResult.getSignInAccount();
                            if (acct == null) 
                                Logger.e("account was null: " + googleSignInResult.getStatus().getStatusMessage());
                                return;
                            

                            AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(),null);

                            mAuth.signInWithCredential(credential)
                                    .addOnCompleteListener(
                                            new OnCompleteListener<AuthResult>() 
                                                @Override
                                                public void onComplete(@NonNull Task<AuthResult> task) 
                                                    // check task.isSuccessful()
                                                
                                            );
                        
                    
            );
        
    

【问题讨论】:

【参考方案1】:

您需要使用用户的 id 令牌将 Google 身份链接到 Firebase Authentication。

使用游戏配置构建 Google API 客户端,请求 ID 令牌。

GoogleSignInOptions options = new GoogleSignInOptions
            .Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
            .requestIdToken(firebaseClientId)
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Games.API)
            .addApi(Auth.GOOGLE_SIGN_IN_API, options)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

然后启动 SignIn Intent:

    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);

当结果返回时,获取 id 令牌并将其传递给 Firebase.Auth:

@Override
protected void onActivityResult(int requestCode, int responseCode,
                                Intent intent) 
    if (requestCode == RC_SIGN_IN) 
        GoogleSignInResult result =
                Auth.GoogleSignInApi.getSignInResultFromIntent(intent);
        if (result.isSuccess()) 
          AuthCredential credential = GoogleAuthProvider.getCredential(
                                          acct.getIdToken(), null);
          FirebaseAuth.getInstance().signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() 
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) 
                    Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());

                
            );
        
    

【讨论】:

这是.. 足够接近了。我更新了原始问题以显示我的最终代码【参考方案2】:

您在 Android 设备中登录的 Google 帐户通常是 linked with your GPGS profile。

现在回答您的问题,请按照Integrate With Your Play Games Services Project 指南了解如何将 Firebase 与 GPGS 结合使用。

当您将 Firebase 添加到 Play 中的 Play 游戏服务项目时 开发者控制台,您可以:

访问 Firebase Analytics,这是一个免费的应用衡量解决方案, 提供有关应用程序使用情况和用户参与度的见解。查看您的游戏 通过将 Play 游戏事件记录到 Firebase Analytics 中的事件 火力基地。

当您将 Firebase 添加到您的 Play 游戏服务项目时,您还 linking your Google Play Account to your Firebase project.

将 Firebase 添加到您的 Play 游戏服务项目

在 Play 开发者控制台中:

点击您应用的游戏详情页面上的添加 Firebase 查看 政策确认,然后点击立即确认 Firebase 已添加到您的 Play 游戏项目和您的 Google Play 帐户已链接到您的 火力基地项目。接下来,您需要将 Firebase SDK 添加到您的 应用代码。

将 Firebase SDK 添加到您的应用程序

要开始使用,请将 Firebase Analytics 添加到您的应用中。

将 Firebase Analytics SDK 添加到您的应用后,您可以 开始记录 Play 游戏事件。

【讨论】:

以上是关于如何将 Firebase 帐户关联到 Google Play 游戏帐户的主要内容,如果未能解决你的问题,请参考以下文章

如果在 Firebase Android 初始注册期间帐户已与 google 关联,则使用 Facebook 登录

Firebase我无法删除帐户[关闭]

将 Firebase 分析链接到 Google Play

为啥即使帐户已关联,我也无法将转化事件从 Firebase 导入 AdWords?

Firebase Google 身份验证,退出并再次登录将使用上次登录的帐户登录

如何通过用于下载应用程序的 Google Play 商店帐户获取 Firebase 用户?