質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

androidで、google play servicesのリーダーボードでスコアを送信すると下記のようなエラーになって落ちる

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,837

score 55

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'
<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >

        <!--google play services-->
        <meta-data android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/app_id" />
        <meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

追記
※@yonaさんご指摘ありがとうございます!

 初期化部分

http://qiita.com/yamacraft/items/90bfb804538abd404b3e#_reference-ffffee604ed2ee9514f6
を参考にテスト中です。

public class MainActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    private GoogleApiClient mGoogleApiClient;
    private boolean mIntentInProgress;


    @Override
    protected void onStart() {
        super.onStart();

        mGoogleApiClient.connect();

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        // 初期設定
        // 各種リスナー登録とGoogleAPIで利用するAPIやスコープの設定
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(Games.API).addScope(Games.SCOPE_GAMES)
                .build();

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Log.d("apis","apis111" + requestCode + "____" + resultCode + "___" + RESULT_OK);

        if (requestCode == 100) {
            mIntentInProgress = false;
            if (resultCode != RESULT_OK) {

                Log.d("apis","apistesttest" + resultCode);
                // スコア送信
                Games.Leaderboards.submitScore(mGoogleApiClient,"リーダーボードID",5);
                return;
            }


            if (!mGoogleApiClient.isConnected()) {

                mGoogleApiClient.reconnect();
            }else{


            }
        }
    }


    @Override
    public void onConnectionSuspended(int i) {
        mGoogleApiClient.connect();
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        int errorCode = connectionResult.getErrorCode();

        // サインインしていない場合、サインイン処理を実行する
        if (errorCode == ConnectionResult.SIGN_IN_REQUIRED
                && !mIntentInProgress && connectionResult.hasResolution()) {

            Log.d("apis","apis22");

            try {
                mIntentInProgress = true;
                connectionResult.startResolutionForResult(this, 100);
            } catch (IntentSender.SendIntentException e) {
                mIntentInProgress = false;
                mGoogleApiClient.connect();
            }
        }
    }

追記
※ご指摘の点検証ログの追記します。

ご指摘の点確認させて頂きました。

・また、アプリ実行時に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__10004EEEE_-1_ mGoogleApiClient.isConnected()false
D/apis: apis10004mGoogleApiClient:com.google.android.gms.internal.zzpy@42bb5208

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

mGoogleApiClientのインスタンス作成ができていない可能性がありそうですね。
mGoogleApiClientをインスタンス化している箇所をみるとなにかわかるかもしれないです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/29 15:02

    エラーが発生している箇所の直前で下記の2点を確認してください。
    ・mGoogleApiClientがnullじゃないか
    ・mGoogleApiClient.isConnectedがtrueを返すか。

    また、アプリ実行時にonConnectionFailedの処理が流れていないかを確認してください。

    キャンセル

  • 2016/09/29 15:27

    早速ありがとうございます!
    確認させて頂きます!!!

    キャンセル

  • 2016/09/29 16:02

    確認させて頂いてところ、いくつか問題ありました。

    ・mGoogleApiClientがnullじゃないか
    → nullじゃないようです。com.google.android.gms.internal.zzpy@42bb5208

    ・mGoogleApiClient.isConnectedがtrueを返すか。
    → falseを返してしまいました。。

    ・また、アプリ実行時にonConnectionFailedの処理が流れていないかを確認してください。
    アプリ起動時に処理が流れております。。

    意図通りの結果がかえってきておりませんでした。。
    もう少し調べて検証してみます。。!

    検証したログも説明に記載させて頂きます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Androidに関する質問
  • androidで、google play servicesのリーダーボードでスコアを送信すると下記のようなエラーになって落ちる