Scroll to top

Spanish (Español) translation by CYC (you can also view the original English article)

Con los servicios de juegos de Google Play, puedes crear una variedad de funciones en tus aplicaciones de Android, incluidas las tablas de clasificación, los logros, la jugabilidad multijugador, el almacenamiento en la nube y el inicio de sesión de Google+.

En este tutorial vamos a seguir los pasos que debes seguir para agregar logros a un simple juego de Android. Prepararemos el entorno de desarrollo para utilizar los Servicios de juego de Google Play, definiremos un logro en la Consola de desarrollador e implementaremos la interacción de logro en el juego.

1. Prepara tu IDE

Paso 1

Para utilizar las herramientas de servicios de juegos de Google Play, debemos preparar nuestro IDE. Además de utilizar la biblioteca de Servicios de Google Play, que necesitas para todos los servicios de Google, utilizaremos el recurso BaseGameUtils, que contiene una serie de clases que son particularmente útiles al desarrollar juegos.

Comienza creando una nueva aplicación en tu IDE. El código de muestra de este tutorial contiene un juego simple en el que el usuario tiene que adivinar un número elegido al azar. Puedes usar ese proyecto para comenzar a desarrollar con Google Play Game Services si lo deseas. Crea un nuevo proyecto de Android y elige nombres y configuraciones para él.

Si no estás utilizando la aplicación de muestra en la descarga, es posible que desees implementar tu juego en este punto, teniendo en cuenta para qué vas a utilizar un logro. Para la aplicación de ejemplo, simplemente otorgaremos un logro cuando el usuario elija una respuesta correcta.

Paso 2

En este paso, obtenemos el IDE y nuestro proyecto listos para usar los servicios de Google Play Games y las utilidades. Abre tu Administrador de Android SDK, que puedes encontrar en el menú Ventana en Eclipse. Desplázate hacia abajo hasta que veas la carpeta Extras, amplíala y selecciona Servicios de Google Play y el Repositorio de Google. También puedes necesitar la Plataforma API de Google si planeas probar en el emulador, por lo que también debes seleccionarla. Puedes encontrar este último en los directorios de versiones recientes de la plataforma Android. Instala los paquetes seleccionados, aceptando cualquier licencia según sea necesario.

Paso 3

También debemos incluir un par de recursos en el espacio de trabajo real para que podamos hacer referencia a ellos en la aplicación, comenzando con la Biblioteca de servicios de Google Play. Debes encontrarlo en /extras/google/google_play_services/libproject/google-play-services_lib/ en tu carpeta SDK. Haz una copia de la biblioteca y pégala en otra ubicación en tu computadora.

De vuelta en Eclipse, importa la biblioteca seleccionando Importar > Android > Importar código de Android existente en el espacio de trabajo en el menú Archivo. Busca la ubicación en la que copiaste la biblioteca, selecciona la biblioteca e impórtalo. La biblioteca debe aparecer como un proyecto en tu Eclipse Package Explorer y área de trabajo.

Haz clic con el botón derecho en el proyecto de la biblioteca en Eclipse, selecciona Propiedades y busca la sección de Android. Selecciona un objetivo de compilación de las API de Google y asegúrate de que esté marcado Is Library. La biblioteca ahora debe estar lista para hacer referencia en tu aplicación.

Paso 4

Ahora también consigamos el recurso BaseGameUtils en tu IDE. Descárgalo de la sección Juegos de muestra del portal para desarrolladores de Google. Dado que el código está alojado en GitHub, puedes navegar y acceder a sus guías en GitHub.

Importa el recurso BaseGameUtils en Eclipse utilizando la misma técnica que utilizaste para la Biblioteca de servicios de reproducción seleccionando Importar > Android > Importar código de Android existente en el espacio de trabajo en el menú Archivo. Haz clic con el botón derecho en el proyecto BaseGameUtils en tu Package Explorer y asegúrate de que esté marcado Is Library.

Ahora podemos hacer referencia tanto a la Biblioteca de servicios de Google Play como a los recursos de BaseGameUtils en nuestra aplicación.

Paso 5

Selecciona tu aplicación de juego en Eclipse Package Explorer, haz clic con el botón derecho y elige Propiedades como lo hiciste para los recursos importados. En la sección Android, esta vez, haz clic en Agregar en el área Biblioteca. Selecciona la biblioteca de Servicios de Google Play y BaseGameUtils para agregar como bibliotecas a tu proyecto.

Ese es el IDE configurado para desarrollar con Games Services.

