android 遊戲排行榜


為了使用排行榜,我們需要先登入sign in。為了登入,我們要做憑證。

先到google api console在左邊欄選 憑證。

點建立憑證
選android,下方就會出現要填入的資料
重點是第二個紅框,在TERMIAL 或是微軟的CMD中以指令方式
keytool -list -keystore <path-to-production-keystore>
<path-to-production-keystore>指的是app的keystore檔的位置。然後把出現的SHA1填入。
第二個紅框下方是套件名稱,就是你要使用排行榜的APP套件名稱。

建立之後就會出現新的用戶端ID。如第一張圖。其它在名稱中出現AUTO CREATE都不要動它,都是自己長出來的。

接下來到google play console中的遊戲服務中


注意平台那一欄,因為我們是ANDROID系統的服務,設定完成,小綠人要變灰色。我們點擊新增遊戲。
第一次新增的話,我們選我尚未在自己的遊戲中使用任何GOOGLE API。有用過,就選右邊"我已經在自己的遊戲中使用GOOGLE API。紅框中資料填好,完成如下
目前因為沒有連結應用程式,所以平台的兩個圖示還是淺灰色。
在左邊欄選已連結的應用程式

選ANDROID

嗯,填一填,套件要跟剛剛在google api console填的一樣。

建排行榜




嗯一樣,填一填,不用怕,建錯了可以再建就是。


完成,點擊 取得資源

得到
把這個貼到APP的RES/VALUES中,建一個ids.xml


到這裡告一段落。前面這些動作都是為了憑證設置。接下來我們要在APP中使用如下。

正常的登入,如果有多個帳號會出現畫圖給使用者選擇。使用者會被尋問是否想登入。


private void startSignInIntent() {
  GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
      GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
  Intent intent = signInClient.getSignInIntent();
  startActivityForResult(intent, RC_SIGN_IN);
}



登入成功回傳,從result.getSignInAccount()得到GoogleSignInAccount


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == RC_SIGN_IN) {
    GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
    if (result.isSuccess()) {
      // The signed in account is stored in the result.
      GoogleSignInAccount signedInAccount = result.getSignInAccount();
    } else {
      String message = result.getStatus().getStatusMessage();
      if (message == null || message.isEmpty()) {
        message = getString(R.string.signin_other_error);
      }
      new AlertDialog.Builder(this).setMessage(message)
          .setNeutralButton(android.R.string.ok, null).show();
    }
  }

}




沉默登入,這個登入不會出現詢問。不過google有政策,針對13歲以下的小孩不可以用沉默登入。
private void signInSilently() {
  GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
      GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
  signInClient.silentSignIn().addOnCompleteListener(this,
      new OnCompleteListener<GoogleSignInAccount>() {
        @Override
        public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
          if (task.isSuccessful()) {
            // The signed in account is stored in the task's result.
            GoogleSignInAccount signedInAccount = task.getResult();
          } else {
            // Player will need to sign-in explicitly using via UI
          }
        }
      });
}

@Override
protected void onResume() {
  super.onResume();
  signInSilently();
}


最後是sign out


private void signOut() {
  GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
      GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
  signInClient.signOut().addOnCompleteListener(this,
      new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
          // at this point, the user is signed out.
        }
      });

}


上傳成績到排行榜

Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .submitScore(getString(R.string.leaderboard_id), 100);//100分


呼叫排行榜出來看

private static final int RC_LEADERBOARD_UI = 9004;

private void showLeaderboard() {
  Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
      .getLeaderboardIntent(getString(R.string.leaderboard_id))
      .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent intent) {
          startActivityForResult(intent, RC_LEADERBOARD_UI);
        }
      });
}

最後 如果登入出現錯誤查一下以下這兩個地方


1.是否已在AndroidManifest.xml加入以下的meta-data,APP_ID就是我們前面在排行榜匯出的XML檔裡面的APP_ID,他是一連串的數字。如果你的不是數字,那就錯了。

<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"/>


2.檢查連結的應用程式中Oauth2用戶端ID是否與申請的相同



3.在FIREBASE中,SHA1的憑證是否與APP所使用的憑證相同。如果沒有相同,就手加入。然後再點右上角的google-service.json產生一個新的文檔,複制到 APP\ 資料匣下,取代原本的。

留言

這個網誌中的熱門文章

python 找圖自動點擊

Python pyserial 抓取系統內的 COM PORT

VBA EXCEL 工作表變化 馬上執行 的作法 Worksheet_Change