1. Code
  2. Mobile Development
  3. Android Development

Google Play Spiele-Dienste: Bestenlisten

Die Google Play Spiele-Dienste bieten die Möglichkeit, Ihren Spielen über die Google+ Konten der Nutzer soziale Funktionen hinzuzufügen. In diesem Tutorial zeigen wir Ihnen, wie Sie einer Android-App Bestenlisten hinzufügen, Benutzerbewertungen einreichen und die aktuelle Rangliste innerhalb des Spiels präsentieren können.
Scroll to top

German (Deutsch) translation by Valentina (you can also view the original English article)

Die Google Play Spiele-Dienste bieten die Möglichkeit, Ihren Spielen über die Google+ Konten der Nutzer soziale Funktionen hinzuzufügen. In diesem Tutorial zeigen wir Ihnen, wie Sie einer Android-App Bestenlisten hinzufügen, Benutzerbewertungen einreichen und die aktuelle Rangliste innerhalb des Spiels präsentieren können. 

Das Verwenden von Bestenlisten umfasst das Vorbereiten Ihrer IDE, das Konfigurieren der Bestenliste in der Google Play Entwickler-Konsole und das Hinzufügen von Funktionen zu Ihrer App. 

Wenn Sie das kürzlich durchgeführte Tutorial zum Hinzufügen von Erfolgen zu Android-Apps abgeschlossen haben, können Sie einige der Schritte in diesem Schritt überspringen. Der angehängte Quellcode enthält dieselbe App, die wir für das Tutorial für Erfolge verwendet haben, wobei sowohl Funktionen für Erfolge als auch Bestenlisten hinzugefügt wurden.

1. Bereiten Sie Ihre IDE vor

Schritt 1

Um Google Play Dienste nutzen zu können, müssen bestimmte Dienstprogramme in Ihrer Entwicklungsumgebung installiert sein. Da wir Game Services verwenden, werden wir außerdem die BaseGameUtils-Bibliothek installieren, wodurch sich der Codierungsaufwand für die Implementierung von Funktionen wie der Google+ Anmeldung verringert.

Erstellen Sie zunächst eine neue App oder verwenden Sie eine vorhandene. Wenn Sie dem Leistungs-Tutorial gefolgt sind, können Sie die App verwenden, die Sie für dieses Tutorial erstellt haben. Wenn Sie Ihr eigenes Spiel erstellen, entscheiden Sie, wofür Sie Bestenlisten verwenden möchten und wann Sie eine Benutzerbewertung einreichen möchten. Jede Rangliste wird eine Zahl sein. Sie können die Rangliste so konfigurieren, dass niedrigere oder höhere Zahlenwerte in Bezug auf die Position in der Rangliste als besser angesehen werden. Dies hängt jedoch natürlich vom Zweck Ihres Spiels ab.

Der Code im Download-Ordner enthält ein einfaches Spiel, in dem der Benutzer eine Zahl errät. Wir werden die Anzahl der Vermutungen, die erforderlich sind, um die richtige Antwort zu erhalten, als Ranglistenpunktzahl verwenden. In diesem Fall sind weniger Vermutungen besser, sodass die Rangliste zuerst die niedrigsten Punktzahlen anzeigt. Der Einfachheit halber begrenzen wir die Anzahl der Vermutungen, die ein Benutzer treffen kann. Dies ist ein einfaches Beispiel, um das Konzept und die Funktionalität der Bestenliste zu demonstrieren. Ihre eigenen Spiele werden wahrscheinlich komplexer sein.

Schritt 2

Bereiten wir Eclipse für die Entwicklung mit Google Play Spiel-Dienste vor. Öffnen Sie den Android SDK Manager und scrollen Sie zum Ordner Extras. Erweitern Sie den Ordner und wählen Sie Google Play Dienste sowie das Google Repository aus. Installieren Sie die Google APIs-Plattform auch von einer der neuesten Android-Versionen, wenn Sie auf dem Emulator testen möchten. Installieren Sie die ausgewählten Pakete.

Schritt 3

Eclipse muss auch auf einige zusätzliche Ressourcen im Arbeitsbereich verweisen. Navigieren Sie auf Ihrem Computer unter extras/google/google_play_services/libproject/google-play-services_lib/ zum Speicherort der Google Play Dienste-Bibliothek, die sich im Android SDK-Ordner befinden sollte. Kopieren Sie die Bibliothek und fügen Sie sie an einer anderen Stelle auf Ihrem Computer ein.

