前提・実現したいこと
Android Studioでゲームを制作しています。
Google Play Gameを使って
ハイスコアの送信とリーダーボードの表示を行いたいです。
発生している問題・エラーメッセージ
ログインの流れ
①ログイン済みのアカウントがあるかどうか確かめる
②ない場合は、サイレントログインを試す
③失敗した場合は、Activityを開く
④onActivityResultで結果を受け取る
③の、GoogleSignInClient.getSignInIntent()
からログイン用のActivityを開き、
「接続しています...」というメッセージを出すところまではOKでしたが、
④のonActivityResultで結果をみると
CommonStatusCodes.SIGN_IN_REQUIREDが返され、
ログインできませんでした。
該当のソースコード
java
1public class MainActivity extends Activity implements View.OnTouchListener{ 2 3 final static int RC_GOOGLE_SIGNIN = 10000; 4 final static int RC_OPEN_LEADERBOARD = 10001; 5 6 private View loginButton; 7 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.main); 12 loginButton = findViewById(R.id.loginbutton); 13 loginButton.setOnTouchListener(this); 14 } 15 16 @Override 17 public boolean onTouch(View view, MotionEvent event) { 18 if(view == loginButton) { 19 openGoogleAccount(); 20 return true; 21 } 22 return false; 23 } 24 25 void openGoogleAccount() { 26 final GoogleSignInAccount googleAccount = GoogleSignIn.getLastSignedInAccount(this); 27 if(googleAccount != null && GoogleSignIn.hasPermissions(googleAccount)) { //① 28 openLeaderBoard(googleAccount); 29 }else { 30 final GoogleSignInClient signInClient = GoogleSignIn 31 .getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); 32 signInClient.silentSignIn() //② 33 .addOnCompleteListener( 34 this, 35 new OnCompleteListener<GoogleSignInAccount>() { 36 @Override 37 public void onComplete(@NonNull Task<GoogleSignInAccount> task) { 38 if (task.isSuccessful()) { 39 openLeaderBoard(task.getResult()); 40 } else { 41 startActivityForResult( 42 signInClient.getSignInIntent(), 43 RC_GOOGLE_SIGNIN); //③ 44 } 45 } 46 }); 47 } 48 } 49 50 void openLeaderBoard(GoogleSignInAccount googleAccount) { 51 LeaderboardsClient lbClient = Games.getLeaderboardsClient(this, googleAccount); 52 lbClient.submitScore(getString(R.string.leaderboard_id), 9999/*ハイスコアの送信*/); 53 lbClient.getLeaderboardIntent(getString(R.string.leaderboard_id)) 54 .addOnSuccessListener(new OnSuccessListener<Intent>() { 55 @Override 56 public void onSuccess(Intent intent) { 57 startActivityForResult(intent, RC_OPEN_LEADERBOARD); 58 } 59 }); 60 } 61 62 @Override 63 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 64 super.onActivityResult(requestCode, resultCode, data); 65 if(requestCode == RC_GOOGLE_SIGNIN) { //④ 66 GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 67 if(result.isSuccess()) { 68 openLeaderBoard(result.getSignInAccount()); 69 }else { 70 Log.d("MainActivity", "Error: " 71 +GoogleSignInStatusCodes.getStatusCodeString(result.getStatus().getStatusCode())); 72 //SIGN_IN_REQUIREDが返される 73 } 74 } 75 } 76 77}
試したこと
https://www.milk-island.net/translate/ggd/games/services/android/troubleshooting.html
このページに書いてあることを全て試しましたが問題はないようです。
・appId、パッケージ名、フィンガープリントはOK
・テストを公開済み
・テストアカウントに自分自身を追加している
・Google Playからインストールしたアプリで確認
補足情報(FW/ツールのバージョンなど)
SDKのバージョンは以下です。
minSdkVersion 17
targetSdkVersion 28
テスト環境は以下です。
Android5.1.1(実機)
どなたか解決法・調査方法をご存知でしたら、教えていただけませんでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。