androidでgoogle play serviceのリーダーボード(ランキング)を利用しようとしているのですが、
スコア送信時にエラーで落ちてしまいます。
ログインはできているようです。(よくあるダイアログが表示されます。)
エラー内容
E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IllegalArgumentException: GoogleApiClient parameter is required. at com.google.android.gms.common.internal.zzab.zzb(Unknown Source) at com.google.android.gms.games.Games.zzb(Unknown Source) at com.google.android.gms.games.internal.api.LeaderboardsImpl.submitScore(Unknown Source) at com.google.android.gms.games.internal.api.LeaderboardsImpl.submitScore(Unknown Source)
スコア送信部分
// スコア送信 Games.Leaderboards.submitScore(mGoogleApiClient,"リーダーボードID",5);
dependencies { compile 'com.google.android.gms:play-services-games:9.4.0'
xml:AndroidManifest.xml
1<application 2 android:name=".MyApplication" 3 android:allowBackup="true" 4 android:icon="@mipmap/ic_launcher" 5 android:label="@string/app_name" 6 android:supportsRtl="true" 7 android:theme="@style/AppTheme" > 8 9 <!--google play services--> 10 <meta-data android:name="com.google.android.gms.games.APP_ID" 11 android:value="@string/app_id" /> 12 <meta-data android:name="com.google.android.gms.version" 13 android:value="@integer/google_play_services_version" /> 14
追記
※@yonaさんご指摘ありがとうございます!
初期化部分
http://qiita.com/yamacraft/items/90bfb804538abd404b3e#_reference-ffffee604ed2ee9514f6
を参考にテスト中です。
java:MainActivity.java
1 2 3public class MainActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 4 5 private GoogleApiClient mGoogleApiClient; 6 private boolean mIntentInProgress; 7 8 9 @Override 10 protected void onStart() { 11 super.onStart(); 12 13 mGoogleApiClient.connect(); 14 15 } 16 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 22 23 // 初期設定 24 // 各種リスナー登録とGoogleAPIで利用するAPIやスコープの設定 25 mGoogleApiClient = new GoogleApiClient.Builder(this) 26 .addConnectionCallbacks(this) 27 .addOnConnectionFailedListener(this) 28 .addApi(Games.API).addScope(Games.SCOPE_GAMES) 29 .build(); 30 31 } 32 33 34 @Override 35 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 36 super.onActivityResult(requestCode, resultCode, data); 37 38 Log.d("apis","apis111" + requestCode + "____" + resultCode + "___" + RESULT_OK); 39 40 if (requestCode == 100) { 41 mIntentInProgress = false; 42 if (resultCode != RESULT_OK) { 43 44 Log.d("apis","apistesttest" + resultCode); 45 // スコア送信 46 Games.Leaderboards.submitScore(mGoogleApiClient,"リーダーボードID",5); 47 return; 48 } 49 50 51 if (!mGoogleApiClient.isConnected()) { 52 53 mGoogleApiClient.reconnect(); 54 }else{ 55 56 57 } 58 } 59 } 60 61 62 @Override 63 public void onConnectionSuspended(int i) { 64 mGoogleApiClient.connect(); 65 } 66 67 @Override 68 public void onConnectionFailed(ConnectionResult connectionResult) { 69 int errorCode = connectionResult.getErrorCode(); 70 71 // サインインしていない場合、サインイン処理を実行する 72 if (errorCode == ConnectionResult.SIGN_IN_REQUIRED 73 && !mIntentInProgress && connectionResult.hasResolution()) { 74 75 Log.d("apis","apis22"); 76 77 try { 78 mIntentInProgress = true; 79 connectionResult.startResolutionForResult(this, 100); 80 } catch (IntentSender.SendIntentException e) { 81 mIntentInProgress = false; 82 mGoogleApiClient.connect(); 83 } 84 } 85 } 86 87
追記
※ご指摘の点検証ログの追記します。
ご指摘の点確認させて頂きました。
・また、アプリ実行時にonConnectionFailedの処理が流れていないかを確認してください。
アプリ起動時に処理が流れております。。
@Override public void onConnectionFailed(ConnectionResult connectionResult) { int errorCode = connectionResult.getErrorCode(); Log.d("apis","errorCode" + errorCode); // サインインしていない場合、サインイン処理を実行する if (errorCode == ConnectionResult.SIGN_IN_REQUIRED && !mIntentInProgress && connectionResult.hasResolution()) { Log.d("apis","a"); try { mIntentInProgress = true; connectionResult.startResolutionForResult(this, 100); } catch (IntentSender.SendIntentException e) { mIntentInProgress = false; mGoogleApiClient.connect(); } } }
デバッグログ
D/apis: errorCode4
D/apis: a
・mGoogleApiClientがnullじゃないか
→ nullじゃないようです。com.google.android.gms.internal.zzpy@42bb5208
・mGoogleApiClient.isConnectedがtrueを返すか。
→ falseを返してしまいました。。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d("apis","apis" + requestCode + "____" + resultCode + "__EEEE___" + RESULT_OK + "___ mGoogleApiClient.isConnected()" + mGoogleApiClient.isConnected()); if (requestCode == 100) { mIntentInProgress = false; if (resultCode != RESULT_OK) { // エラーの場合、resultCodeにGamesActivityResultCodes内の値が入っている Log.d("apis","apis" + resultCode + "mGoogleApiClient:" + mGoogleApiClient); // スコア送信 Games.Leaderboards.submitScore(mGoogleApiClient,"リーダーボードID",7); return; }else{ // スコア送信 Games.Leaderboards.submitScore(mGoogleApiClient,"リーダーボードID",5); }
デバッグログ
D/apis: apis100____10004__EEEE___-1___ mGoogleApiClient.isConnected()false
D/apis: apis10004mGoogleApiClient:com.google.android.gms.internal.zzpy@42bb5208
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/29 05:22
2016/09/29 05:25
2016/09/29 05:36
2016/09/29 06:02
2016/09/29 06:27
2016/09/29 07:02