Wir brauchen jetzt einen Verweis auf diese Kopie in Eclipse. Wählen Sie im Menü Datei die Option Importieren > Android > Vorhandenen Android-Code in den Arbeitsbereich importieren. Wählen Sie den Speicherort der von Ihnen erstellten Kopie. Die importierte Bibliothek sollte jetzt als neues Projekt in Eclipse angezeigt werden. Klicken Sie mit der rechten Maustaste darauf und wählen Sie Eigenschaften. Wählen Sie im Android-Bereich ein Build-Ziel für Google APIs aus und aktivieren Sie das Kontrollkästchen Ist Bibliothek.

Schritt 4

Das Importieren der BaseGameUtils-Ressource unterscheidet sich geringfügig. Die Bibliothek wird auf GitHub gehostet. Sie finden es im Bereich Downloads unter Beispielspiele. Laden Sie die Bibliothek herunter und speichern Sie sie auf Ihrem Computer.

Wählen Sie wie bei der Google Play Services-Bibliothek im Menü Datei die Option Importieren > Android > Vorhandenen Android-Code in den Arbeitsbereich importieren, um die BaseGameUtils-Bibliothek in Eclipse zu integrieren. Klicken Sie mit der rechten Maustaste, um zu den neuen Projekteigenschaften zu navigieren und sicherzustellen, dass das Projekt als Bibliothek markiert ist, indem Sie Ist Bibliothek aktivieren.

Schritt 5

Wir können die App jetzt dazu bringen, auf diese beiden Ressourcen im Arbeitsbereich zu verweisen. Klicken Sie im Paket-Explorer mit der rechten Maustaste auf Ihre App und wählen Sie Eigenschaften. Navigieren Sie zum Android-Bereich und wählen Sie im Bereich Bibliothek die Option Hinzufügen. Wählen Sie sowohl die Google Play Dienste-Bibliothek als auch BaseGameUtils aus und fügen Sie sie Ihrer App hinzu.

2. Bereiten Sie Ihr Spiel in der Entwicklerkonsole vor

Schritt 1

Bevor Sie eine Rangliste erstellen können, muss die App in der Google Play Entwickler-Konsole aufgeführt sein. Melden Sie sich an und klicken Sie links auf die Schaltfläche Spiel-Dienste. Wenn Sie dies bereits im Leistungs-Tutorial für Ihre App getan haben, müssen Sie es nicht erneut ausführen. Sie können zum Erstellen einer Rangliste mit Abschnitt 3 springen.

Klicken Sie auf Google Play-Spiel-Dienste einrichten.

Klicken Sie hier, um ein neues Spiel hinzuzufügen, wählen Sie Ich verwende noch keine Google-APIs in meinem Spiel und wählen Sie einen Namen und eine Kategorie für Ihr Spiel. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Fügen Sie den Titel Ihres Spiels hinzu. Sie können später weitere Details hinzufügen.

Schritt 2

Verknüpfen wir nun die App, damit wir in der App selbst auf diese Liste der Entwicklerkonsolen verweisen können. Klicken Sie links in der Liste auf den Eintrag Verknüpfte Apps und wählen Sie Android.

Geben Sie Ihre App-Informationen einschließlich des Paketnamens ein und stellen Sie sicher, dass diese mit denen übereinstimmen, die Sie in Ihrem Projekt verwenden.

Speichern Sie und klicken Sie auf Jetzt Ihre App autorisieren. Im Moment können Sie einfach den App-Namen hinzufügen, aber Sie können später weitere Details eingeben. Wählen Sie im Bereich Client-ID die Option Installierte Anwendung mit Android als Typ und geben Sie Ihren Paketnamen ein. Sie müssen jetzt das Dienstprogramm keytool verwenden, um ein Signaturzertifikat zu generieren. Sie können den folgenden Befehl in einem Terminal oder einer Eingabeaufforderung in Kombination mit dem Debug-Zertifikat verwenden:

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

Das Terminal oder die Eingabeaufforderung schreibt den Fingerabdruck für das Zertifikat aus. Kopieren Sie das, was Sie nach SHA1 sehen, und fügen Sie es in die Entwicklerkonsole im Textbereich Signaturzertifikat-Fingerabdruck ein.

