2

最近,我正要將Google Play服務的排行榜和成就應用於Android應用。由於某些未知原因,signin會隨機停止工作 - 直到應用的apk重新安裝。Google Play遊戲/服務登錄隨機停止使用resultCode GamesActivityResultCodes.RESULT_SIGN_IN_FAILED/10002

1)一般假設

開發者控制檯中正確設置了,在草稿模式下,註冊一個賬號測試儀。

全新安裝apk後,登錄遊戲會按預期工作。提交分數並解鎖成就作品。排行榜和成就活動得到正確顯示。

短:一切都按預期工作 - 一段時間。

2)問題說明

幾個斷開(其由Games.signOut(的)+ GoogleApiClient實例斷開())和重新連接後(GoogleApiClient實例連接()),在某些時候,這似乎在隨機onActivityResult()具有10002/GamesActivityResultCodes.RESULT_SIGN_IN_FAILED的resultCode。已經關閉應用程序,應用程序已重新啓動,分數和成就已提交併解鎖。我試圖在出現錯誤時重新構建,但基本上只是該行爲加上一個隨機元素。

之後,包括Games.signOut()在內的GoogleApiClient實例上的connect(),reconnect()或disconnect()不再有效。

重新啓動應用程序,查殺任務,清除緩存和數據,試圖以後登錄一天 - 沒有奏效了。只是重新安裝apk似乎重置它 - 一段短暫的時間直到錯誤再次發生。

我試圖調查logcat。可疑的部分似乎是在這裏:

D/SurfaceFlinger( 155): createSurface for (1 x 1), name=com.google.android.gms/com.google.android.gms.common.account.AccountPickerActivity 
I/ActivityManager( 394): Displayed com.google.android.gms/.common.account.AccountPickerActivity: +130ms 
D/SignInActivity(15720): Transition from 2 to 3 
D/SignInActivity(15720): Transition from 3 to 4 
D/SignInActivity(15720): Transition from 4 to 5 
E/GameAgent(10397): Unable to retrieve application [REMOVED APP ID] from network 
E/GameAgent(10397): Application ID [REMOVED APP ID] is not associated with package [REMOVED PACKAGE NAME]. Check the application ID in your manifest. 
E/CheckGameplayAcl(15720): Unable to load metadata for game 
D/SignInActivity(15720): Transition from 5 to 9 
W/SignInActivity(15720): onSignInFailed()... 
W/SignInActivity(15720): ==> Returning non-OK result: 10002 
I/System.out(16173): onActivityResult: requestCode = 1003, resultCode = 10002 gac: false/false 

的System.out的是助手的onActivityResult的調試消息()。 gac是GoogleApiClient實例,false/false代表isConnected()和isConnecting()。

爲了避免對錯誤的開發者控制檯設置不當的假設:全新安裝後,它適用於一些申請人數(約五,但它不是一個固定的數字)!

爲此,我顯示工作嘗試的logcat的部件之前:

D/SurfaceFlinger( 155): createSurface for (1 x 1), name=com.google.android.gms/com.google.android.gms.common.account.AccountPickerActivity 
I/ActivityManager( 394): Displayed com.google.android.gms/.common.account.AccountPickerActivity: +153ms 
D/SignInActivity(15720): Transition from 2 to 3 
D/SignInActivity(15720): Transition from 3 to 4 
D/SignInActivity(15720): Transition from 4 to 5 
E/GameAgent(10397): Unable to retrieve application [REMOVED APP ID] from network 
D/SignInActivity(15720): Transition from 5 to 6 
D/SignInActivity(15720): Transition from 6 to 7 
D/SignInActivity(15720): Transition from 7 to 8 
I/System.out(16173): onActivityResult: requestCode = 1003, resultCode = -1 gac: false/false 

總之:一些在SignInActivity似乎失敗圍繞過渡4或5時GameAgent隨機聲稱「應用程序ID [REMOVED APP ID]與軟件包[已刪除的軟件包名稱]無關。「

可悲的是,我無法找到它們的來源進行深入調查,所以我要問,如果任何人有一個想法如何解決這個問題。在目前的狀態下,如果用戶永遠被鎖定,這顯然不起作用。

