2015-01-02 11 views
5

Quando sblocco un risultato, il popup "Achievement sbloccato" non sta spuntando ma il risultato è sbloccato come posso vedere nella lista dei risultati.Servizio giochi di Google Play - Abloccato Achievement Popup non mostrato

Ho già provato la soluzione this ma non funziona.

ho inizializzare la GoogleApiClient come questo nel mio MainActivity:

gac = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .build(); 
app.setGoogleApiClient(gac); 
gac.connect(); 

Nel mio "Game over Activity" faccio la seguente:

ApplicationClass app = (ApplicationClass) getApplication(); 
googleApiClient = app.getGoogleApiClient(); 

... e sbloccare i risultati come questo:

Games.Achievements.unlock(googleApiClient, "achievement id"); 

Grazie in anticipo!

risposta

3

L'API di giochi è progettata per una singola attività anche se è possibile utilizzarla in più. Hai avuto la possibilità di esaminare gli esempi forniti allo GithHub pages? Hanno alcune classi sotto BasicSamples/libraries/BaseGameUtils che potrebbero essere utili.

Si sta chiamando il metodo Builder sull'attività principale con this.

new GoogleApiClient.Builder(this) //this being your MainActivity 

Quindi si imposta il client Api sulla classe dell'applicazione. Ora, quando sei nel tuo nuovo GameOverActivity, il client API sta cercando di mostrare una vista su un'attività che non è più presente sullo schermo. Ha solo un riferimento al tuo MainActivity. Non si dovrebbe impostare una variabile nella classe Application per il client Api. Questa è anche una cattiva pratica perché si imposta il callback del listener all'attività e potrebbe non essere più presente quando viene richiamato uno dei callback.

Qualsiasi attività che si desidera interagire con l'API di giochi deve derivare da BaseGameActivity trovato in BaseGameUtils su GitHub. In ogni attività avrai un metodo chiamato getApiClient().