Wählen Sie Client erstellen und kopieren Sie die ID für die Anwendung, die neben dem Anwendungsnamen in der Entwicklerkonsole aufgeführt ist. Sie fügen Ihrer App die ID zusammen mit der ID für die Bestenliste hinzu, die wir erstellen möchten.

3. Erstellen Sie eine Bestenliste

Schritt 1

Lassen Sie uns jetzt in der Entwicklerkonsole eine neue Bestenliste erstellen. Wählen Sie den Abschnitt Bestenlisten in Ihrer App-Liste aus und klicken Sie auf Bestenliste hinzufügen.

Stellen Sie sicher, dass Sie das Konzept der Bestenlisten unter Android und allgemein in Google Play Game Dienste verstehen. Sie können eine Übersicht auf der Website von Google Play Game Dienste lesen. Mit Bestenlisten können Sie tatsächlich viele verschiedene Dinge tun. Betrachten Sie also, was wir in diesem Tutorial tun, nur als Ausgangspunkt.

Geben Sie die Details für Ihre neue Rangliste ein. Für unseren Beispielcode verwenden wir den Namen "Least Guesses" und wählen im Abschnitt "Bestellen" die Option "Kleiner ist besser".

Fügen Sie ein Symbol hinzu, wenn Sie möchten. Wenn Sie dies nicht tun, wird ein Standardbild verwendet. Speichern Sie Ihre neue Rangliste und kopieren Sie ihre ID.

Schritt 2

Im Abschnitt Testen für Ihre App in der Entwicklerkonsole können Sie Konten hinzufügen, denen Zugriff zum Testen des Spiels gewährt wird. Standardmäßig wird dort Ihre eigene Google-Konto-E-Mail-Adresse angezeigt, sodass Sie sie zum Testen Ihrer App verwenden können sollten.

4. Vorbereiten Ihres Spiels für den Zugriff auf Spieledienste

Schritt 1

Es ist Zeit, die App für den Zugriff auf die Bestenliste in Eclipse vorzubereiten. Wenn Sie das Tutorial für Erfolge abgeschlossen haben, können Sie einen Teil dieses Abschnitts überspringen. Fügen wir zunächst die IDs für die App und die Bestenliste hinzu. Öffnen oder erstellen Sie eine Ressourcendatei res/values/ids.xml. Verwenden Sie die folgende Syntax, um die IDs einzugeben, die Sie für die App und die neue Bestenliste kopiert haben, als Sie sie in der Entwicklerkonsole erstellt haben:

1
<string name="app_id">1234567890</string>
2
<string name="number_guesses_leaderboard">abcdefg1234567</string>

Speichern Sie die Datei und öffnen Sie das Manifest des Projekts. Fügen Sie dem application-Element Folgendes hinzu:

1
<meta-data
2
 android:name="com.google.android.gms.games.APP_ID"
3
 android:value="@string/app_id" />
4
<meta-data
5
 android:name="com.google.android.gms.version"
6
 android:value="@integer/google_play_services_version" />

Die App ist jetzt so eingerichtet, dass sie mit den Einträgen verknüpft ist, die wir in der Entwicklerkonsole hinzugefügt haben.

Schritt 2

Wenn Sie Google Dienste in Ihren Android-Apps verwenden, müssen sich Ihre Nutzer in ihren Google-Konten anmelden. Sie können verschiedene Ansätze wählen, um dies zu implementieren. Wir werden jedoch Teile dieses Prozesses automatisieren, indem wir die BaseGameActivity-Klasse zusammen mit Standardschaltflächen zum An- und Abmelden verwenden. Wenn die Aktivität startet, versucht die App außerdem, den Benutzer sofort anzumelden.

Öffnen Sie die Hauptlayoutdatei Ihrer App und fügen Sie Schaltflächen zum An- und Abmelden hinzu:

1
<!-- sign-in button -->
2
3
<com.google.android.gms.common.SignInButton
4
 android:id="@+id/sign_in_button"
5
 android:layout_width="wrap_content"
6
 android:layout_height="wrap_content" />
7
8
<!-- sign-out button -->
9
10
<Button
11
 android:id="@+id/sign_out_button"
12
 android:layout_width="wrap_content"
