Google Play Game Services Classifiche

I servizi di giochi di Google Play offrono l'opportunità di aggiungere funzionalità social ai tuoi giochi tramite gli account Google+ degli utenti. In questo tutorial, dimostreremo come è possibile aggiungere classifiche a un'app per Android, inviare punteggi utente e presentare le classifiche attuali all'interno del gioco.

L'utilizzo delle classifiche prevede la preparazione dell'IDE, la configurazione della classifica nella Console per gli sviluppatori di Google Play e l'aggiunta di funzionalità alla tua app.

Se hai completato il recente tutorial sull'aggiunta di obiettivi alle app Android, puoi saltare alcuni dei passaggi in questo. Il codice sorgente allegato include la stessa app che abbiamo utilizzato per il tutorial sui risultati, con l'aggiunta della funzionalità sia delle realizzazioni che delle classifiche.

1. Prepara il tuo IDE

Passo 1

Per utilizzare Google Play Services, hai bisogno di determinati programmi di utilità installati nel tuo ambiente di sviluppo. Inoltre, dal momento che utilizziamo i servizi di gioco, installeremo il BaseGameUtils libreria, che riduce la quantità di codice necessario per implementare funzionalità come l'accesso a Google+.

Per iniziare, crea una nuova app o usane una esistente. Se hai seguito il tutorial sui risultati, puoi utilizzare l'app che hai creato per quel tutorial. Se stai creando il tuo gioco, decidi per cosa vuoi utilizzare le classifiche e quando intendi inviare un punteggio utente. Ogni punteggio della classifica sarà un numero. Puoi configurare la classifica per considerare valori di numeri più bassi o più alti come migliori in termini di posizione nella classifica, ma naturalmente ciò dipenderà dallo scopo del tuo gioco.

Il codice nella cartella di download include un semplice gioco in cui l'utente indovina un numero. Useremo il numero di ipotesi necessarie per ottenere la risposta corretta come punteggio della classifica. In questo caso, meno ipotesi sono migliori, quindi la classifica presenterà per prima i punteggi più bassi. Per semplicità, limiteremo il numero di ipotesi che un utente può prendere. Questo è un esempio banale per dimostrare il concetto e la funzionalità della classifica. I tuoi giochi probabilmente coinvolgeranno più complessità.

Passo 2

Prepara Eclipse per lo sviluppo con i servizi di giochi di Google Play. Apri il Android SDK Manager e scorrere fino a extra cartella. Espandi la cartella e seleziona Google Play Services più il Google Repository. Installa il Piattaforma API di Google anche da una delle ultime versioni di Android se vuoi testare l'emulatore. Installa i pacchetti scelti.

Passaggio 3

Eclipse dovrà anche fare riferimento ad alcune risorse aggiuntive nello spazio di lavoro. Sul tuo computer, vai alla posizione di Google Play Services Library, che dovrebbe essere nella cartella Android SDK, a extra / google / google_play_services / libproject / google-play-services_lib /. Copia e incolla la libreria da qualche altra parte sul tuo computer.

Ora abbiamo bisogno di un riferimento a questa copia in Eclipse. Scegliere Importa> Android> Importa il codice Android esistente nello spazio di lavoro dal File menu. Seleziona la posizione della copia che hai creato. La libreria importata dovrebbe ora apparire come un nuovo progetto in Eclipse. Fai clic destro e scegli Proprietà. Nel androide sezione, scegli un obiettivo di generazione di API di Google e controlla il È la biblioteca casella di controllo.

Passaggio 4

Importare il BaseGameUtils la risorsa è leggermente diversa. La libreria è ospitata su GitHub. Puoi trovarlo nella sezione Download, in Giochi di esempio. Scarica la libreria e salvala sul tuo computer.

Come hai fatto per la libreria dei servizi di Google Play, scegli Importa> Android> Importa codice Android esistente in Area di lavoro dal File menu per portare la libreria BaseGameUtils in Eclipse. Fai clic con il pulsante destro del mouse per accedere alle nuove proprietà del progetto e assicurati che il progetto sia contrassegnato come una libreria controllando È la biblioteca.

Passaggio 5

Ora possiamo fare in modo che l'app faccia riferimento a queste due risorse all'interno dell'area di lavoro. Fai clic con il pulsante destro del mouse sulla tua app in Esplora pacchetti e scegli Proprietà. Vai a androide sezione e selezionare Inserisci nel Biblioteca sezione. Scegli entrambi i Google Play Services biblioteca e BaseGameUtils, e aggiungili alla tua app.

2. Prepara il tuo gioco nella Console per gli sviluppatori

Passo 1

