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中的遊戲服務中
第一次新增的話,我們選我尚未在自己的遊戲中使用任何GOOGLE API。有用過,就選右邊"我已經在自己的遊戲中使用GOOGLE API。紅框中資料填好,完成如下
目前因為沒有連結應用程式,所以平台的兩個圖示還是淺灰色。
在左邊欄選已連結的應用程式
選ANDROID
嗯,填一填,套件要跟剛剛在google api console填的一樣。
建排行榜
嗯一樣,填一填,不用怕,建錯了可以再建就是。
完成,點擊 取得資源
得到
把這個貼到APP的RES/VALUES中,建一個ids.xml
到這裡告一段落。前面這些動作都是為了憑證設置。接下來我們要在APP中使用如下。
正常的登入,如果有多個帳號會出現畫圖給使用者選擇。使用者會被尋問是否想登入。
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歲以下的小孩不可以用沉默登入。
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.
}
});
}
.submitScore(getString(R.string.leaderboard_id), 100);//100分
呼叫排行榜出來看
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,他是一連串的數字。如果你的不是數字,那就錯了。
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\ 資料匣下,取代原本的。
留言
張貼留言