【问题标题】:How to link Firebase account to Google Play Games account如何将 Firebase 帐户关联到 Google Play 游戏帐户
【发布时间】: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()
                                                }
                                            });
                        }
                    }
            );
        }
    }

【问题讨论】:

    标签: android firebase firebase-authentication google-play-games


    【解决方案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 游戏事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-24
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多