2013-07-15 2 views

risposta

15

Sì, questo è possibile dai conti di prova. È un po 'complicato, quindi ecco qualche codice di esempio.

Aggiungi questo nel vostro manifesto:

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

E qui è il codice vero e proprio da eseguire nell'applicazione. Aggiunto nell'attività basata su 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); 
    } 
} 
+0

Sto provando a farlo funzionare con l'ultima API ma sto lottando con "getScopes()". Qualcuno può dirmi dove lo trovo? O cosa dovrebbe tornare? Grazie. –

+2

@Will Calderwood Questo metodo funziona ancora, ma google ha cambiato la sua API GamesClient. puoi usare "[email protected]" per email e "oauth2: h ttps: //www.googleapis.com/auth/games" per scope (nospace) – Gak2

1

C'è un altro modo per ottenerlo. Vai alla tua classifica (s) nell'area dei servizi di gioco del sito sviluppatore. Quindi scegli una delle tue classifiche. Modificare l'opzione Ordine 'Più grande è meglio' a 'Più piccolo è meglio' o viceversa. Salva poi vai a cambiarlo.

Questo cancellerà tutti i valori che hai attualmente per quella classifica, e naturalmente è fattibile solo durante i test.