2. Prepara tu juego en la consola de desarrollo

Paso 1

Para utilizar los logros en tu juego, debes agregar el juego a Google Play Developer Console. Inicia sesión en Developer Console, haz clic en el botón Servicios de juegos a la izquierda de la consola y selecciona Configurar servicios de juegos de Google Play si no los has usado anteriormente.

Haz clic para agregar un nuevo juego, selecciona No uso API de Google en mi juego, y elige un nombre y categoría para tu juego. Haz clic en Continuar para ir al siguiente paso.

En la sección Detalles del juego, todo lo que necesitas agregar para probar tu aplicación es el título de tu juego.

Paso 2

Haz clic en Aplicaciones vinculadas a la izquierda de tu lista de juegos en Developer Console. Selecciona Android de la lista de aplicaciones vinculadas.

Ingresa los detalles de tu aplicación, incluido el nombre del paquete que elegiste cuando lo creaste.

Haz clic en Guardar y continúa en la parte superior y elige Autorizar tu aplicación ahora. Se te pedirá que ingreses la información de marca. Todo lo que necesitas por el momento es el nombre de tu aplicación. En la pantalla Configuración de Client ID, selecciona Aplicación instalada como tipo, Android como el tipo de aplicación instalada e ingresa el nombre de tu paquete.

Luego debes generar una huella digital de certificado de firma para autorización. Necesitarás ejecutar la utilidad keytool en tu computadora para hacer esto. Abre una terminal o símbolo del sistema y usa el siguiente comando, pero asegúrate de modificarlo para adaptarlo a la ubicación si es necesario. Puedes usar el certificado de depuración mientras pruebas.

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

La herramienta de claves debe escribir la huella digital del certificado. Selecciona y copia lo que aparece después de SHA1 y pégalo en Developer Console debajo de Firmar huella digital del certificado. Haz clic en Crear cliente y copia el ID de la aplicación que ves en el listado de tu juego en Developer Console, que debe mostrarse junto al nombre del juego en la parte superior de la página. Guarda el ID de la aplicación para usarla más adelante en tu aplicación.

3. Crea un logro

Paso 1

Aún en Developer Console, haz clic en el botón Achievements a la izquierda de la lista de juegos y haz clic en Agregar logro.

Antes de continuar, es posible que desees consultar la página de logros en la Guía del Desarrollador para asegurarte de comprender el concepto de logro en Google Play Games. Ingresa un nombre, una descripción y un ícono para yu logro y elige un estado, puntos y un orden de la lista. Para nuestro juego de ejemplo, usamos Adivinado correctamente como nombre, Escogido un número correcto como la descripción, y una imagen de estrella simple como el ícono. Haz clic en Guardar para guardar el logro.

Copia la identificación del logro, que puedes ver junto al logro en Developer Console.

Paso 2

Si navegas a la sección Pruebas de tu juego, puedes establecer direcciones de correo electrónico para las personas que tendrán acceso de prueba al juego. De forma predeterminada, Developer Console insertará tu propio correo electrónico de la cuenta de Google, por lo que deberías poder utilizarlo de inmediato. Agrega cualquier otro correo electrónico de prueba que necesites, luego puedes cerrar sesión en tu cuenta de Google.

4. Prepara tu juego para acceder a los servicios de juegos

Paso 1

En Eclipse, podemos preparar la aplicación para acceder a los Servicios de juegos. Vamos a utilizar la técnica descrita en la Implementación de inicio de sesión en Android para gestionar el ingreso y la salida de usuarios de sus cuentas de Google. Esto implicará el uso de botones para iniciar o cerrar sesión, así que agrégalos al diseño de tu aplicación de la siguiente manera:

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" />

Paso 2

Altera tu actividad principal para extender BaseGameActivity. Esto nos permitirá automatizar ciertas partes del proceso de inicio de sesión para tus usuarios. También haz que la clase Activity maneje los clics:

1
public class MainActivity extends BaseGameActivity implements View.OnClickListener

Necesitarás las siguientes importaciones:

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

Ahora recupera las referencias a los botones en onCreate:

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

Responderemos a los toques de botón en onClick como puedes ver a continuación:

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
}

Usamos métodos de la clase BaseGameActivity que estamos ampliando para manejar el inicio de sesión (beginUserInitiatedSignIn y signOut), actualizando la interfaz de usuario en consecuencia. Cuando se inicia la aplicación, intentará iniciar sesión automáticamente en el usuario, pero también podrán usar los botones para iniciar o cerrar sesión.