Prima di poter creare una classifica, l'app deve essere elencata nel Console per gli sviluppatori di Google Play. Accedi e fai clic su Servizi di gioco pulsante a sinistra. Se l'hai già fatto per la tua app nel tutorial sugli obiettivi, non è necessario farlo di nuovo. Puoi saltare alla sezione 3 sulla creazione di una classifica.

Clic Configura i servizi di gioco di Google Play.

Fai clic per aggiungere un nuovo gioco, seleziona Non utilizzo ancora alcuna API di Google nel mio gioco, e scegli un nome e una categoria per il tuo gioco. Clic Continuaper andare al prossimo passo.

Aggiungi il titolo del tuo gioco. Puoi aggiungere altri dettagli in seguito.

Passo 2

Colleghiamo ora l'app in modo che possiamo fare riferimento a questa lista della Console per gli sviluppatori nell'app stessa. Clicca il App collegate entrata nell'elenco sulla sinistra e scegliere androide.

Inserisci le informazioni della tua app tra cui il nome del pacchetto, assicurandoti che sia uguale a quello che stai utilizzando nel tuo progetto.

Salva e clicca Autorizza ora la tua app. Per il momento, puoi semplicemente aggiungere il nome dell'app, ma puoi inserire più dettagli in seguito. Scegliere Applicazione installata nell'area Client ID, con androide come il tipo e inserire il nome del pacchetto. Ora è necessario utilizzare l'utilità keytool per generare un certificato di firma. È possibile utilizzare il seguente comando in un terminale o prompt dei comandi in combinazione con il certificato di debug:

keytool -exportcert -alias androiddebugkey -keystore ~ ​​/ .android / debug.keystore -list -v

Il terminale o il prompt dei comandi scriveranno l'impronta digitale per il certificato. Copia quello che vedi dopo SHA1 e incollarlo nella Developer Console in Impronta digitale di firma area di testo.

Selezionare Crea cliente e copia l'ID per l'applicazione, che è elencata accanto al nome dell'app nella Console per gli sviluppatori. Aggiungerai l'ID alla tua app insieme all'ID della classifica che stiamo per creare.

3. Crea una classifica

Passo 1

Sempre nella Console per gli sviluppatori, creiamo ora una nuova classifica. Seleziona il Classifiche sezione nel tuo elenco di app e fare clic Aggiungi classifica.

Assicurati di aver compreso il concetto di classifiche su Android e, in generale, sui servizi di giochi di Google Play. Puoi leggere una panoramica sul sito web dei servizi di giochi di Google Play. Puoi effettivamente fare molte cose diverse con le classifiche, quindi considera quello che facciamo in questo tutorial solo un punto di partenza.

Inserisci i dettagli per la tua nuova classifica. Per il nostro codice di esempio, usiamo il nome Meno ipotesi e selezionare Più piccolo è meglio nel ordinazione sezione.

Aggiungi un'icona se vuoi. Se non si utilizza un'immagine standard. Salva la nuova classifica e copia il suo ID.

Passo 2

Nel analisi sezione per la tua app nella Console per gli sviluppatori, puoi aggiungere account a cui sarà concesso l'accesso per testare il gioco. Per impostazione predefinita, visualizzerai il tuo indirizzo email del tuo account Google, pertanto dovresti essere in grado di utilizzarlo per testare la tua app.

4. Prepara il tuo gioco per accedere ai servizi di giochi

Passo 1

È ora di preparare l'app per l'accesso alla classifica in Eclipse. Se hai completato il tutorial sui risultati, puoi saltare parte di questa sezione. Aggiungiamo innanzitutto gli ID per l'app e la classifica. Apri o crea a res / valori / ids.xml file di risorse. Utilizza la seguente sintassi per inserire gli ID copiati per l'app e la nuova classifica quando li hai creati nella Console per gli sviluppatori:

1234567890 abcdefg1234567

Salva il file e apri il progetto Manifesto. Aggiungi il seguente all'interno del applicazione elemento:

 

L'app è ora configurata per collegarsi agli elenchi che abbiamo aggiunto nella Console per gli sviluppatori.

Passo 2

Quando utilizzi i servizi Google nelle tue app Android, hai bisogno che i tuoi utenti accedano ai loro account Google. È possibile adottare una serie di approcci per implementare questo, ma automatizzeremo alcune parti di questo processo usando il BaseGameActivity classe insieme con i pulsanti standard per l'accesso e l'uscita. Inoltre, all'avvio dell'attività, l'app tenterà di accedere immediatamente all'utente.

Apri il file di layout principale dell'app e aggiungi pulsanti per accedere / uscire:

   

Passaggio 3

Aggiungi queste importazioni al tuo principale Attività classe:

import com.google.android.gms.games.Games; import com.google.example.games.basegameutils.BaseGameActivity;

Fare il Attività classe estendere il BaseGameActivity classe e ascolta per i clic:

public class MainActivity estende BaseGameActivity implementa View.OnClickListener

Preparati a rispondere ai clic sui pulsanti di accesso / uscita in onCreate:

findViewById (R.id.sign_in_button) .setOnClickListener (questo); findViewById (R.id.sign_out_button) .setOnClickListener (questo); 

Ora aggiungi i seguenti metodi standard a un al clic metodo nella classe:

@Override public void onClick (Visualizza vista) if (view.getId () == R.id.sign_in_button) beginUserInitiatedSignIn ();  else if (view.getId () == R.id.sign_out_button) signOut (); findViewById (R.id.sign_in_button) .setVisibility (View.VISIBLE); findViewById (R.id.sign_out_button) .setVisibility (View.GONE); 

I metodi che chiamiamo qui sono forniti dal BaseGameActivity classe nostra Attività la classe sta ereditando da, quindi non abbiamo bisogno di gestire i dettagli manualmente. Infine, aggiungiamo un paio di callback standard:

public void onSignInSucceeded () findViewById (R.id.sign_in_button) .setVisibility (View.GONE); findViewById (R.id.sign_out_button) .setVisibility (View.VISIBLE);  @Override public void onSignInFailed () findViewById (R.id.sign_in_button) .setVisibility (View.VISIBLE); findViewById (R.id.sign_out_button) .setVisibility (View.GONE); 

Quando chiamiamo la funzionalità della classifica, per prima cosa controlleremo che l'app abbia una connessione ai servizi di Google. In alternativa, puoi aggiungere codice a questi metodi per gestire la consapevolezza della tua app in merito alla possibilità o meno di utilizzare i servizi di gioco.

5. Implementa la tua classifica

Passo 1

Ora possiamo consentire all'app di utilizzare la classifica. Il codice nell'app di esempio utilizza il seguente layout. Non entrerò nei dettagli per spiegare il layout in quanto le tue app avranno un layout diverso.

     

Aggiungiamo pulsanti per accedere a risultati e classifiche per l'app. Se non hai completato il tutorial sui risultati, puoi rimuovere il pulsante Risultati.

Torna nella tua applicazione Attività classe, useremo queste variabili di istanza:

private Pulsante button0, button1, button2, button3, button4, button5, button6, button7, button8, button9, buttonAgain; numero int privato; rand privato a caso; informazioni TextView private; private int numGuesses = 0;

Se hai completato il tutorial sui risultati, potresti notare una variabile aggiuntiva, numGuesses, per tenere traccia del numero di ipotesi utente ogni volta che giocano.

Avrai bisogno del seguente codice aggiuntivo in onCreate metodo del Attività classe. Se non stai utilizzando il pulsante risultati, quindi rimuovere la linea che fa riferimento a esso.

findViewById (R.id.show_achievements) .setOnClickListener (questo); findViewById (R.id.show_leaderboard) .setOnClickListener (questo); Button0 = (Button) findViewById (R.id.btn0); button1 = (Button) findViewById (R.id.btn1); button2 = (Button) findViewById (R.id.btn2); button3 = (Button) findViewById (R.id.btn3); Button4 = (Button) findViewById (R.id.btn4); Button5 = (Button) findViewById (R.id.btn5); button6 = (Button) findViewById (R.id.btn6); button7 = (Button) findViewById (R.id.btn7); button8 = (Button) findViewById (R.id.btn8); button9 = (Button) findViewById (R.id.btn9); buttonAgain = (Button) findViewById (R.id.btnAgain); info = (TextView) findViewById (R.id.guess_text); rand = new Random (); number = rand.nextInt (10);

Utilizziamo inoltre i seguenti metodi per disabilitare e abilitare i pulsanti durante il gameplay:

private void disableNumbers () button0.setEnabled (false); button0.setTextColor (Color.parseColor ( "# ff000033")); button1.setEnabled (false); button1.setTextColor (Color.parseColor ( "# ff000033")); button2.setEnabled (false); button2.setTextColor (Color.parseColor ( "# ff000033")); button3.setEnabled (false); button3.setTextColor (Color.parseColor ( "# ff000033")); button4.setEnabled (false); button4.setTextColor (Color.parseColor ( "# ff000033")); button5.setEnabled (false); button5.setTextColor (Color.parseColor ( "# ff000033")); button6.setEnabled (false); button6.setTextColor (Color.parseColor ( "# ff000033")); button7.setEnabled (false); button7.setTextColor (Color.parseColor ( "# ff000033")); button8.setEnabled (false); button8.setTextColor (Color.parseColor ( "# ff000033")); button9.setEnabled (false); button9.setTextColor (Color.parseColor ( "# ff000033")); buttonAgain.setEnabled (true); buttonAgain.setTextColor (Color.parseColor ( "# ff000033"));  private void enableNumbers () button0.setEnabled (true); button0.setTextColor (Color.White); button1.setEnabled (true); button1.setTextColor (Color.White); button2.setEnabled (true); button2.setTextColor (Color.White); button3.setEnabled (true); button3.setTextColor (Color.White); button4.setEnabled (true); button4.setTextColor (Color.White); button5.setEnabled (true); button5.setTextColor (Color.White); button6.setEnabled (true); button6.setTextColor (Color.White); button7.setEnabled (true); button7.setTextColor (Color.White); button8.setEnabled (true); button8.setTextColor (Color.White); button9.setEnabled (true); button9.setTextColor (Color.White); buttonAgain.setEnabled (false); buttonAgain.setTextColor (Color.parseColor ( "# ffffff00")); 

