Google Play-spilltjenester gir deg muligheten til å legge til sosiale funksjoner i spillene dine gjennom brukerens Google+ kontoer. I denne opplæringen vil vi demonstrere hvordan du kan legge til topplister i en Android-app, sende inn brukerpoeng og presentere de nåværende lederposisjonene i spillet.
Bruk av leaderboards innebærer å forberede IDE, konfigurere ledergruppen i utviklerkonsollen for Google Play, og legge til funksjonalitet i appen din.
Hvis du har fullført den nyeste opplæringen om å legge til prestasjoner i Android-apper, kan du hoppe over noen av trinnene i denne. Vedlagte kildekoden inneholder samme app som vi brukte for opplæringsopplæringen, med både prestasjoner og topplistefunksjonalitet lagt til.
Hvis du vil bruke Google Play Services, trenger du visse verktøy installert i utviklingsmiljøet ditt. I tillegg, siden vi bruker Game Services, vil vi installere BaseGameUtils bibliotek, noe som reduserer mengden koding vi trenger for å implementere funksjoner som Google+ pålogging.
For å komme i gang, opprett en ny app eller bruk en eksisterende. Hvis du fulgte opplæringsopplæringen, kan du bruke appen du bygget for den opplæringen. Hvis du lager ditt eget spill, bestem deg hva du vil bruke leaderboards for, og når du planlegger å sende inn en brukerpoengsum. Hver poengtavle score vil være et nummer. Du kan konfigurere leaderboardet til å betrakte lavere eller høyere tallverdier som bedre når det gjelder posisjon i topplaten, men dette vil selvsagt avhenge av formålet med spillet ditt.
Koden i nedlastingsmappen inneholder et enkelt spill der brukeren gjetter et nummer. Vi vil bruke antall gjetninger som kreves for å få det riktige svaret som poengtavlepoeng. I dette tilfellet er færre gjetninger bedre, så lederbordet vil presentere de laveste resultatene først. For enkelhet vil vi begrense antall gjetninger en bruker kan ta. Dette er et trivielt eksempel for å demonstrere leaderboard-konseptet og funksjonaliteten. Dine egne spill vil trolig innebære mer kompleksitet.
La oss få Eclipse klar for utvikling med Google Play Game Services. Åpne Android SDK Manager og bla til extras mappe. Utvid mappen og velg Google Play-tjenester pluss Google Repository. Installer Google APIs plattform fra en av de nyeste Android-versjonene også, hvis du vil teste på emulatoren. Installer de valgte pakkene.
Eclipse vil også trenge å referere til noen ekstra ressurser i arbeidsområdet. På datamaskinen din, naviger til plasseringen av Google Play Services Library, som skal være i Android SDK-mappen, på statister / google / google_play_services / libproject / google-play-services_lib /. Kopier og lim inn biblioteket et annet sted på datamaskinen din.
Vi trenger nå en referanse til denne kopien i Eclipse. Velge Import> Android> Importer eksisterende Android-kode inn i arbeidsområdet fra Fil Meny. Velg plasseringen av kopien du har laget. Det importerte biblioteket skal nå dukke opp som et nytt prosjekt i Eclipse. Høyreklikk på det og velg Eiendommer. I Android delen, velg et Google APIs bygge mål og sjekk Er biblioteket avkrysnings.
Importerer BaseGameUtils ressursen er litt annerledes. Biblioteket er vert på GitHub. Du finner den i Nedlastinger-delen, under Eksempelspill. Last ned biblioteket og lagre det på datamaskinen.
Som du gjorde for Google Play Services-biblioteket, velg Importer> Android> Importer eksisterende Android-kode inn arbeidsområde fra Fil menyen for å bringe BaseGameUtils-biblioteket til Eclipse. Høyreklikk for å navigere til de nye prosjektegenskapene og sørg for at prosjektet er merket som et bibliotek ved å sjekke Er biblioteket.
Vi kan nå gjøre appen referere til disse to ressursene i arbeidsområdet. Høyreklikk appen din i Package Explorer og velg Eiendommer. Naviger til Android delen og velg Legg til i Bibliotek seksjon. Velg begge Google Play-tjenester bibliotek og BaseGameUtils, og legg dem til appen din.
Før du kan opprette et toppliste, må appen være oppført i Utviklerkonsoll for Google Play. Logg inn og klikk på Spilltjenester knappen til venstre. Hvis du allerede gjorde dette for appen din i opplæringsopplæringen, trenger du ikke å gjøre det igjen. Du kan hoppe til seksjon 3 om å lage et leaderboard.
Klikk Konfigurer Google Play-spilltjenester.
Klikk for å legge til et nytt spill, velg Jeg bruker ikke noen Google-APIer i spillet mitt ennå, og velg et navn og en kategori for spillet ditt. Klikk Fortsetteå gå til neste trinn.
Legg til spillets tittel. Du kan legge til andre detaljer senere.
La oss nå koble appen slik at vi kan referere til denne utviklerkonsolllisten i selve appen. Klikk på Koblede apper oppføring i listen til venstre og velg Android.
Angi appinformasjonen din, inkludert pakkenavnet, og sørg for at det er det samme som det du bruker i prosjektet.
Lagre og klikk Autoriser appen din nå. For øyeblikket kan du bare legge til appnavnet, men du kan legge inn flere detaljer senere. Velge Installert applikasjon i klient-ID-området, med Android som type og skriv inn pakkenavnet ditt. Du må nå bruke keytool-verktøyet til å generere et signeringssertifikat. Du kan bruke følgende kommando i en terminal eller kommandoprompt i kombinasjon med feilsøkingsbeviset:
keytool -exportcert -alias androiddebugkey -keystore ~ / .android / debug.keystore -list -v
Terminal- eller kommandoprompten vil skrive ut fingeravtrykk for sertifikatet. Kopier hva du ser etter SHA1 og lim det inn i utviklerkonsollen i Fingeravtrykk for signering av sertifikat tekstområde.
Å velge Opprett klient og kopier IDen for programmet, som er oppført ved siden av appnavnet i utviklerkonsollen. Du vil legge til IDen til appen din sammen med ID-nummeret for topplisten vi skal lage.
Fortsatt i utviklerkonsollen, la oss nå opprette et nytt toppliste. Velg Leaderboards delen i appoppføringen din og klikk Legg til leaderboard.
Pass på at du forstår konseptet Leaderboards på Android og i Google Play Game Services generelt. Du kan lese en oversikt over nettstedet for Google Play Game Services. Du kan faktisk gjøre mange forskjellige ting med leaderboards, så vurder hva vi gjør i denne opplæringen bare et utgangspunkt.
Skriv inn detaljene for ditt nye leaderboard. For vår prøvekode bruker vi navnet Minste gjetninger og velg Mindre er bedre i bestilling seksjon.
Legg til et ikon hvis du vil. Hvis du ikke bruker et standardbilde. Lagre ditt nye toppliste og kopier dets ID.
I testing delen for appen din i utviklerkonsollen, kan du legge til kontoer som får tilgang til å teste spillet. Som standard ser du din egen Google-konto-epost som er oppført der, så du bør kunne bruke den til å teste appen din.
Det er på tide å få appen klar for ledertilgang i Eclipse. Hvis du har fullført opplæringsopplæringen, kan du hoppe over noen av denne delen. La oss først legge til IDene for appen og topplisten. Åpne eller opprett en res / verdier / ids.xml ressursfilen. Bruk følgende syntaks for å skrive inn IDene du kopierte til appen og det nye topplisten når du opprettet dem i utviklerkonsollen:
1234567890 abcdefg1234567
Lagre filen og åpne prosjektet manifest. Legg til følgende inne i applikasjon
element:
Appen er nå konfigurert for å koble til oppføringene vi har lagt til i utviklerkonsollen.
Når du bruker Google-tjenester i Android-appene dine, må du ha brukerne til å logge på deres Google-kontoer. Du kan ta en rekke tilnærminger for å implementere dette, men vi skal automatisere deler av denne prosessen ved å bruke BaseGameActivity
klasse sammen med standard knapper for signering inn og ut. I tillegg, når aktiviteten starter, forsøker appen å logge brukeren med det samme.
Åpne appens hovedlayoutfil og legg til knapper for pålogging / utmelding:
Legg til denne importen til hovedmenyen Aktivitet
klasse:
importer com.google.android.gms.games.Games; importer com.google.example.games.basegameutils.BaseGameActivity;
Lage Aktivitet
klassen forlenge BaseGameActivity
klassen og lytt etter klikk:
offentlig klasse MainActivity utvider BaseGameActivity implementerer View.OnClickListener
Forbered deg på å svare på klikk på innlogging / ut-knappene i onCreate
:
findViewById (R.id.sign_in_button) .setOnClickListener (this); findViewById (R.id.sign_out_button) .setOnClickListener (this);
Legg nå følgende standardmetoder til en ved trykk
metode i klassen:
@Override public void onClick (Vis visning) if (view.getId () == R.id.sign_in_button) beginUserInitiatedSignIn (); annet hvis (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);
Metodene vi kaller her leveres av BaseGameActivity
klasse vår Aktivitet
klassen arver fra, så vi trenger ikke å håndtere detaljene manuelt. Til slutt legger vi til et par standard tilbakeringinger:
Offentlig tomgang 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);
Når vi ringer på topplistefunksjonaliteten, kontrollerer vi først at appen har en forbindelse til Google Services. Du kan alternativt legge til kode for disse metodene for å administrere appens bevissthet om hvorvidt Play Services kan aktiveres eller ikke.
Nå kan vi la appen bruke topplaten. Koden i prøveappen bruker følgende layout. Jeg vil ikke gå i detaljer som forklarer oppsettet som dine egne apper vil ha et annet layout.
Vi legger til knapper for å få tilgang til både prestasjoner og leaderboards for appen. Hvis du ikke har fullført opplæringsopplæringen, kan du fjerne resultatene-knappen.
Tilbake i søknaden din Aktivitet
klasse, vil vi bruke disse instansvariablene:
privat knapp knapp0, knapp1, knapp2, knapp3, knapp4, knapp5, knapp6, knapp7, knapp8, knapp9, knappAgain; privat int nummer; privat tilfeldig rand; privat tekstvisning info; private int numGuesses = 0;
Hvis du har fullført opplæringsopplæringen, kan du legge merke til en ekstra variabel, numGuesses
, å holde oversikt over antall bruker gjetninger hver gang de spiller spillet.
Du trenger følgende tilleggskode i onCreate
metode av Aktivitet
klasse. Hvis du ikke bruker prestasjonsknappen, fjerner du linjen som refererer til den.
findViewById (R.id.show_achievements) .setOnClickListener (this); findViewById (R.id.show_leaderboard) .setOnClickListener (this); button0 = (Button) findViewById (R.id.btn0); Button1 = (Button) findViewById (R.id.btn1); knappen2 = (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 = ny tilfeldig (); tall = rand.nextInt (10);
Vi bruker også følgende metoder for å deaktivere og aktivere knappene under spillingen:
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"));
Vi trenger også følgende metode vi spesifiserte som ved trykk
attributt for talltastene i oppsettet. Spilleren tapper en av disse for å gjette:
offentlig tomrom btnPressed (Vis 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!");
Ta deg tid til å se over koden. Selv om du har fullført appen i opplæringsopplæringen, er det noen endringer i logikken i tillegg til den ekstra leaderboardkoden. Hvis spilleren tapper på En gang til knappen, nullstiller vi numGuesses
variabel til 0
. Hvis brukeren tapper en talltast, øker vi numGuesses
. Hvis du ikke bruker prestasjoner, kan du fjerne hvilken som helst kode som refererer til prestasjoner.
Vi sender inn poengsummen til topplisten når brukeren gjettet riktig. Brukeren kan gjøre opptil fem gjetninger.
Nøkkellinjen her er Send inn poengsum
. Vi sender antall gjetninger spilleren tok for å få riktig nummer. Hvis antall gjetninger er lavere enn noen eksisterende oppføring for brukeren i topplisten, blir oppføringen deres erstattet med denne nye verdien. Legg merke til at vi bruker streng ressursverdien vi definerte for topplaten.
Før vi er ferdige, la vi tillate brukeren å se spillets toppliste ved å trykke på Leaderboard knappen vi la til. Vi brukte følgende kode i ved trykk
for prestasjonene:
ellers hvis (view.getId () == R.id.show_achievements) startActivityForResult (Games.Achievements.getEchievementsIntent (getApiClient ()), 1);
Å presentere leaderboardet er like:
ellers hvis (view.getId () == R.id.show_leaderboard) startActivityForResult (Games.Leaderboards.getLeaderboardIntent (getApiClient (), getString (R.string.number_guesses_leaderboard)), 2);
Dette vil la brukeren se dagens posisjoner i topplisten. Heltall parameteren er vilkårlig.
Når du kjører appen, vil den forsøke å logge brukeren inn, sjekke for tillatelser og bekrefte påloggingen hvis det lykkes:
Brukeren kan velge å logge ut og tilbake når som helst, men hvis de forlater appen, vil den forsøke å automatisk logge dem inn igjen når de åpner den igjen. Når brukeren gjetter riktig, blir poengsummen sendt til leaderboardet. Trykk på Leaderboard knappen vil vise nåværende stilling:
Herfra kan brukeren få tilgang til sosiale funksjoner i Google Services via sin Google-konto. Du kan angi appene dine for å bruke offentlige og sosiale leaderboards. Sosial leaderboards presentere oppføringer av personer i brukerens kretser, som kan administreres for selve spillet. For en offentlig ledergruppe må brukeren ha valgt å dele sine poeng offentlig.
I denne opplæringen har vi implementert grunnleggende leaderboard-funksjonalitet med Google Play Game Services. Merk at du kan gjøre mye mer med leaderboards i appene dine. Du kan for eksempel be om ledertabeldata for bestemte tidsskalaer som daglig, ukentlig og heltid. Hvis et leaderboard inneholder mange poeng, er det mulig for appen din å bare hente toppscorer eller poengene nærmest den nåværende spilleren. Prøv å eksperimentere med noen av disse forbedringene i dine egne apper.