Ahora tenemos que agregar dos devoluciones de llamada a nuestra clase Activity:

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
}

Puedes agregar más código a estos si es necesario. También puedes optar por guardar el progreso del jugador, incluso si no han iniciado sesión, pero esto depende de tu juego. En la aplicación de muestra, tomamos el enfoque simple de verificar que tenemos una conexión con los Servicios de Google antes de intentar trabajar con el logro.

Paso 3

Antes de comenzar a codificar los detalles del uso de los logros en tu aplicación, debes agregarle algunos datos. Comienza abriendo o creando tu archivo res/values/ids.xml y agrega recursos de cadena para la aplicación y los ID de logros que copiaste de Developer Console:

1
<string name="app_id">abcdefghij</string>
2
<string name="correct_guess_achievement">abcdefghijkl</string>

Actualiza el contenido para reflejar sus valores de ID. Ahora abre el Manifiesto del proyecto y agrega lo siguiente dentro del elemento de la aplicación:

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" />

Hacemos referencia al ID de la aplicación que agregamos al archivo ids y la versión de Play Services. Esto es todo lo que necesitas para comenzar a codificar con tus logros.

5. Implementa tu logro

Paso 1

Todo lo que queda ahora es desbloquear el logro cuando el jugador cumple con los requisitos del logro. Naturalmente, esto dependerá del propósito de tu propio juego, pero si deseas llevar a cabo el proceso utilizando la aplicación de ejemplo de este tutorial, puedes usar el siguiente código. Comenzamos con el diseño principal, que incluye los botones de inicio y finalización que agregamos anteriormente:

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
34
 <!-- show achievements -->
35
36
 <Button
37
  android:id="@+id/show_achievements"
38
  android:layout_width="wrap_content"
39
  android:layout_height="wrap_content"
40
  android:text="Achievements" />
41
  
42
 </LinearLayout>
43
44
 <RelativeLayout
45
  android:layout_width="fill_parent"
46
  android:layout_height="wrap_content"
47
  android:layout_below="@id/sign_in_buttons" >
48
49
  <TextView
50
   android:id="@+id/guess_text"
51
   android:layout_width="fill_parent"
52
   android:layout_height="wrap_content"
53
   android:layout_centerHorizontal="true"
54
   android:text="Guess the number!"
55
   android:textSize="30sp"
56
   android:textStyle="bold" />
57
58
  <LinearLayout
59
   android:layout_width="fill_parent"
60
   android:layout_height="wrap_content"
61
   android:layout_below="@id/guess_text"
62
   android:orientation="vertical" >
63
64
   <LinearLayout
65
    android:layout_width="fill_parent"
66
    android:layout_height="wrap_content"
67
    android:orientation="horizontal" >
68
69
    <Button
70
     android:id="@+id/btn7"
71
     android:layout_width="0dp"
72
     android:layout_height="match_parent"
73
     android:layout_margin="1dp"
74
     android:layout_weight="1"
75
     android:background="#ff000033"
76
     android:gravity="center"
77
     android:onClick="btnPressed"
78
     android:padding="5dp"
79
     android:tag="7"
80
     android:text="7"
81
     android:textColor="#ffffffff"
82
     android:textSize="30sp"
83
     android:textStyle="bold" />
84
85
    <Button
86
     android:id="@+id/btn8"
87
     android:layout_width="0dp"
88
     android:layout_height="match_parent"
89
     android:layout_margin="1dp"
90
     android:layout_weight="1"
91
     android:background="#ff000033"
92
     android:gravity="center"
93
     android:onClick="btnPressed"
94
     android:padding="5dp"
95
     android:tag="8"
96
     android:text="8"
97
     android:textColor="#ffffffff"
98
     android:textSize="30sp"
99
     android:textStyle="bold" />
100
101
    <Button
102
     android:id="@+id/btn9"
103
     android:layout_width="0dp"
104
     android:layout_height="match_parent"
105
     android:layout_margin="1dp"
106
     android:layout_weight="1"
107
     android:background="#ff000033"
108
     android:gravity="center"
109
     android:onClick="btnPressed"
110
     android:padding="5dp"
111
     android:tag="9"
112
     android:text="9"
113
     android:textColor="#ffffffff"
114
     android:textSize="30sp"
115
     android:textStyle="bold" />
116
   </LinearLayout>
117
118
   <LinearLayout
119
    android:layout_width="fill_parent"
120
    android:layout_height="wrap_content"
121
    android:layout_weight="1"
122
    android:orientation="horizontal" >
