遷移至 Play 遊戲服務登入第 2 版

本指南說明如何從 Play 遊戲服務遷移用戶端程式碼 v1 到 v2。

新版 SDK 包含四項重大變更,可協助提高登入成功率:

  1. 系統會在遊戲啟動時自動登入。而不是 透過 GoogleSignIn SDK 的 GoogleSignInClient 執行登入,您可以使用 GamesSignInClient.isAuthenticated(),以便擷取自動結果 登入嘗試。
  2. 用戶端工廠類別不再需要 GoogleSignInAccount 物件 傳遞的指令無法要求額外的 OAuth 範圍 (將會是 GAMES_LITE 個) 自動要求)。
  3. 系統現在會使用 Play 遊戲服務中的「GamesSignInClient.requestServerSideAccess()」 將機器學習工作流程自動化
  4. 登出方法已經移除,且不再需要在遊戲中使用 這個按鈕可用來登入或登出 Play 遊戲服務。

此外,由於自動登入功能,您的遊戲會獲得額外的登入次數 使用者登入。因此,建議您檢查 配額管理,確保遊戲不會超過 登入要求配額

指定新的 SDK Maven 存放區

如果您使用的是 Gradle 建構系統,可以變更 com.google.android.gms:play-services-games-v2:+ 構件的依附元件 模組的 build.gradle 檔案。例如:

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

初始化 SDK

在應用程式的 onCreate(..) 回呼中初始化 Play 遊戲 SDK Application 類別。例如:

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

...

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

移除登入和登出呼叫

如未指定其他範圍,請直接遷移用途 第一個主要難題是無法以直接簡單的方式 評估負責任的 AI 技術做法成效

  1. 移除使用 GoogleSignIn API 的登入呼叫。登入後 執行遊戲請改為聆聽 嘗試使用 GamesSignInClient.isAuthenticated() 自動登入。

    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().
      }
    });
    
  2. 移除所有登出的呼叫,因為帳戶管理功能現已生效 用於在 OS 和 Play 遊戲應用程式設定中。

  3. 如果玩家成功登入,請移除 Play 遊戲登入按鈕 活動。如果使用者選擇不在遊戲啟動期間登入,則 可選擇繼續顯示有 Play 遊戲圖示的按鈕, 使用 GamesSignInClient.signIn() 觸發登入程序。

  4. 驗證使用者登入後,您可以擷取玩家 ID 以辨識使用者。

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. 如果不再使用,請移除 GoogleSignIn API 的依附元件。

更新用戶端類別名稱

建立用戶端時 (例如:LeaderboardsClientAchievementsClient),使用 PlayGames.getFooClient() 而不是 Games.getFooClient()

要求伺服器端存取權

要求伺服器端存取權時,請使用 GamesSignInClient.requestServerSideAccess(),而不是 GoogleSignInAccount.getServerAuthCode()

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

移除額外範圍

使用 Play 遊戲服務第 2 版時,無法要求取得其他範圍。如果發生以下情況: 仍需要要求額外範圍,建議您使用 Google 登入 SDK 提供 Play 遊戲服務

從 GoogleApiClient 遷移

若是較舊的既有整合項目,遊戲可能會依附於 Play 遊戲服務 SDK 的 GoogleApiClient API 變化版本。這是 將於 2017 年年底淘汰 並替換為「沒有網路連線」用戶端。如要遷移,您可以改用 GoogleApiClient 類別具有對等的「無網路連線」類別。然後 必須按照本頁指南說明,將遊戲從第 1 版遷移至第 2 版。 以下是常見類別的對應:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes