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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

232閲覧

Android Studio)Game Center APIがエラーになる

navesanta

総合スコア198

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2018/04/21 09:47

Android Studioを使ってアプリを作っています。クイズ形式のアプリでGoogle Play ゲーム サービスAPI のリーダーボードと実績を使って
ユーザー対象のスコア管理ができるような設定にしたいのですが実機でテストをするとエラーになります。
行ったこととしては
・Googleアカウントからコンソールに入って
Google Play ゲームの登録およびIDは取得してStringで登録してあります。
・Gradleの登録も行っています。
エラーログを見るとSIGN_IN_MODE_OPTIONALが既に使われていると出ていますが1回しか
使っていないと思うのですが・・・。
ネットで検索すると同じような質問している方が英語でみえますが回答はSIGN_IN_MODE_OPTIONALが
複数回使われているからだよと書いてあるだけで問題解決になっていません。
分かる方もしくはヒントになりそうなことありましたら教えて下さい。既に5日ほど調べています。

環境 os mac
開発環境 Android studio 3.0.1

private GoogleApiClient mGoogleApiClient; private boolean mIntentInProgress; private static final int REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quize); //GoogleApiClient初期設定 mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Games.API) .addScope(Games.SCOPE_GAMES) .build(); @Override protected void onStart(){ super.onStart(); //画面が表示される度に接続する mGoogleApiClient.connect(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE){ mIntentInProgress = false; if (resultCode != RESULT_OK){ return; } if (!mGoogleApiClient.isConnected()){ mGoogleApiClient.reconnect(); } } } //nextボタンを押した時の挙動 public void goNext(View v){ if (quizeNum < quizeList.size()-1){ // if (quizeNum < 5-1){ if (resultNum){ quizeList = new ArrayList<>(); quizeNum++; hazureList = new ArrayList<>(); quizeGet(); judgDisplay(2); numberDisplay(); buttonEnabled(true,true,true,false); buttonDisplay(); descriDisplay(); v.invalidate(); }else { resultDisplay(); if (mGoogleApiClient.isConnected()){ Games.Leaderboards.submitScore(mGoogleApiClient, String.valueOf(R.string.leaderboard_id), quizeNum); switch (quizeNum){ case 50: Games.Achievements.unlock(mGoogleApiClient, String.valueOf(R.string.achievements_id50)); break; case 1800: Games.Achievements.unlock(mGoogleApiClient, String.valueOf(R.string.achievements_id1800)); break; } }else { ★ここがエラーです(287) mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); } startActivityForResult(Games.Achievements.getAchievementsIntent(mGoogleApiClient),REQUEST_CODE); startActivityForResult( Games.Leaderboards.getLeaderboardIntent(mGoogleApiClient, getString(R.string.leaderboard_id)), REQUEST_CODE); } }else { //ここに最期のメッセージを入れる lastDialog(); SlideManager.saveInt(getApplicationContext(),"highscore", quizeNum + 1); } } @Override public void onConnected(@Nullable Bundle bundle) { //Player情報取得 Player player = Games.Players.getCurrentPlayer(mGoogleApiClient); String displayName = "???"; if (player != null){ displayName = player.getDisplayName(); } Toast.makeText(getApplicationContext(),String.format("%s でログインしています", displayName), Toast.LENGTH_SHORT).show(); } @Override public void onConnectionSuspended(int i) { mGoogleApiClient.connect(); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { int errorCode = connectionResult.getErrorCode(); if (errorCode == ConnectionResult.SIGN_IN_REQUIRED && !mIntentInProgress && connectionResult.hasResolution()){ try { mIntentInProgress = true; connectionResult.startResolutionForResult(this, 100); }catch (IntentSender.SendIntentException e){ mIntentInProgress = false; mGoogleApiClient.connect(); } } } }

エラーログは下記の通りです。

java.lang.IllegalStateException: Cannot use sign-in mode: SIGN_IN_MODE_OPTIONAL. Mode was already set to SIGN_IN_MODE_REQUIRED at com.google.android.gms.internal.zzaal.zzcx(Unknown Source) at com.google.android.gms.internal.zzaal.connect(Unknown Source) at com.mobreve.nanpasowordapp.QuizeActivity.goNext(QuizeActivity.java:287) at com.mobreve.nanpasowordapp.QuizeActivity.onClick(QuizeActivity.java:463) at android.view.View.performClick(View.java:4781) at android.view.View$PerformClick.run(View.java:19874) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5290) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーの内容は、すでにSIGN_IN_MODE_REQUIREDが使われているのに、SIGN_IN_MODE_OPTIONALで接続しようとしているということのようです。

一見、質問者さんのコードではSIGN_IN_MODE_REQUIREDは使われていないようですが、以下のドキュメントによると、 mGoogleApiClient.connect() を呼ぶのがSIGN_IN_MODE_REQUIREDを使用するのと同義であると書かれています。

https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.html#SIGN_IN_MODE_REQUIRED

というわけで、

  • mGoogleApiClient.connect(SIGN_IN_MODE_OPTIONAL)
  • mGoogleApiClient.connect()

の両方を混ぜて使ってしまっているのが原因かと思います。
どちらかに統一してみてください。

投稿2018/04/23 12:58

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

navesanta

2018/04/24 00:27

ありがとうございます。問題解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問