针对 Android 游戏的登录

为了访问 Google Play 游戏服务功能,您的游戏需要提供已登录玩家的帐号。本文档介绍了如何在您的游戏中实现无缝登录体验。

Play 游戏服务 v2 SDK 带来了多项改进,可增加登录到您游戏的用户数量,并简化开发

  • 对用户的改进
    • 选择默认帐号后,用户无需与提示互动即可登录。
    • 用户不再需要下载 Play 游戏应用即可通过 Play 游戏服务登录或创建新帐号。
    • 用户现在可以在单个页面上管理多个游戏的 Play 游戏服务帐号。
  • 对开发者的改进
    • 客户端代码不再需要处理登录或退出流程,因为游戏启动时会自动触发登录,并且帐号管理在操作系统设置中处理。

新的客户端集成

本部分介绍了如何使用 Play 游戏服务登录 v2 进行新的客户端集成。

添加依赖项

将 Play 游戏服务 SDK 依赖项添加到应用的根级别 build.gradle 文件。如果您使用 Gradle,可以按如下方式添加或更新依赖项:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

定义项目 ID

要将 Play 游戏服务 SDK 项目 ID 添加到您的应用,请完成以下步骤:

  1. 在应用的 AndroidManifest.xml 文件中,将以下 <meta-data> 元素和属性添加到 <application> 元素:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    使用游戏的“游戏服务项目 ID”作为值来定义字符串资源引用 @string/game_services_project_id。您的游戏服务项目 ID 可以在 Google Play 管理中心的“配置”页面上您游戏名称下方找到。

  2. 在您的 res/values/strings.xml 文件中,添加一个字符串资源引用,并将您的项目 ID 设置为值。在 Google Play 管理中心,您可以在“配置”页面中,在您的游戏名称下方找到您的项目 ID。例如:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game’s project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

初始化 SDK

Application 类的 onCreate(..) 回调中初始化 Play 游戏 SDK。

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

获取登录结果

您的游戏启动时,它将始终尝试登录用户。要验证用户身份,您必须验证用户是否成功登录,然后获取其玩家 ID。

要验证登录尝试,请调用 GamesSignInClient.isAuthenticated() 并使用 addOnCompleteListener 来检索结果。例如:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Disable your integration with Play Games Services or show a
    // login button to ask  players to sign-in. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

如果用户在游戏启动时选择不登录,您可以选择继续显示一个带有 Play 游戏图标的按钮,并在用户按下该按钮时,通过调用 GamesSignInClient.signIn() 再次尝试登录用户。

验证用户已登录后,您可以检索玩家 ID 以识别用户。例如:

PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
    // Get PlayerID with mTask.getResult().getPlayerId()
  }
);