13
 android:layout_height="wrap_content"
14
 android:text="Sign Out"
15
 android:visibility="gone" />

Schritt 3

Fügen Sie diese Importe Ihrer Haupt-Aktivity-Klasse hinzu:

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

Lassen Sie die Activity-Klasse die BaseGameActivity-Klasse erweitern und auf Klicks warten:

1
public class MainActivity extends BaseGameActivity implements View.OnClickListener

Bereiten Sie sich darauf vor, auf Klicks auf die Anmelde-/Abmeldeschaltflächen in onCreate zu reagieren:

1
findViewById(R.id.sign_in_button).setOnClickListener(this);
2
findViewById(R.id.sign_out_button).setOnClickListener(this); 

Fügen Sie nun einer onClick-Methode in der Klasse die folgenden Standardmethoden hinzu:

1
@Override
2
public void onClick(View view) {
3
    if (view.getId() == R.id.sign_in_button) {
4
		beginUserInitiatedSignIn();
5
	}
6
	else if (view.getId() == R.id.sign_out_button) {
7
		signOut();
8
		findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
9
		findViewById(R.id.sign_out_button).setVisibility(View.GONE);
10
	}
11
}

Die Methoden, die wir hier aufrufen, werden von der BaseGameActivity-Klasse bereitgestellt, von der unsere Activity-Klasse erbt, sodass wir die Details nicht manuell verarbeiten müssen. Schließlich fügen wir einige Standardrückrufe hinzu:

1
public void onSignInSucceeded() {
2
    findViewById(R.id.sign_in_button).setVisibility(View.GONE);
3
	findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);
4
}
5
6
@Override
7
public void onSignInFailed() {
8
	findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
9
	findViewById(R.id.sign_out_button).setVisibility(View.GONE);
10
}

Wenn wir die Leaderboard-Funktionalität aufrufen, überprüfen wir zunächst, ob die App eine Verbindung zu Google Dienste hat. Alternativ können Sie diesen Methoden Code hinzufügen, um die Kenntnis Ihrer App darüber zu verwalten, ob Spiel-Dienste aufgerufen werden können. 

5. Implementieren Sie Ihre Bestenliste

Schritt 1

Jetzt können wir die App die Bestenliste verwenden lassen. Der Code in der Beispiel-App verwendet das folgende Layout. Ich werde nicht näher auf das Layout eingehen, da Ihre eigenen Apps ein anderes Layout haben.

1
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
2
    xmlns:tools="http://schemas.android.com/tools"
3
	android:layout_width="match_parent"
4
	android:layout_height="match_parent"
5
	android:paddingBottom="@dimen/activity_vertical_margin"
6
	android:paddingLeft="@dimen/activity_horizontal_margin"
7
	android:paddingRight="@dimen/activity_horizontal_margin"
8
	android:paddingTop="@dimen/activity_vertical_margin"
9
	tools:context="com.example.fungame.MainActivity" >
10
11
	<LinearLayout
12
		android:id="@+id/sign_in_buttons"
13
		android:layout_width="fill_parent"
14
		android:layout_height="wrap_content"
15
		android:layout_alignParentTop="true"
16
		android:orientation="horizontal" >
17
18
		<!-- sign-in button -->
19
20
		<com.google.android.gms.common.SignInButton
21
			android:id="@+id/sign_in_button"
22
			android:layout_width="wrap_content"
23
			android:layout_height="wrap_content" />
24
25
		<!-- sign-out button -->
26
27
		<Button
28
			android:id="@+id/sign_out_button"
29
			android:layout_width="wrap_content"
30
			android:layout_height="wrap_content"
31
			android:text="Sign Out"
32
			android:visibility="gone" />
33
	</LinearLayout>
34
35
	<RelativeLayout
36
		android:id="@+id/gameArea"
37
		android:layout_width="fill_parent"
38
		android:layout_height="wrap_content"
39
		android:layout_below="@id/sign_in_buttons" >
40
41
		<TextView
42
			android:id="@+id/guess_text"
43
			android:layout_width="fill_parent"
44
			android:layout_height="wrap_content"
45
			android:layout_centerHorizontal="true"
46
			android:text="Guess the number!"
47
			android:textSize="30sp"
48
			android:textStyle="bold" />
49
50
		<LinearLayout
