Tôi có thể đặt lại kết quả thành tích/bảng thành tích của mình từ ứng dụng Android được sử dụng với Dịch vụ trò chơi của Google Play không?Đặt lại thành tích/bảng thành tích từ ứng dụng Android của tôi
8
A
Trả lời
15
Có, điều này có thể thực hiện được từ các tài khoản thử nghiệm. Đó là một chút khó khăn vì vậy ở đây một số mã ví dụ.
Thêm này trong biểu hiện của bạn:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
Và đây là mã thực tế được thực hiện trong ứng dụng. Đã thêm vào hoạt động dựa trên BaseGameActivity.
public void resetAchievements()
{
if(isSignedIn())
{
String accountName = getGamesClient().getCurrentAccountName();
String scopes = getScopes();
new ResetterTask(this, accountName, scopes).execute((Void) null);
}
}
private class ResetterTask extends AsyncTask<Void, Void, Void>
{
public String mAccountName;
public String mScope;
public Context mContext;
public ResetterTask(Context con, String name, String sc)
{
mContext = con;
mAccountName = name;
mScope = sc;
}
@Override
protected Void doInBackground(Void... params)
{
try
{
String accesstoken = GoogleAuthUtil.getToken(mContext, mAccountName, mScope);
HttpClient client = new DefaultHttpClient();
//Reset leader board:
/*String leaderboardid = "theleaderboardid";
HttpPost post = new HttpPost
(
"https://www.googleapis.com"+
"/games/v1management"+
"/leaderboards/"+
leaderboardid+
"/scores/reset?access_token="+accesstoken
);*/
//Reset a single achievement like this:
/*
String acheivementid = "acheivementid";
HttpPost post = new HttpPost
(
"https://www.googleapis.com"+
"/games/v1management"+
"/achievements/"+
acheivementid+
"/reset?access_token="+accesstoken
);*/
//This resets all achievements:
HttpPost post = new HttpPost
(
"https://www.googleapis.com"+
"/games/v1management"+
"/achievements"+
"/reset?access_token="+accesstoken
);
client.execute(post);
Log.w(LogTag, "Reset achievements done.");
}
catch(Exception e)
{
Log.e(LogTag, "Failed to reset: " + e.getMessage(), e);
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
//Launch activity to refresh data on client.
//NOTE: Incremental achievements will look like they are not reset.
//However, next time you and some steps it will start from 0 and
//gui will look ok.
startActivityForResult(getGamesClient().getAchievementsIntent(), 0);
}
}
1
Có một cách khác để bạn có thể đạt được điều này. Chuyển đến (các) bảng dẫn đầu của bạn trong khu vực dịch vụ trò chơi của trang web dành cho nhà phát triển. Sau đó chọn một trong các bảng thành tích của bạn. Thay đổi tùy chọn Đặt hàng 'Lớn hơn là tốt hơn' thành 'Nhỏ hơn là tốt hơn' hoặc ngược lại. Lưu sau đó đi thay đổi nó trở lại.
Thao tác này sẽ xóa mọi giá trị bạn hiện có cho bảng thành tích đó và tất nhiên chỉ có thể thực hiện được trong khi thử nghiệm.
Tôi đang cố gắng làm việc này với API mới nhất nhưng tôi đang đấu tranh với "getScopes()". Bất cứ ai có thể cho tôi biết nơi tôi tìm thấy điều này? Hoặc những gì nó nên trở về? Cảm ơn. –
@Will Calderwood Phương pháp này vẫn hoạt động, nhưng google đã thay đổi api GamesClient của họ. bạn có thể sử dụng "[email protected]" cho email và "oauth2: h ttps: //www.googleapis.com/auth/games" cho phạm vi (nospace) – Gak2