Abbiamo anche bisogno del seguente metodo che abbiamo specificato come al clic attributo per i pulsanti numerici nel layout. Il giocatore tocca uno di questi per indovinare:

public void btnPressed (Visualizza v) int btn = Integer.parseInt (v.getTag (). toString ()); if (BTN<0) //again btn numGuesses=0; number=rand.nextInt(10); enableNumbers(); info.setText("Set the number!");  else //number button numGuesses++; if(btn==number) info.setText("Yes! It was "+number); if(getApiClient().isConnected()) Games.Achievements.unlock(getApiClient(), getString(R.string.correct_guess_achievement)); Games.Leaderboards.submitScore(getApiClient(), getString(R.string.number_guesses_leaderboard), numGuesses);  disableNumbers();  else if(numGuesses==5) info.setText("No! It was "+number); disableNumbers();  else info.setText("Try again!");  

Prenditi un momento per esaminare il codice. Anche se hai completato l'app nel tutorial sui risultati, ci sono alcune modifiche alla logica oltre al codice della classifica extra. Se il giocatore tocca il Ancora pulsante, ripristiniamo il numGuesses variabile a 0. Se l'utente tocca un pulsante numerico, incrementiamo numGuesses. Se non stai usando risultati, puoi rimuovere qualsiasi codice che referenzia i risultati.

Presentiamo il punteggio alla classifica quando l'utente ha indovinato correttamente. L'utente può fare fino a cinque ipotesi.

La linea chiave qui è Inserisci il punteggio. Passiamo il numero di ipotesi che il giocatore ha preso per ottenere il numero corretto. Se il numero di ipotesi è inferiore a qualsiasi voce esistente per l'utente nella classifica, la loro voce verrà sostituita con questo nuovo valore. Si noti che utilizziamo il valore di risorsa stringa che abbiamo definito per la classifica. 

Passo 2

Prima di concludere, permettiamo all'utente di visualizzare la classifica del gioco toccando il pulsante Classifica pulsante che abbiamo aggiunto. Abbiamo usato il seguente codice in al clic per i risultati:

else if (view.getId () == R.id.show_achievements) startActivityForResult (Games.Achievements.getAchievementsIntent (getApiClient ()), 1); 

Presentare la classifica è simile:

else if (view.getId () == R.id.show_leaderboard) startActivityForResult (Games.Leaderboards.getLeaderboardIntent (getApiClient (), getString (R.string.number_guesses_leaderboard)), 2); 

Ciò consentirà all'utente di vedere la classifica corrente all'interno della classifica. Il parametro intero è arbitrario.

Quando si esegue l'applicazione, tenterà di accedere all'utente, controllando le autorizzazioni e confermando il login se ha esito positivo:

L'utente è libero di scegliere di disconnettersi e tornare in qualsiasi momento, ma se lascia l'app, tenterà automaticamente di ricollegarli quando lo riapriranno. Quando l'utente indovina correttamente, il loro punteggio sarà presentato alla classifica. Premendo il tasto Classifica pulsante presenterà la classifica attuale:

Da qui, l'utente può accedere alle funzioni social dei Servizi Google tramite il proprio account Google. Puoi impostare le tue app per utilizzare classifiche pubbliche e social. Le classifiche sociali presentano elenchi di persone nelle cerchie dell'utente, che possono essere gestite per il gioco stesso. Per una classifica pubblica, l'utente deve aver scelto di condividere i propri punteggi pubblicamente.

Conclusione

In questo tutorial, abbiamo implementato la funzionalità di classifica di base con i servizi di giochi di Google Play. Nota che puoi fare molto di più con le classifiche nelle tue app. Ad esempio, è possibile richiedere i dati della classifica per determinate scale temporali come giornaliera, settimanale e di tutti i tempi. Se una classifica contiene molti punteggi, è possibile che la tua app recuperi solo i punteggi migliori oi punteggi più vicini al giocatore corrente. Prova a sperimentare con alcuni di questi miglioramenti nelle tue app.