Met Google Play Games Services kunt u een reeks functies bouwen in uw Android-apps, waaronder scoreborden, prestaties, multiplayer-gameplay, cloudopslag en Google+ Login.
In deze zelfstudie zullen we de stappen doorlopen die u moet nemen om prestaties toe te voegen aan een eenvoudig Android-spel. We zullen de ontwikkelomgeving voorbereiden om Google Play Game Services te gebruiken, een prestatie definiëren in de ontwikkelaarsconsole en de prestatie-interactie in de game implementeren.
Om de hulpprogramma's voor Google Play Game Services te kunnen gebruiken, moeten we onze IDE voorbereiden. Evenals het gebruik van de Google Play-services bibliotheek - die u nodig heeft voor alle Google-services - gebruiken we de BaseGameUtils bron, die een aantal klassen bevat die bijzonder handig zijn bij het ontwikkelen van spellen.
Begin met het maken van een nieuwe app in uw IDE. De voorbeeldcode van deze zelfstudie bevat een eenvoudig spel waarin de gebruiker een willekeurig gekozen nummer moet raden. U kunt dat project gebruiken om te ontwikkelen met Google Play Game Services als u dat wilt. Maak een nieuw Android-project en kies er namen en instellingen voor.
Als je de voorbeeldapp niet gebruikt in de download, wil je misschien je gameplay op dit punt implementeren, rekening houdend met wat je voor een prestatie gaat gebruiken. Voor de voorbeeldapp belonen we eenvoudig een prestatie als de gebruiker een juist antwoord kiest.
In deze stap laten we de IDE en ons project klaar om Google Play Games-services en de hulpprogramma's te gebruiken. Open uw Android SDK Manager, die u kunt vinden onder de Venster menu in Eclipse. Blader omlaag totdat je de Extras map, vouw het uit en selecteer Google Play-services en de Google Repository. Mogelijk hebt u ook de Google API's Platform als u van plan bent om op de emulator te testen, selecteer dat dan ook. Je kunt de laatste vinden in de mappen voor recente versies van het Android-platform. Installeer de geselecteerde pakketten, accepteer indien nodig licenties.
We moeten ook een aantal bronnen in de daadwerkelijke werkruimte opnemen, zodat we ze in de app kunnen raadplegen, te beginnen met de Google Play-servicesbibliotheek. Je zou het moeten vinden op / Extras / google / google_play_services / libproject / google-play-services_lib / in uw SDK-map. Maak een kopie van de bibliotheek en plak deze op een andere locatie op uw computer.
Terug in Eclipse importeert u de bibliotheek door te kiezen Importeren> Android> Bestaande Android-code importeren in werkruimte van de het dossier menu. Blader naar de locatie waarnaar u de bibliotheek hebt gekopieerd, selecteer de bibliotheek en importeer deze. De bibliotheek zou moeten verschijnen als een project in uw Eclipse Package Explorer en werkruimte.
Klik met de rechtermuisknop op het bibliotheekproject in Eclipse en selecteer eigenschappen en blader naar de Android-sectie. Selecteer een builddoel voor de Google API en zorg ervoor Is Bibliotheek is nagekeken. De bibliotheek moet nu klaar zijn om te raadplegen in uw app.
Laten we nu de BaseGameUtils bron in uw IDE ook. Download het van de Voorbeeldgames gedeelte van de ontwikkelaarportal van Google. Omdat de code wordt gehost op GitHub, kun je er doorheen bladeren en de bijbehorende gidsen raadplegen op GitHub.
Importeer de BaseGameUtils-resource in Eclipse met dezelfde techniek die u voor de Play Services-bibliotheek hebt gebruikt door te selecteren Importeren> Android> Bestaande Android-code importeren in werkruimte van de het dossier menu. Klik met de rechtermuisknop op het BaseGameUtils-project in uw pakketverkenner en zorg ervoor dat dit klopt Is Bibliotheek is nagekeken.
We kunnen nu verwijzen naar zowel de Google Play Services-bibliotheek als de BaseGameUtils-bronnen in onze app.
Selecteer uw game-app in de Eclipse Package Explorer, klik er met de rechtermuisknop op en kies eigenschappen zoals je deed voor de geïmporteerde bronnen. In de Android sectie, klik deze keer Toevoegen in de Bibliotheek Gebied. Selecteer beide Google Play-services lbibliotheek en BaseGameUtils om als bibliotheken toe te voegen aan uw project.
Dat is de IDE die is ingesteld voor ontwikkeling met Games Services.
Om prestaties in je spel te gebruiken, moet je het spel toevoegen aan de Google Play-ontwikkelaarsconsole. Log in op de ontwikkelaarsconsole, klik op de Gameservices knop links van de console en kies Google Play-gameservices instellen als je ze nog niet eerder hebt gebruikt.
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.
In de Game Details sectie, alles wat u hoeft toe te voegen om uw app te testen, is de titel van uw spel.
Klik Gekoppelde apps aan de linkerkant van uw spelvermelding in de ontwikkelaarsconsole. kiezen Android uit de lijst met gekoppelde apps.
Voer je app-gegevens in, inclusief de pakketnaam die je hebt gekozen toen je deze maakte.
Klik Opslaan en doorgaan bovenaan en kies Autoriseer uw app nu. U wordt gevraagd om merkinformatie in te voeren. Het enige dat u nog nodig heeft, is de naam van uw app. In de Client-ID-instellingen scherm, selecteer Geïnstalleerde applicatie als het type, Android als het geïnstalleerde applicatietype en voer je pakketnaam in.
Vervolgens moet u een handtekeningvingerafdruk genereren voor autorisatie. U moet het hulpprogramma keytool op uw computer uitvoeren om dit te doen. Open een terminal of opdrachtprompt en gebruik de volgende opdracht, maar zorg ervoor dat u deze zo nodig aanpast aan de locatie. U kunt het foutopsporingscertificaat tijdens het testen gebruiken.
keytool -exportcert -alias androiddebugkey -keystore ~ / .android / debug.keystore -list -v
De keytool moet de certificaatvingerafdruk wegschrijven. Selecteer en kopieer wat erna verschijnt SHA1 en plak het in de Developer Console onder Ondertekening certificaatvingerafdruk. Klik Klant maken en kopieer de applicatie-ID die u ziet in de lijst voor uw game in de ontwikkelaarsconsole, die naast de naam van de game boven aan de pagina moet worden weergegeven. Bewaar de applicatie-ID voor later gebruik in uw app.
Klik nog steeds in de ontwikkelaarsconsole op Prestaties knop aan de linkerkant van de spellijst en klik Prestatie toevoegen.
Voordat u doorgaat, wilt u misschien de pagina Prestaties in de Handleiding voor ontwikkelaars bekijken om ervoor te zorgen dat u het concept van een prestatie in Google Play Games begrijpt. Voer een naam, een beschrijving en een pictogram in voor uw prestatie en kies een staat, punten en lijstvolgorde. Voor ons voorbeeldspel gebruiken we Juist geraden als de naam, Kies een correct nummer als de beschrijving en een eenvoudige sterafbeelding als het pictogram. Klik Opslaan om de prestatie te redden.
Kopieer de prestatie-ID, die u naast de prestatie kunt zien in de ontwikkelaarsconsole.
Als u naar de. Navigeert testen sectie voor je spel, kun je e-mailadressen instellen voor mensen die testtoegang tot het spel hebben. Standaard voegt de ontwikkelaarsconsole je eigen e-mail van je Google-account in, zodat je dit meteen kunt gebruiken. Voeg andere test-e-mails toe die u nodig heeft en vervolgens kunt u zich afmelden bij uw Google-account.
In Eclipse kunnen we de app gereed maken voor toegang tot Games Services. We gaan de techniek gebruiken die is beschreven in Implementing Sign-in op Android om ervoor te zorgen dat gebruikers worden ingelogd bij hun Google-accounts. Dit houdt in dat je knoppen gebruikt om in en uit te loggen, dus voeg deze als volgt toe aan de lay-out van je app:
Wijzig uw hoofdactiviteit om uit te breiden BaseGameActivity
. Zo kunnen we bepaalde delen van het inlogproces voor uw gebruikers automatiseren. Maak ook de Activiteit
klikken op klassengreep:
public class MainActivity breidt BaseGameActivity implementeert View.OnClickListener uit
U heeft de volgende invoer nodig:
import com.google.android.gms.games.Games; import com.google.example.games.basegameutils.BaseGameActivity;
Haal nu verwijzingen naar de knoppen op onCreate
:
findViewById (R.id.sign_in_button) .setOnClickListener (deze); findViewById (R.id.sign_out_button) .setOnClickListener (deze);
We reageren op knoptaps in bij klikken
zoals je hieronder kunt zien:
@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);
We gebruiken methoden uit de BaseGameActivity
klas die we uitbreiden om in te loggen (beginUserInitiatedSignIn
en afmelden
), de gebruikersinterface dienovereenkomstig bijwerken. Wanneer de app wordt gestart, probeert deze automatisch in te loggen bij de gebruiker, maar ze kunnen ook de knoppen gebruiken om in en uit te loggen.
We moeten nu twee callbacks aan onze toevoegen Activiteit
klasse:
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);
U zou indien nodig meer code hieraan kunnen toevoegen. Je kunt er ook voor kiezen om de voortgang van de speler op te slaan, zelfs als ze niet zijn ingelogd, maar dit is afhankelijk van je spel. In de voorbeeldtoepassing nemen we de eenvoudige benadering om te controleren of we een verbinding hebben met Google-services voordat we met de prestatie proberen te werken.
Voordat u begint met het coderen van de details van het gebruik van prestaties in uw app, moet u er gegevens aan toevoegen. Begin met het openen of creëren van uw res / waarden / ids.xml bestanden opslaan en toevoegen voor de app- en prestatie-ID's die u vanuit de ontwikkelaarsconsole hebt gekopieerd:
abcdefghij abcdefghijkl
Werk de inhoud bij volgens uw ID-waarden. Open nu de projecten Manifesteren en voeg het volgende toe binnen het applicatie-element:
We verwijzen naar de app-ID die we hebben toegevoegd aan het ids-bestand en de Play Services-versie. Dit is alles wat je nodig hebt om te beginnen met het coderen met je prestatie.
Het enige wat nu overblijft, is dat je de prestatie ontgrendelt wanneer de spelspeler voldoet aan de vereisten van de prestatie. Natuurlijk zal dit afhangen van het doel van je eigen spel, maar als je het proces wilt uitvoeren met behulp van de voorbeeldapp van deze tutorial, dan kun je de volgende code gebruiken. We beginnen met de hoofdlay-out, die de inlog- en uitlogknoppen bevat die we eerder hebben toegevoegd:
Merk op dat we ook een Prestaties knop naast de knoppen om in en uit te loggen. We zullen die knop later implementeren. We zullen niet al te uitvoerig ingaan op het voorbeeldspel, als je al eerder eenvoudige apps hebt voltooid, zou dit niet al te moeilijk moeten zijn.
Het spel selecteert een willekeurig getal tussen 0 en 9 en de speler kan een nummerknop kiezen om een schatting te maken. De game werkt het tekstveld bij om aan te geven of de gebruiker al dan niet correct heeft geraden. Als een juiste schatting wordt gemaakt, is de prestatie ontgrendeld.
Schakel terug naar uw Activiteit
class en voeg de volgende instantievariabelen toe:
privé Knop knop0, knop1, knop2, knop3, knop4, knop5, knop6, knop7, knop8, knop9, knopAgain; privé int-nummer; privé Willekeurige rand; privé TextView-info;
Deze vertegenwoordigen de knoppen, het nummer, de generator voor willekeurige getallen en het tekstveld. Voeg het volgende toe aan uw onCreate
methode:
findViewById (R.id.show_achievements) .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);
Voeg nu een methode toe genaamd disableNumbers
, die we zullen noemen wanneer de gebruiker een nummer kiest:
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"));
Implementeer een andere methode, enableNumbers
, die wordt aangeroepen wanneer de gebruiker ervoor heeft gekozen om opnieuw te spelen:
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"));
Voeg nu de methode toe die we hebben ingesteld als bij klikken
kenmerk voor de knoppen:
public void btnPressed (View v) int btn = Integer.parseInt (v.getTag (). toString ()); if (btn<0) //again btn number=rand.nextInt(10); enableNumbers(); info.setText("Guess the number!"); else //number button if(btn==number) info.setText("Yes! It was "+number); if(getApiClient().isConnected()) Games.Achievements.unlock(getApiClient(), getString(R.string.correct_guess_achievement)); else info.setText("No! It was "+number); disableNumbers();
We noemen het Games Prestaties hulpprogramma om de prestatie te ontgrendelen als de gissing van de gebruiker correct was, eerst controleren of we een verbinding hebben. We verwijzen naar de prestatie met behulp van de tekenreeksbron die we hebben gemaakt.
Last but not least, laten we de gebruiker toestaan om hun prestaties voor het spel te bekijken. Dit gebeurt wanneer ze op de. Klikken Prestaties knop die we hebben toegevoegd. Breid de code uit in de bij klikken
methode, een extra toevoegen anders als
:
else if (view.getId () == R.id.show_achievements) startActivityForResult (Games.Achievements.getAchievementsIntent (getApiClient ()), 1);
Wij gebruiken de getAchievementsIntent
methode met een willekeurig geheel getal om de gebruikersprestaties binnen het spel weer te geven. Door op de knop Vorige te drukken, gaat de speler terug naar het spel. Voor meer informatie over de prestatiemethoden, zie de Achievements in Android-pagina in de Handleiding voor ontwikkelaars.
U zou uw app nu moeten kunnen uitvoeren. Wanneer de app wordt uitgevoerd, wordt het gebruikersautorisatie- en inlogproces gestart en wordt de gebruiker gevraagd de benodigde machtigingen te verlenen.
Na het inloggen ziet de gebruiker een bevestiging.
De gebruiker kan ervoor kiezen om uit en weer in te loggen wanneer hij wil. Wanneer de gebruiker een juist nummer selecteert, wordt de prestatie ontgrendeld en wordt deze bovenaan het spelscherm weergegeven.
De speler kan dan gewoon doorgaan. Als u op de knop Prestaties klikt, worden hun prestaties weergegeven. Tik op de knop Terug om de speler terug naar het spel te brengen.
In deze zelfstudie hebben we een praktisch voorbeeld van het gebruik van prestaties in een Android-toepassing onderzocht. De voorbeeldapp die we hebben gebruikt is eenvoudig, maar dezelfde principes zijn van toepassing op elk spel waarmee je werkt. Voeg een nieuwe prestatie toe aan de ontwikkelaarsconsole en implementeer deze in je game om ervoor te zorgen dat je de concepten en processen begrijpt.