如要存取 Google Play Games 服務功能,遊戲必須提供已驗證玩家的帳戶。本文件說明如何在遊戲中實作順暢的驗證體驗。
Play Games 服務第 2 版 SDK 提供多項改善功能,可增加通過遊戲驗證的使用者人數,也能簡化開發作業:
- 使用者改善功能:
- 選取預設帳戶後,使用者不需要有登入提示也可以通過驗證。
- 使用者不再需要下載 Play 遊戲應用程式,即可透過 Play 遊戲服務驗證身分或建立新帳戶。
- 使用者現在可以在單一頁面中管理多個遊戲的 Play 遊戲服務帳戶。
- 開發人員改善功能:
- 用戶端程式碼不再需要處理驗證或登出流程,因為系統會在遊戲開始時自動觸發登入程序,並在 OS 設定中處理帳戶管理。
新用戶端整合
本節說明如何使用 Play Games 服務登入第 2 版執行新用戶端整合。
新增依附元件
在應用程式的根目錄層級 build.gradle 檔案中加入 Play 遊戲服務 SDK 依附元件。如果使用的是 Gradle,則可以新增或更新依附元件,如下所示:
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
定義專案 ID
如要在應用程式中加入 Play 遊戲服務 SDK 專案 ID,請完成下列步驟:
在應用程式的
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 管理中心「設定」頁面的遊戲名稱下方顯示。在
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 {
// Show a sign-in button to ask players to authenticate. Clicking it should
// call GamesSignInClient.signIn().
}
});
防止系統自動觸發建立設定檔
您可以透過資訊清單檔案停用自動觸發的設定檔建立提示。這樣一來,沒有 Play Games 服務設定檔的使用者就能繼續載入遊戲,不必建立 Play Games 服務設定檔。詳情請參閱「設定檔建立選項」。
如要使用這項功能,請確認符合下列條件:
- 裝置上登入的任何 Google 帳戶都沒有 Play Games 服務設定檔。
- 遊戲已整合 Play Games 服務 SDK
com.google.android.gms:play-services-games-v2:21.0.0以上版本。
如要避免系統自動觸發個人資料建立提示,請完成下列步驟:
在
AndroidManifest.xml檔案中,將com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION標記新增至<meta-data>元素,並將屬性新增至<application>元素:<application> ... <meta-data android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION" android:value="true" /> ... </application>將此旗標設為 true,即可通知 Play Games 服務,遊戲將處理設定檔建立程序。因此,如果裝置上的使用者沒有現有的 Play 遊戲服務個人資料,Play 遊戲服務就不會自動顯示個人資料建立使用者介面。
呼叫任何 Play Games 服務 API 時,
GamesClientStatusCodes.SIGN_IN_REQUIRED狀態碼會指出呼叫失敗,因為系統沒有 Play Games 服務設定檔,無法自動驗證使用者。這樣一來,沒有 Play Games 服務設定檔的使用者就能繼續使用您導入的驗證方式,不必立即建立 Play Games 服務設定檔。呼叫
GamesSignInService.signin()即可啟動設定檔建立作業。 手動啟動驗證程序。import com.google.android.gms.games.PlayGames; ... // Get the achievements client using Play Games services. AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity()); achievementsClient.getAchievementsIntent() .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { int statusCode = ((ApiException) exception).getStatusCode(); if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) { // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services. // Call GamesSignInService.signin() to prompt for // authentication at a suitable time which will trigger the // profile creation UI. // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status. } } });
新增禁止顯示標記後,請使用
logcat視窗驗證新增作業。logcat輸出內容會包含類似下列訊息的內容:「Game opted out of automatic profile creation prompt (using manifest)」。