51
			android:layout_width="fill_parent"
52
			android:layout_height="wrap_content"
53
			android:layout_below="@id/guess_text"
54
			android:orientation="vertical" >
55
56
			<LinearLayout
57
				android:layout_width="fill_parent"
58
				android:layout_height="wrap_content"
59
				android:orientation="horizontal" >
60
61
				<Button
62
					android:id="@+id/btn7"
63
					android:layout_width="0dp"
64
					android:layout_height="match_parent"
65
					android:layout_margin="1dp"
66
					android:layout_weight="1"
67
					android:background="#ff000033"
68
					android:gravity="center"
69
					android:onClick="btnPressed"
70
					android:padding="5dp"
71
					android:tag="7"
72
					android:text="7"
73
					android:textColor="#ffffffff"
74
					android:textSize="30sp"
75
					android:textStyle="bold" />
76
77
				<Button
78
					android:id="@+id/btn8"
79
					android:layout_width="0dp"
80
					android:layout_height="match_parent"
81
					android:layout_margin="1dp"
82
					android:layout_weight="1"
83
					android:background="#ff000033"
84
					android:gravity="center"
85
					android:onClick="btnPressed"
86
					android:padding="5dp"
87
					android:tag="8"
88
					android:text="8"
89
					android:textColor="#ffffffff"
90
					android:textSize="30sp"
91
					android:textStyle="bold" />
92
93
				<Button
94
					android:id="@+id/btn9"
95
					android:layout_width="0dp"
96
					android:layout_height="match_parent"
97
					android:layout_margin="1dp"
98
					android:layout_weight="1"
99
					android:background="#ff000033"
100
					android:gravity="center"
101
					android:onClick="btnPressed"
102
					android:padding="5dp"
103
					android:tag="9"
104
					android:text="9"
105
					android:textColor="#ffffffff"
106
					android:textSize="30sp"
107
					android:textStyle="bold" />
108
			</LinearLayout>
109
110
			<LinearLayout
111
				android:layout_width="fill_parent"
112
				android:layout_height="wrap_content"
113
				android:layout_weight="1"
114
				android:orientation="horizontal" >
115
116
				<Button
117
					android:id="@+id/btn4"
118
					android:layout_width="0dp"
119
					android:layout_height="match_parent"
120
					android:layout_margin="1dp"
121
					android:layout_weight="1"
122
					android:background="#ff000033"
123
					android:gravity="center"
124
					android:onClick="btnPressed"
125
					android:padding="5dp"
126
					android:tag="4"
127
					android:text="4"
128
					android:textColor="#ffffffff"
129
					android:textSize="30sp"
130
					android:textStyle="bold" />
131
132
				<Button
133
					android:id="@+id/btn5"
134
					android:layout_width="0dp"
135
					android:layout_height="match_parent"
136
					android:layout_margin="1dp"
137
					android:layout_weight="1"
138
					android:background="#ff000033"
139
					android:gravity="center"
140
					android:onClick="btnPressed"
141
					android:padding="5dp"
142
					android:tag="5"
143
					android:text="5"
144
					android:textColor="#ffffffff"
145
					android:textSize="30sp"
146
					android:textStyle="bold" />
147
148
				<Button
149
					android:id="@+id/btn6"
150
					android:layout_width="0dp"
151
					android:layout_height="match_parent"
152
					android:layout_margin="1dp"
153
					android:layout_weight="1"
154
					android:background="#ff000033"
155
					android:gravity="center"
156
					android:onClick="btnPressed"
157
					android:padding="5dp"
158
					android:tag="6"
159
					android:text="6"
160
					android:textColor="#ffffffff"
161
					android:textSize="30sp"
162
					android:textStyle="bold" />
163
			</LinearLayout>
164
165
			<LinearLayout
166
				android:layout_width="fill_parent"
167
				android:layout_height="wrap_content"
168
				android:layout_weight="1"
169
				android:orientation="horizontal" >
170
171
				<Button
172
					android:id="@+id/btn1"
173
					android:layout_width="0dp"
174
					android:layout_height="match_parent"
175
					android:layout_margin="1dp"
176
					android:layout_weight="1"
177
					android:background="#ff000033"
178
					android:gravity="center"
179
					android:onClick="btnPressed"
180
					android:padding="5dp"
181
					android:tag="1"