123
124
    <Button
125
     android:id="@+id/btn4"
126
     android:layout_width="0dp"
127
     android:layout_height="match_parent"
128
     android:layout_margin="1dp"
129
     android:layout_weight="1"
130
     android:background="#ff000033"
131
     android:gravity="center"
132
     android:onClick="btnPressed"
133
     android:padding="5dp"
134
     android:tag="4"
135
     android:text="4"
136
     android:textColor="#ffffffff"
137
     android:textSize="30sp"
138
     android:textStyle="bold" />
139
140
    <Button
141
     android:id="@+id/btn5"
142
     android:layout_width="0dp"
143
     android:layout_height="match_parent"
144
     android:layout_margin="1dp"
145
     android:layout_weight="1"
146
     android:background="#ff000033"
147
     android:gravity="center"
148
     android:onClick="btnPressed"
149
     android:padding="5dp"
150
     android:tag="5"
151
     android:text="5"
152
     android:textColor="#ffffffff"
153
     android:textSize="30sp"
154
     android:textStyle="bold" />
155
156
    <Button
157
     android:id="@+id/btn6"
158
     android:layout_width="0dp"
159
     android:layout_height="match_parent"
160
     android:layout_margin="1dp"
161
     android:layout_weight="1"
162
     android:background="#ff000033"
163
     android:gravity="center"
164
     android:onClick="btnPressed"
165
     android:padding="5dp"
166
     android:tag="6"
167
     android:text="6"
168
     android:textColor="#ffffffff"
169
     android:textSize="30sp"
170
     android:textStyle="bold" />
171
     
172
   </LinearLayout>
173
174
   <LinearLayout
175
    android:layout_width="fill_parent"
176
    android:layout_height="wrap_content"
177
    android:layout_weight="1"
178
    android:orientation="horizontal" >
179
180
    <Button
181
     android:id="@+id/btn1"
182
     android:layout_width="0dp"
183
     android:layout_height="match_parent"
184
     android:layout_margin="1dp"
185
     android:layout_weight="1"
186
     android:background="#ff000033"
187
     android:gravity="center"
188
     android:onClick="btnPressed"
189
     android:padding="5dp"
190
     android:tag="1"
191
     android:text="1"
192
     android:textColor="#ffffffff"
193
     android:textSize="30sp"
194
     android:textStyle="bold" />
195
196
    <Button
197
     android:id="@+id/btn2"
198
     android:layout_width="0dp"
199
     android:layout_height="match_parent"
200
     android:layout_margin="1dp"
201
     android:layout_weight="1"
202
     android:background="#ff000033"
203
     android:gravity="center"
204
     android:onClick="btnPressed"
205
     android:padding="5dp"
206
     android:tag="2"
207
     android:text="2"
208
     android:textColor="#ffffffff"
209
     android:textSize="30sp"
210
     android:textStyle="bold" />
211
212
    <Button
213
     android:id="@+id/btn3"
214
     android:layout_width="0dp"
215
     android:layout_height="match_parent"
216
     android:layout_margin="1dp"
217
     android:layout_weight="1"
218
     android:background="#ff000033"
219
     android:gravity="center"
220
     android:onClick="btnPressed"
221
     android:padding="5dp"
222
     android:tag="3"
223
     android:text="3"
224
     android:textColor="#ffffffff"
225
     android:textSize="30sp"
226
     android:textStyle="bold" />
227
     
228
   </LinearLayout>
229
230
   <LinearLayout
231
    android:layout_width="fill_parent"
232
    android:layout_height="wrap_content"
233
    android:layout_weight="1"
234
    android:orientation="horizontal" >
235
236
    <Button
237
     android:id="@+id/btn0"
238
     android:layout_width="0dp"
239
     android:layout_height="match_parent"
240
     android:layout_margin="1dp"
241
     android:layout_weight="1"
242
     android:background="#ff000033"
243
     android:gravity="center"
244
     android:onClick="btnPressed"
245
     android:padding="5dp"
246
     android:tag="0"
247
     android:text="0"
248
     android:textColor="#ffffffff"
249
     android:textSize="30sp"
250
     android:textStyle="bold" />
251
252
    <Button
253
     android:id="@+id/btnAgain"
254
     android:layout_width="0dp"
255
     android:layout_height="match_parent"
256
     android:layout_margin="1dp"
257
     android:layout_weight="1"
258
     android:background="#ffffff00"
259
     android:enabled="false"
260
     android:gravity="center"
261
     android:onClick="btnPressed"
