Google Play-gameservices bieden de mogelijkheid om sociale functies aan uw games toe te voegen via de Google+ accounts van gebruikers. In deze zelfstudie laten we zien hoe je scoreborden kunt toevoegen aan een Android-app, gebruikersscores kunt indienen en het huidige klassement van het klassement kunt presenteren in het spel..
Als u scoreborden gebruikt, moet u uw IDE voorbereiden, het scorebord configureren in de Google Play-ontwikkelaarsconsole en functionaliteit aan uw app toevoegen.
Als u de recente zelfstudie over het toevoegen van prestaties aan Android-apps hebt voltooid, kunt u enkele van de stappen in deze app overslaan. De bijgevoegde broncode bevat dezelfde app die we hebben gebruikt voor de zelfstudie over prestaties, met zowel prestaties als leaderboards functionaliteit toegevoegd.
Als u Google Play-services wilt gebruiken, moet u bepaalde hulpprogramma's hebben geïnstalleerd in uw ontwikkelomgeving. Omdat we Game Services gebruiken, zullen we bovendien het BaseGameUtils bibliotheek, wat de hoeveelheid codering vermindert die we nodig hebben om functies zoals Google+ Login te implementeren.
Maak een nieuwe app of gebruik een bestaande app om aan de slag te gaan. Als je de tutorial Prestaties hebt gevolgd, kun je de app gebruiken die je voor die zelfstudie hebt gemaakt. Als u uw eigen spel maakt, bepaal dan waarvoor u scoreborden wilt gebruiken en wanneer u van plan bent een gebruikersscore in te dienen. Elke scorebordscore is een getal. Je kunt het leaderboard zo configureren dat lager of hoger getallen als beter worden beschouwd in termen van positie op het scorebord, maar dit is natuurlijk afhankelijk van het doel van je game.
De code in de downloadmap bevat een eenvoudig spel waarin de gebruiker een getal raadt. We gebruiken het aantal benodigde gissingen om het juiste antwoord te krijgen als scorebord. In dit geval zijn minder raden beter, zodat het leaderboard de laagste scores als eerste presenteert. Voor de eenvoud zullen we het aantal gissingen dat een gebruiker kan nemen beperken. Dit is een triviaal voorbeeld om het leaderboardconcept en de functionaliteit te demonstreren. Uw eigen spellen zullen waarschijnlijk meer complexiteit met zich meebrengen.
Laten we Eclipse voorbereiden voor ontwikkeling met Google Play Game Services. Open de Android SDK Manager en ga naar de Extras map. Vouw de map uit en selecteer Google Play-services plus de Google Repository. Installeer de Google API's Platform ook uit een van de recente Android-versies als je wilt testen op de emulator. Installeer de gekozen pakketten.
Eclipse moet ook verwijzen naar enkele extra bronnen in de werkruimte. Navigeer op uw computer naar de locatie van de Google Play-servicesbibliotheek, welke in de Android SDK-map zou moeten staan, op extras / google / google_play_services / libproject / google-play-services_lib /. Kopieer en plak de bibliotheek ergens anders op uw computer.
We hebben nu een verwijzing naar deze kopie nodig in Eclipse. Kiezen Importeren> Android> Bestaande Android-code importeren in werkruimte van de het dossier menu. Selecteer de locatie van de kopie die u hebt gemaakt. De geïmporteerde bibliotheek zou nu moeten verschijnen als een nieuw project in Eclipse. Klik met de rechtermuisknop en kies eigenschappen. In de Android sectie, kies een Google APIs-builddoel en vink het selectievakje aan Is Bibliotheek checkbox.
Het importeren van BaseGameUtils bron is iets anders. De bibliotheek wordt gehost op GitHub. Je vindt het in de sectie Downloads onder Sample Games. Download de bibliotheek en sla deze op uw computer op.
Zoals u deed voor de Google Play Services-bibliotheek, kiest u Importeren> Android> Bestaande Android-code importeren in Workspace van de het dossier menu om de BaseGameUtils-bibliotheek in Eclipse te brengen. Klik met de rechtermuisknop om naar de nieuwe projecteigenschappen te gaan en zorg ervoor dat het project wordt gemarkeerd als een bibliotheek door te controleren Is Bibliotheek.
We kunnen nu de app laten verwijzen naar deze twee bronnen in de werkruimte. Klik met de rechtermuisknop op uw app in Package Explorer en kies eigenschappen. Navigeer naar de Android sectie en selecteer Toevoegen in de Bibliotheek sectie. Kies beide Google Play-services bibliotheek en BaseGameUtils, en voeg ze toe aan je app.
Voordat u een scorebord kunt maken, moet de app worden vermeld in de Google Play-ontwikkelaarsconsole. Log in en klik op de Game Services knop naar links. Als je dit al voor je app hebt gedaan in de zelfstudie over prestaties, hoef je dit niet nog een keer te doen. Je kunt naar sectie 3 springen om een scorebord te maken.
Klik Google Play-gameservices instellen.
Klik om een nieuw spel toe te voegen, selecteer Ik gebruik nog geen Google API's in mijn game, en kies een naam en categorie voor je spel. Klik Doorgaan metom naar de volgende stap te gaan.
Voeg de titel van je spel toe. U kunt later andere details toevoegen.
Laten we nu de app koppelen, zodat we deze lijst met ontwikkelaarsconsoles in de app zelf kunnen raadplegen. Klik op de Gekoppelde apps invoer in de lijst aan de linkerkant en kies Android.
Voer uw app-informatie inclusief de pakketnaam in en zorg ervoor dat deze dezelfde is als die u in uw project gebruikt.
Opslaan en klikken Autoriseer uw app nu. Op dit moment kunt u gewoon de app-naam toevoegen, maar u kunt later meer details invoeren. Kiezen Geïnstalleerde applicatie in het gebied Client ID, met Android als het type en voer je pakketnaam in. U moet nu het hulpprogramma keytool gebruiken om een handtekeningcertificaat te genereren. U kunt de volgende opdracht gebruiken in een terminal of opdrachtprompt in combinatie met het foutopsporingscertificaat:
keytool -exportcert -alias androiddebugkey -keystore ~ / .android / debug.keystore -list -v
De terminal of opdrachtprompt zal de vingerafdruk voor het certificaat wegschrijven. Kopieer wat je ziet SHA1 en plak het in de ontwikkelaarsconsole in de Ondertekening certificaatvingerafdruk tekstgebied.
kiezen Klant maken en kopieer de ID voor de toepassing die wordt weergegeven naast de app-naam in de ontwikkelaarsconsole. U voegt de ID aan uw app toe, samen met de ID voor het scorebord dat we gaan maken.
Nog steeds in de ontwikkelaarsconsole, laten we nu een nieuw scorebord maken. Selecteer de leaderboards sectie in uw app-lijst en klik op Voeg scorebord toe.
Zorg ervoor dat u het concept van Leaderboards op Android - en in Google Play Game Services in het algemeen - begrijpt. U kunt een overzicht lezen op de website van Google Play Game Services. Je kunt eigenlijk heel veel verschillende dingen doen met scoreborden, dus bedenk wat we in deze tutorial doen, slechts een startpunt.
Voer de details in voor je nieuwe leaderboard. Voor onze voorbeeldcode gebruiken we de naam Minste gissingen en selecteer Kleiner is beter in de Bestellen sectie.
Voeg een pictogram toe als je wilt. Als u dit niet doet, wordt een standaardafbeelding gebruikt. Sla je nieuwe leaderboard op en kopieer de ID ervan.
In de testen sectie voor uw app in de ontwikkelaarsconsole, kunt u accounts toevoegen die toegang krijgen om de game te testen. Standaard wordt daar het e-mailadres van uw eigen Google-account weergegeven, zodat u het kunt gebruiken om uw app te testen.
Het is tijd om de app klaar te zetten voor leaderboard-toegang in Eclipse. Als u de handleidingen over prestaties hebt voltooid, kunt u een deel van deze sectie overslaan. Laten we eerst de ID's voor de app en het scorebord toevoegen. Open of maak een res / waarden / ids.xml bronbestand. Gebruik de volgende syntaxis om de ID's in te voeren die u voor de app en het nieuwe klassement hebt gekopieerd toen u ze in de ontwikkelaarsconsole maakte:
1234567890 abcdefg1234567
Sla het bestand op en open de projecten Manifesteren. Voeg het volgende toe in de toepassing
element:
De app is nu ingesteld om te linken naar de vermeldingen die we hebben toegevoegd in de ontwikkelaarsconsole.
Wanneer u Google-services gebruikt in uw Android-apps, moet u uw gebruikers aanmelden bij hun Google-accounts. U kunt een aantal benaderingen nemen om dit te implementeren, maar we gaan delen van dit proces automatiseren met behulp van de BaseGameActivity
les samen met standaardknoppen om in en uit te loggen. Wanneer de activiteit start, probeert de app bovendien de gebruiker meteen in te loggen.
Open het hoofdlay-outbestand van uw app en voeg knoppen toe voor aanmelden / afmelden:
Voeg deze import toe aan uw hoofd Activiteit
klasse:
import com.google.android.gms.games.Games; import com.google.example.games.basegameutils.BaseGameActivity;
Maak de Activiteit
klasse verlengen de BaseGameActivity
klasse en luister naar klikken:
public class MainActivity breidt BaseGameActivity implementeert View.OnClickListener uit
Bereid je voor om te reageren op klikken op de knoppen voor aanmelden / aanmelden in onCreate
:
findViewById (R.id.sign_in_button) .setOnClickListener (deze); findViewById (R.id.sign_out_button) .setOnClickListener (deze);
Voeg nu de volgende standaardmethoden toe aan een bij klikken
methode in de klas:
@Override public void onClick (View view) 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);
De methoden die we hier noemen, worden geleverd door de BaseGameActivity
class onze Activiteit
klasse erft van, dus we hoeven de details niet handmatig te verwerken. Ten slotte voegen we een aantal standaard callbacks toe:
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);
Wanneer we een beroep doen op de leaderboard-functionaliteit, controleren we eerst of de app een verbinding heeft met Google-services. U kunt als alternatief code toevoegen aan deze methoden om het bewustzijn van uw app te beheren of Play Services wel of niet kan worden aangeroepen.
Nu kunnen we de app het scorebord laten gebruiken. De code in de voorbeeldapp gebruikt de volgende lay-out. Ik zal niet in detail ingaan op de lay-out omdat je eigen apps een andere lay-out hebben.
We voegen knoppen toe om toegang te krijgen tot zowel prestaties als scoreborden voor de app. Als u de zelfstudie over prestaties niet hebt voltooid, kunt u de knop Prestaties verwijderen.
Terug in uw applicaties Activiteit
klasse, zullen we deze instantievariabelen gebruiken:
privé Knop knop0, knop1, knop2, knop3, knop4, knop5, knop6, knop7, knop8, knop9, knopAgain; privé int-nummer; privé Willekeurige rand; privé TextView-info; private int numGuesses = 0;
Als u de zelfstudie over prestaties hebt voltooid, ziet u mogelijk een extra variabele, numGuesses
, om het aantal gebruikersgissingen bij te houden telkens wanneer zij het spel spelen.
U hebt de volgende aanvullende code nodig in de onCreate
methode van de Activiteit
klasse. Als u de knop Prestaties niet gebruikt, verwijdert u de regel die ernaar verwijst.
findViewById (R.id.show_achievements) .setOnClickListener (deze); findViewById (R.id.show_leaderboard) .setOnClickListener (deze); button0 = (knop) findViewById (R.id.btn0); button1 = (knop) findViewById (R.id.btn1); button2 = (knop) findViewById (R.id.btn2); button3 = (knop) findViewById (R.id.btn3); Button4 = (knop) findViewById (R.id.btn4); button5 = (knop) findViewById (R.id.btn5); button6 = (knop) findViewById (R.id.btn6); button7 = (knop) findViewById (R.id.btn7); button8 = (knop) findViewById (R.id.btn8); button9 = (knop) findViewById (R.id.btn9); buttonAgain = (knop) findViewById (R.id.btnAgain); info = (TextView) findViewById (R.id.guess_text); rand = nieuw Willekeurig (); nummer = rand.nextInt (10);
We gebruiken ook de volgende methoden om de knoppen tijdens het spelen uit te schakelen en in te schakelen:
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"));
We hebben ook de volgende methode nodig die we hebben opgegeven als bij klikken
kenmerk voor de cijferknoppen in de lay-out. De speler tikt op een van deze om een schatting te maken:
public void btnPressed (View 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!");
Neem even de tijd om de code te bekijken. Zelfs als je de app hebt voltooid in de zelfstudie over prestaties, zijn er enkele wijzigingen in de logica naast de extra leaderboard-code. Als de speler op de Nog een keer knop, we resetten de numGuesses
variabele naar 0
. Als de gebruiker op een cijferknop tikt, nemen we toe numGuesses
. Als u geen prestaties gebruikt, kunt u elke code verwijderen die naar prestaties verwijst.
We sturen de score naar het scorebord als de gebruiker het goed heeft geraden. De gebruiker kan maximaal vijf keer raden.
De belangrijkste regel is hier submitScore
. We geven het aantal gissingen door dat de speler heeft gemaakt om het juiste aantal te krijgen. Als het aantal gissingen lager is dan een bestaande invoer voor de gebruiker in het scorebord, wordt hun invoer vervangen door deze nieuwe waarde. Merk op dat we de stringresource-waarde gebruiken die we voor het leaderboard hebben gedefinieerd.
Voordat we klaar zijn, laten we de gebruiker toestaan het scorebord voor games te bekijken door op de. Te tikken Scorebord knop die we hebben toegevoegd. We gebruikten de volgende code in bij klikken
voor de prestaties:
else if (view.getId () == R.id.show_achievements) startActivityForResult (Games.Achievements.getAchievementsIntent (getApiClient ()), 1);
Het leaderboard presenteren is vergelijkbaar:
else if (view.getId () == R.id.show_leaderboard) startActivityForResult (Games.Leaderboards.getLeaderboardIntent (getApiClient (), getString (R.string.number_guessards_leaderboard)), 2);
Hierdoor kan de gebruiker het huidige klassement binnen het scorebord zien. De parameter integer is willekeurig.
Wanneer u de app uitvoert, probeert deze de gebruiker aan te melden, te controleren op machtigingen en in te loggen als deze is gelukt:
De gebruiker kan ervoor kiezen om uit en weer in te loggen wanneer hij wil, maar als deze de app verlaat, probeert deze hem automatisch opnieuw aan te melden wanneer hij deze opnieuw opent. Wanneer de gebruiker correct raadt, wordt zijn score bij het leaderboard ingediend. Druk op de Scorebord knop geeft het huidige klassement weer:
Vanaf hier heeft de gebruiker via zijn Google-account toegang tot sociale functies van Google Services. U kunt uw apps instellen om openbare en sociale ranglijsten te gebruiken. Sociale leaderboards presenteren lijsten van mensen in de kringen van de gebruiker, die kunnen worden beheerd voor de game zelf. Voor een publiek leaderboard moet de gebruiker ervoor hebben gekozen zijn scores openbaar te delen.
In deze zelfstudie hebben we elementaire leaderboard-functionaliteit geïmplementeerd met Google Play Game Services. Merk op dat je veel meer kunt doen met leaderboards in je apps. U kunt bijvoorbeeld scorebordgegevens opvragen voor bepaalde tijdsschalen, zoals dagelijks, wekelijks en altijd. Als een scorebord veel scores bevat, is het mogelijk dat uw app alleen de hoogste scores of de scores haalt die zich het dichtst bij de huidige speler bevinden. Experimenteer met enkele van deze verbeteringen in je eigen apps.