182
					android:text="1"
183
					android:textColor="#ffffffff"
184
					android:textSize="30sp"
185
					android:textStyle="bold" />
186
187
				<Button
188
					android:id="@+id/btn2"
189
					android:layout_width="0dp"
190
					android:layout_height="match_parent"
191
					android:layout_margin="1dp"
192
					android:layout_weight="1"
193
					android:background="#ff000033"
194
					android:gravity="center"
195
					android:onClick="btnPressed"
196
					android:padding="5dp"
197
					android:tag="2"
198
					android:text="2"
199
					android:textColor="#ffffffff"
200
					android:textSize="30sp"
201
					android:textStyle="bold" />
202
203
				<Button
204
					android:id="@+id/btn3"
205
					android:layout_width="0dp"
206
					android:layout_height="match_parent"
207
					android:layout_margin="1dp"
208
					android:layout_weight="1"
209
					android:background="#ff000033"
210
					android:gravity="center"
211
					android:onClick="btnPressed"
212
					android:padding="5dp"
213
					android:tag="3"
214
					android:text="3"
215
					android:textColor="#ffffffff"
216
					android:textSize="30sp"
217
					android:textStyle="bold" />
218
			</LinearLayout>
219
220
			<LinearLayout
221
				android:layout_width="fill_parent"
222
				android:layout_height="wrap_content"
223
				android:layout_weight="1"
224
				android:orientation="horizontal" >
225
226
				<Button
227
					android:id="@+id/btn0"
228
					android:layout_width="0dp"
229
					android:layout_height="match_parent"
230
					android:layout_margin="1dp"
231
					android:layout_weight="1"
232
					android:background="#ff000033"
233
					android:gravity="center"
234
					android:onClick="btnPressed"
235
					android:padding="5dp"
236
					android:tag="0"
237
					android:text="0"
238
					android:textColor="#ffffffff"
239
					android:textSize="30sp"
240
					android:textStyle="bold" />
241
242
				<Button
243
					android:id="@+id/btnAgain"
244
					android:layout_width="0dp"
245
					android:layout_height="match_parent"
246
					android:layout_margin="1dp"
247
					android:layout_weight="1"
248
					android:background="#ffffff00"
249
					android:enabled="false"
250
					android:gravity="center"
251
					android:onClick="btnPressed"
252
					android:padding="5dp"
253
					android:tag="-1"
254
					android:text="Again"
255
					android:textColor="#ffffff00"
256
					android:textSize="30sp"
257
					android:textStyle="bold" />
258
			</LinearLayout>
259
		</LinearLayout>
260
	</RelativeLayout>
261
262
	<LinearLayout
263
		android:id="@+id/play_buttons"
264
		android:layout_width="fill_parent"
265
		android:layout_height="wrap_content"
266
		android:layout_below="@id/gameArea"
267
		android:gravity="center"
268
		android:orientation="horizontal" >
269
270
		<!-- show achievements -->
271
272
		<Button
273
			android:id="@+id/show_achievements"
274
			android:layout_width="wrap_content"
275
			android:layout_height="wrap_content"
276
			android:text="Achievements" />
277
278
		<!-- show leaderboards -->
279
280
		<Button
281
			android:id="@+id/show_leaderboard"
282
			android:layout_width="wrap_content"
283
			android:layout_height="wrap_content"
284
			android:text="Leaderboard" />
285
	</LinearLayout>
286
287
</RelativeLayout>

Wir fügen Schaltflächen hinzu, um sowohl auf Erfolge als auch auf Bestenlisten für die App zuzugreifen. Wenn Sie das Tutorial für Erfolge noch nicht abgeschlossen haben, können Sie die Schaltfläche Erfolge entfernen.

Zurück in der Aktivity-Klasse Ihrer Anwendung verwenden wir die folgenden Instanzvariablen:

1
private Button button0, button1, button2, button3, button4, button5,
2
    button6, button7, button8, button9, buttonAgain;
3
private int number;
4
private Random rand;
5
private TextView info;
6
private int numGuesses=0;

Wenn Sie das Tutorial für Erfolge abgeschlossen haben, werden Sie möglicherweise eine zusätzliche Variable, numGuesses, bemerken, um die Anzahl der Benutzerschätzungen jedes Mal zu verfolgen, wenn sie das Spiel spielen.

