如何将 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 account
到 create/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 导入 AdWords?