我正在使用最新的Google Play服務庫。

3)代碼結構

通過文檔中讀取後,有使用BaseGameUtils,作爲中間體的溶液或純GoogleApiClient的GameHelper的方式。當然,GoogleApiClient就是這樣。

我做了一個助手類,程序結構像文檔建議。

它在Activity的onCreate中被實例化。轉發給它的是onStart,onStop,onSaveInstanceState和onActivityResult。

它的構造函數使用帶有Games.API和Games.SCOPE_GAMES的GoogleApiClient.Builder。

該幫助程序還實現了ConnectionCallbacks和OnConnectionFailedListener,而Builder則將它用於兩個偵聽器。

onConnectionFailed方法像文檔中推薦的那樣處理狀態變量「isErrorBeingHandled」,臨時保存在onSaveInstanceState()中。

如果hasResolution()上的ConnectionResult爲true,則其startResolutionForResult()將被調用,否則將調用GooglePlayServicesUtil.getErrorDialog()。

幫助器的onActivityResult(),如果requestCode是解析器或錯誤對話框中的任何一個,Activity.RESULT_OK將調用GoogleApiClient實例上的connect(),另一個結果將什麼也不做(也嘗試連接並斷開連接GoogleApiClient實例,包括Games.signOut())。

4)謝謝!

更新

我嘗試發佈谷歌Play服務的應用程序(排行榜,成就等)。就像奇蹟般地,錯誤10002消失並且可以再次登錄一次被阻止的帳戶。目前我會測試是否繼續工作。

僅給出以下幾點發生從我目前的理解錯誤:

  1. 未公佈或公佈一次,目前未公佈的谷歌遊戲服務
  2. 測試賬戶中註冊
  3. 新鮮的APK安裝
  4. 隨機擺弄連線,斷開/登出,提交得分,解鎖成就,顯示排行榜,顯示成績
  5. 工作一段時間
  6. 如果APK被新安裝或谷歌Play服務的一些隨機時間後堵,而不永遠resultCode爲10002
  7. 疏通只能再次登錄的機會得到發表

我的理論是,一些緩存的Google Play服務框架無法正常運行,只有重新安裝apk或在Google Play服務發佈時處於正確狀態,Google Play服務纔會重置。

+0

爲什麼你問一個問題而不是消失?閱讀這些答案,並且如果它能夠幫助其他程序員(如我)儘快找到真正的答案,請評論您的觀點並將其標記爲解決方案。這不是stackoverflow.com的作品。 – Recomer 2016-06-28 19:04:06

回答

1

就我而言,我的AndroidManifest中的versionCode與我在Google Play Developer Console中的APK的版本號不同。將我的新APK上傳到Google Play Developer Console後,10002問題似乎消失了。

1

這個錯誤通常是一個配置錯誤,就像Henry提到的時間戳問題。當發生這種情況的另一種情況是當您的AndroidManifest.xml沒有正確的應用程序ID(它需要在開發控制檯中的谷歌播放列表(而不是apk列表)中的10+數字編號)

Android的行看起來像

<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="12345678912" /> 

FWIW,我通常做的模板樣式,具有價值=「@字符串/ APP_ID」,並定義資源的字符串,但原始值應該工作了。

0

我知道現在這已經很老了,但是我發現了一個有用的帖子here,它將問題看作是可能存在的問題,因爲Google Developer Console項目是cr從使用舊版Google API控制檯中消失。

1

TL;博士

你要簽名與錯誤的帳戶的應用程序。

說來話長

在我來說,我有我的手機在3周不同的帳戶和我試圖從錯誤的帳戶登錄(隱含的)。怎麼可能是你可能會問的一個錯誤的帳戶?因此,基本上這款應用剛開始時處於「測試模式」,只有Developer Console中列出的特定帳戶才能訪問api。所以,我所做的就是轉到Google Play遊戲應用,並更改了可以登錄的帳戶的設置。

+0

順便說一句,你可以添加更多的帳戶到開發控制檯。 – 2017-06-07 13:59:18

相關問題