Sie benötigen den folgenden zusätzlichen Code in der onCreate-Methode der Activity-Klasse. Wenn Sie die Schaltfläche "Erfolge" nicht verwenden, entfernen Sie die Zeile, die darauf verweist.

1
findViewById(R.id.show_achievements).setOnClickListener(this);
2
findViewById(R.id.show_leaderboard).setOnClickListener(this);
3
4
button0=(Button)findViewById(R.id.btn0);
5
button1=(Button)findViewById(R.id.btn1);
6
button2=(Button)findViewById(R.id.btn2);
7
button3=(Button)findViewById(R.id.btn3);
8
button4=(Button)findViewById(R.id.btn4);
9
button5=(Button)findViewById(R.id.btn5);
10
button6=(Button)findViewById(R.id.btn6);
11
button7=(Button)findViewById(R.id.btn7);
12
button8=(Button)findViewById(R.id.btn8);
13
button9=(Button)findViewById(R.id.btn9);
14
buttonAgain=(Button)findViewById(R.id.btnAgain);
15
16
info=(TextView)findViewById(R.id.guess_text);
17
18
rand=new Random();
19
number=rand.nextInt(10);

Wir verwenden auch die folgenden Methoden, um die Schaltflächen während des Spiels zu deaktivieren und zu aktivieren:

1
private void disableNumbers(){
2
    button0.setEnabled(false); button0.setTextColor(Color.parseColor("#ff000033"));
3
	button1.setEnabled(false); button1.setTextColor(Color.parseColor("#ff000033"));
4
	button2.setEnabled(false); button2.setTextColor(Color.parseColor("#ff000033"));
5
	button3.setEnabled(false); button3.setTextColor(Color.parseColor("#ff000033"));
6
	button4.setEnabled(false); button4.setTextColor(Color.parseColor("#ff000033"));
7
	button5.setEnabled(false); button5.setTextColor(Color.parseColor("#ff000033"));
8
	button6.setEnabled(false); button6.setTextColor(Color.parseColor("#ff000033"));
9
	button7.setEnabled(false); button7.setTextColor(Color.parseColor("#ff000033"));
10
	button8.setEnabled(false); button8.setTextColor(Color.parseColor("#ff000033"));
11
	button9.setEnabled(false); button9.setTextColor(Color.parseColor("#ff000033"));
12
	buttonAgain.setEnabled(true); buttonAgain.setTextColor(Color.parseColor("#ff000033"));
13
}
14
private void enableNumbers(){
15
	button0.setEnabled(true); button0.setTextColor(Color.WHITE);
16
	button1.setEnabled(true); button1.setTextColor(Color.WHITE);
17
	button2.setEnabled(true); button2.setTextColor(Color.WHITE);
18
	button3.setEnabled(true); button3.setTextColor(Color.WHITE);
19
	button4.setEnabled(true); button4.setTextColor(Color.WHITE);
20
	button5.setEnabled(true); button5.setTextColor(Color.WHITE);
21
	button6.setEnabled(true); button6.setTextColor(Color.WHITE);
22
	button7.setEnabled(true); button7.setTextColor(Color.WHITE);
23
	button8.setEnabled(true); button8.setTextColor(Color.WHITE);
24
	button9.setEnabled(true); button9.setTextColor(Color.WHITE);
25
	buttonAgain.setEnabled(false); buttonAgain.setTextColor(Color.parseColor("#ffffff00"));
26
}

Wir benötigen außerdem die folgende Methode, die wir als onClick-Attribut für die Nummernschaltflächen im Layout angegeben haben. Der Spieler tippt auf eine davon, um eine Vermutung anzustellen:

1
public void btnPressed(View v){
2
    int btn = Integer.parseInt(v.getTag().toString());
3
	if(btn<0){
4
		//again btn

5
		numGuesses=0;
6
		number=rand.nextInt(10);
7
		enableNumbers();
8
		info.setText("Set the number!");
9
	}
10
	else{
11
		//number button

12
		numGuesses++;
13
		if(btn==number){
14
			info.setText("Yes! It was "+number);
15
			if(getApiClient().isConnected()){
16
				Games.Achievements.unlock(getApiClient(), 
17
						getString(R.string.correct_guess_achievement));
18
				Games.Leaderboards.submitScore(getApiClient(), 
19
						getString(R.string.number_guesses_leaderboard), 
20
						numGuesses);
21
			}
22
			disableNumbers();
23
		}
24
		else if(numGuesses==5){
25
			info.setText("No! It was "+number);
26
			disableNumbers();
27
		}
28
		else
29
			info.setText("Try again!");
30
	}
31
}