262
     android:padding="5dp"
263
     android:tag="-1"
264
     android:text="Again"
265
     android:textColor="#ffffff00"
266
     android:textSize="30sp"
267
     android:textStyle="bold" />
268
     
269
   </LinearLayout>
270
  </LinearLayout>
271
 </RelativeLayout>
272
273
</RelativeLayout>

Ten en cuenta que también incluimos un botón de Logros junto a los botones para iniciar y cerrar sesión. Implementaremos ese botón más tarde. No vamos a entrar en demasiados detalles sobre el juego de muestra, si ya has completado incluso aplicaciones simples, esto no debería ser demasiado difícil.

El juego selecciona un número aleatorio entre 0 y 9, y el jugador puede elegir un botón numérico para hacer una suposición. El juego actualiza el campo de texto para reflejar si el usuario adivinó correctamente o no. Si se hace una conjetura correcta, el logro se desbloquea.

Paso 2

Regresa a tu clase Activity y agrega las siguientes variables de instancia:

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;

Estos representan los botones, el número, el generador de números aleatorios y el campo de texto. Agrega lo siguiente a tu método onCreate:

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

Ahora agrega un método llamado disableNumbers, que llamaremos cuando el usuario haga una selección numérica:

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
}

Implementa otro método, enableNumbers, que se invoca cuando el usuario ha elegido jugar de nuevo:

1
private void enableNumbers(){
2
    button0.setEnabled(true); button0.setTextColor(Color.WHITE);
3
	button1.setEnabled(true); button1.setTextColor(Color.WHITE);
4
	button2.setEnabled(true); button2.setTextColor(Color.WHITE);
5
	button3.setEnabled(true); button3.setTextColor(Color.WHITE);
6
	button4.setEnabled(true); button4.setTextColor(Color.WHITE);
7
	button5.setEnabled(true); button5.setTextColor(Color.WHITE);
8
	button6.setEnabled(true); button6.setTextColor(Color.WHITE);
9
	button7.setEnabled(true); button7.setTextColor(Color.WHITE);
10
	button8.setEnabled(true); button8.setTextColor(Color.WHITE);
11
	button9.setEnabled(true); button9.setTextColor(Color.WHITE);
12
	buttonAgain.setEnabled(false); buttonAgain.setTextColor(Color.parseColor("#ffffff00"));
13
}

Ahora agrega el método que configuramos como atributo onClick para los botones:

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

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

11
		if(btn==number){
12
			info.setText("Yes! It was "+number);
13
			if(getApiClient().isConnected())
14
				Games.Achievements.unlock(getApiClient(), 
15
						getString(R.string.correct_guess_achievement));
16
		}
17
		else{
18
			info.setText("No! It was "+number);
19
		}
20
		disableNumbers();
21
	}
22
}

Llamamos a la utilidad Games Achievements para desbloquear el logro si la conjetura del usuario fue correcta, primero verificando que tenemos una conexión. Nos referimos al logro utilizando el recurso de cadena que creamos.

Por último, permitamos al usuario ver sus logros para el juego. Esto sucederá cuando hagan clic en el botón Logros que agregamos. Extiende el código en el método onClick, agregando un else-if adicional:

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

Usamos el método getAchievementsIntent con un número entero arbitrario para mostrar los logros del usuario dentro del juego. Al presionar el botón Atrás, el jugador volverá al juego. Para obtener más información sobre los métodos de logros, consulta la página Logros en Android en la Guía del desarrollador.

Paso 3

Deberías poder ejecutar tu aplicación en este punto. Cuando la aplicación se ejecuta, iniciará la autorización del usuario y el proceso de inicio de sesión, lo que le pedirá al usuario que otorgue los permisos necesarios.

Una vez que haya iniciado sesión, el usuario verá una confirmación.

El usuario puede elegir cerrar la sesión y volver a ingresar cuando lo desee. Cuando el usuario selecciona un número correcto, el logro se desbloquea y se muestra en la parte superior de la pantalla del juego.

El jugador puede continuar de forma normal. Al hacer clic en el botón Logros, se mostrarán sus logros. Al tocar el botón Atrás, el jugador volverá al juego.

Conclusión

En este tutorial, hemos explorado un ejemplo práctico del uso de los logros en una aplicación de Android. La aplicación de ejemplo que utilizamos es simple, pero los mismos principios se aplican a cualquier juego con el que estés trabajando. Intenta agregar otro logro a Developer Console e impleméntalo en tu juego para asegurarte de que comprendes los conceptos y procesos.