本頁提供的疑難排解說明可協助您解決運用 Google Play 遊戲服務開發 Android 遊戲時可能遇到的問題。
記錄
如要排解遊戲的問題,可以使用 adb shell
指令在裝置上啟用詳細記錄。使用 Logcat 即可檢視 Google Play 遊戲服務記錄訊息。
啟用記錄功能
如何啟用測試裝置的記錄功能:
將裝置連線至已安裝 Android SDK 的電腦。
開啟終端機並執行下列指令:
adb shell setprop log.tag.Games VERBOSE
在裝置上執行遊戲並重現您想偵錯的問題。
查看記錄:
adb logcat
停用記錄
如要在裝置上停用 Play 遊戲服務的詳細記錄,恢復原本的記錄行為,請執行以下指令:
adb shell setprop log.tag.Games INFO
無法登入
如果您無法讓玩家登入遊戲,首先請確實按照建立用戶端 ID 與設定遊戲服務的指示進行。如果登入錯誤的問題仍未解決,請檢查下列項目,確保您的遊戲設定正確。
檢查中繼資料標記
您的 AndroidManifest.xml
內必須含有遊戲的中繼資料標記。如要驗證中繼資料標記是否設定正確,請按照下列步驟操作:
開啟
AndroidManifest.xml
並確認其中含有meta-data
標記,如下所示:<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
找到
@string/app_id
資源的定義。這項定義通常位於res/xml
目錄的特定 XML 檔案中,例如res/xml/strings.xml
或res/xml/ids.xml
。確認
@string/app_id
資源的值與應用程式的數字 ID 相符。此資源的值只能包含數字。例如:<string name="app_id">123456789012</string>
檢查套件名稱
您遊戲的套件名稱必須與用戶端 ID 的套件名稱相符。確認套件名稱的方法如下:
開啟
AndroidManifest.xml
並確認遊戲套件名稱是否正確。套件名稱為manifest
標記中package
屬性的值。建立用戶端 ID 時請確認您提供的套件名稱。如要在 Google Play 管理中心中確認套件名稱,請前往 Play 管理中心並按一下與您遊戲相應的項目。
前往「Linked Apps」分頁,檢查用戶端 ID 清單。此清單中應有一個 Android 連結的應用程式,其套件名稱與
AndroidManifest.xml
中的套件名稱相符。如果套件名稱不符,請使用正確的套件名稱建立新用戶端 ID,然後再次嘗試登入。
檢查憑證指紋
用來簽署遊戲的憑證必須與用戶端 ID 相關聯的憑證指紋相符。如要進行驗證,請先檢查憑證的 SHA1 指紋,如下所示:
找到您的憑證檔案並取得其 SHA1 指紋。如需取得 SHA1 指紋,請執行以下指令:
keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
記下輸出內容中標示為
SHA1:
的十六進位數列。此數字即為憑證的指紋。
接著,檢查建構工具是否使用這個憑證:
- 透過建構工具產生遊戲的 APK,並使用要驗證的憑證簽署 APK。將已產生的 APK 複製至暫存目錄。
在臨時目錄內執行以下指令,以便解壓縮 APK。
unzip YourGame.apk
使用 RSA 憑證檔案產生私密金鑰:
keytool -printcert -file META-INF/CERT.RSA
您也可以使用 DSA 憑證檔案產生私密金鑰:
keytool -printcert -file META-INF/CERT.DSA
找到標示為
SHA1:
的行,並記下其中的十六進位數字序列。此數字序列應與您在上一個步驟中取得的憑證指紋相符。如果不相符,代表建構工具或系統未設定為使用憑證簽署應用程式。在這種情況下,請參閱建構環境的說明文件,瞭解如何正確設定建構環境,然後再次嘗試登入。
接著,檢查憑證指紋是否與您在用戶端 ID 中設定的指紋相符。步驟如下:
- 開啟 Play 管理中心,前往您的遊戲。
- 在「遊戲詳細資料」頁面中,往下捲動到底部,按一下指向已連結 Google Cloud Platform 專案的連結。
- 選取所需專案。
- 點選左側欄的「APIs & auth」。查看系統顯示的 API 清單,並確認 Google Play Games Services API 的狀態是「ON」。
- 點選左側欄的「Registered apps」。
- 展開 OAuth 2.0 用戶端 ID 區段,然後記下憑證指紋 (SHA1)。
如果這個指紋與您在前幾個步驟中取得的憑證指紋不相符,則必須使用正確的憑證指紋建立新用戶端 ID。您必須透過 Play 管理中心 (而非 Google Cloud Platform 專案) 建立新用戶端 ID。
檢查測試帳戶是否已啟用
發布遊戲之前,透過 Play 管理中心建立遊戲時使用的帳戶也必須啟用為測試人員。如要檢查設定是否正確,請按照以下步驟操作:
- 開啟 Play 管理中心,前往您的遊戲。
- 開啟「測試」分頁。
- 檢查您嘗試用來登入的帳戶是否在測試人員清單中。
如果您嘗試登入的帳戶不在清單中,請將其加入清單中,稍待幾分鐘後再次嘗試登入。
Proguard 問題
如果您使用 Proguard 而且模糊 APK 會顯示錯誤訊息,請檢查 AndroidManifest.xml
內的目標 API 級別,確實將其設為 17 以上。
其他造成設定問題的原因
檢查其他造成錯誤的常見原因:
- 如果您已經發布遊戲,請檢查是否也已經發布遊戲設定 (您可能會在發布應用程式時忘了發布遊戲設定)。方法很簡單,進入 Google Play 管理中心並前往您的應用程式,檢查遊戲名稱旁邊的方塊內容是否指出應用程式為已發布狀態。如果指出應用程式處於其他狀態,例如「已可發布」或「可供測試」,請按一下方塊並選取「發布遊戲」。
- 如果無法發布遊戲,請確認只有一個用戶端 ID 啟用了「這個應用程式適合新的使用者優先安裝」選項。
匿名事件監聽器
請勿使用匿名事件監聽器。匿名事件監聽器是定義為內嵌的事件監聽器介面實作項目,如以下所示。
ImageManager im = ...;
// Anonymous listener -- dangerous:
im.loadImage(new ImageManager.OnImageLoadedListener() {
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}
Play 遊戲 SDK 會將匿名事件監聽器認定為弱式參照,表示垃圾收集器可能會在您叫用之前就回收這些事件監聽器,因此並不可靠。您應該使用永久物件實作事件監聽器,如 Activity
。
public class MyActivity extends Activity
implements ImageManager.OnImageLoadedListener {
private void loadOurImages() {
ImageManager im = ...;
im.loadImage(this);
}
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}