Nehmen Sie sich einen Moment Zeit, um den Code zu überprüfen. Selbst wenn Sie die App im Leistungs-Tutorial abgeschlossen haben, gibt es neben dem zusätzlichen Bestenliste-Code einige Änderungen an der Logik. Wenn der Spieler auf die Schaltfläche Erneut tippt, setzen wir die Variable numGuesses auf 0 zurück. Wenn der Benutzer auf eine Zifferntaste tippt, erhöhen wir numGuesses. Wenn Sie keine Erfolge verwenden, können Sie jeden Code entfernen, der auf Erfolge verweist.

Wir senden die Punktzahl an die Bestenliste, wenn der Benutzer richtig geraten hat. Der Benutzer kann bis zu fünf Vermutungen anstellen. 

Die Schlüsselzeile hier ist submitScore. Wir geben die Anzahl der Vermutungen an, die der Spieler gemacht hat, um die richtige Anzahl zu erhalten. Wenn die Anzahl der Vermutungen geringer ist als ein vorhandener Eintrag für den Benutzer in der Bestenliste, wird dessen Eintrag durch diesen neuen Wert ersetzt. Beachten Sie, dass wir den Zeichenfolgenressourcenwert verwenden, den wir für die Bestenliste definiert haben.

Schritt 2

Bevor wir fertig sind, können die Benutzer die Bestenliste des Spiels anzeigen, indem sie auf die von uns hinzugefügte Schaltfläche "Bestenliste" tippen. Wir haben den folgenden Code in onClick für die Erfolge verwendet:

1
else if (view.getId() == R.id.show_achievements){
2
    startActivityForResult(Games.Achievements.getAchievementsIntent(
3
		getApiClient()), 1);
4
}

Die Präsentation der Bestenliste ist ähnlich:

1
else if(view.getId() == R.id.show_leaderboard){
2
    startActivityForResult(Games.Leaderboards.getLeaderboardIntent(
3
		getApiClient(), getString(R.string.number_guesses_leaderboard)), 
4
		2);
5
}

Auf diese Weise kann der Benutzer die aktuelle Rangliste in der Rangliste anzeigen. Der Integer-Parameter ist beliebig.

Wenn Sie die App ausführen, wird versucht, den Benutzer anzumelden, nach Berechtigungen zu suchen und die Anmeldung zu bestätigen, wenn dies erfolgreich ist:

Dem Benutzer steht es frei, sich jederzeit abzumelden und wieder anzumelden. Wenn er die App verlässt, versucht er, sich automatisch wieder anzumelden, wenn er sie erneut öffnet. Wenn der Benutzer richtig vermutet, wird seine Punktzahl an die Rangliste übermittelt. Durch Drücken der Bestenliste-Taste wird die aktuelle Bestenliste angezeigt:

Von hier aus kann der Nutzer über sein Google-Konto auf soziale Funktionen von Google Services zugreifen. Sie können Ihre Apps so einrichten, dass sie öffentliche und soziale Bestenlisten verwenden. In sozialen Bestenlisten werden Listen von Personen in den Benutzerkreisen angezeigt, die für das Spiel selbst verwaltet werden können. Für eine öffentliche Rangliste muss sich der Benutzer dafür entschieden haben, seine Ergebnisse öffentlich zu teilen.

Abschluss

In diesem Tutorial haben wir grundlegende Bestenliste-Funktionen mit Google Play Spiel-Dienste implementiert. Beachten Sie, dass Sie mit Bestenlisten in Ihren Apps viel mehr tun können. Beispielsweise können Sie Bestenlisten-Daten für bestimmte Zeitskalen anfordern, z. B. täglich, wöchentlich und jederzeit. Wenn eine Rangliste viele Punkte enthält, kann Ihre App nur die besten oder die dem aktuellen Spieler am nächsten liegenden Punkte abrufen. Versuchen Sie, mit einigen dieser Verbesserungen in Ihren eigenen Apps zu experimentieren.