重置我的安卓应用中的成就/排行榜

8

我能否通过使用与Google Play游戏服务配合的Android应用程序重置我的成就/排行榜结果?

2个回答

15

是的,这可以通过测试账户实现。这有点棘手,因此以下是一些示例代码。

将以下内容添加到您的清单中:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />

这里是应用程序中要执行的实际代码。添加在基于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);
    }
}

我正在尝试使用最新的API使其工作,但我在"getScopes()"方面遇到了困难。有人能告诉我在哪里找到它吗?或者它应该返回什么?谢谢。 - Will Calderwood
2
@Will Calderwood 这个方法仍然有效,但 Google 已经更改了他们的 GamesClient API。你可以使用“yourtesteremail@gmail.com”作为电子邮件和“oauth2:h ttps://www.googleapis.com/auth/games”作为范围(无空格)。 - Gak2

2

你可以通过另一种方式实现这个目标。进入开发者网站的游戏服务区域,访问排行榜,选择其中一个排行榜,然后更改排序选项“较大为更好”或“较小为更好”。保存更改后再改回原来的选项。

这将清除该排行榜当前的任何值,当然只能在测试期间进行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接