> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introducción a Android Studio y las notificaciones push

> Conecte Android Studio, Google Play Services, Firebase Cloud Messaging y PlayFab para enviar notificaciones push a sus aplicaciones cliente de Android.

## Información general

Este tutorial se ha diseñado para ayudarle a poner en marcha la integración de PlayFab en Android con notificaciones push.

Las notificaciones push requieren configuración en varios sistemas. Antes de empezar, hablemos de cómo funciona la infraestructura. Hay 4 entidades que participan en el proceso:

1. **Google Play Services**
2. **Firebase Cloud Messaging Services** (**FCM**, creado sobre el antiguo **Google Cloud Messaging**).
3. **Servicios de PlayFab**
4. **Aplicaciones cliente**

### 1. Google Play Services

Google Play Services identifica su página en Play Market mediante un nombre de paquete.

Un ejemplo de esto sería: **com.bob.games.matchthree**.

Cuando se registra en Google Play, el nombre del paquete se convierte en un identificador único de la aplicación y sirve para muchos fines, desde la instalación a través de Play Store hasta la prevención de suplantaciones.

### 2. Firebase Cloud Messaging (FCM)

Los servicios de Firebase Cloud Messaging le ofrecen un sistema basado en la nube para enviar, dirigir y entregar sus notificaciones push.

También permite que otros servicios (como PlayFab) envíen notificaciones push en su nombre mediante la clave de servidor de FCM.

### 3. Servicios de PlayFab

Los servicios de PlayFab usan entonces la clave de servidor de FCM para enviar notificaciones push a sus clientes.

### 4. Servicios de cliente

Por último, su aplicación cliente puede recibir notificaciones y procesarlas según sea necesario.

### División en cuatro partes

Como resultado, necesitamos configurar *4 sistemas diferentes*. Para ello, nuestro tutorial se divide en 4 capítulos, que cubren la configuración de cada pieza.

<Note>
  El *orden* en que configure los sistemas es importante.
</Note>

## Requisitos previos

* Debe tener una cuenta de Google.
* Debe tener una cuenta de PlayFab.
* Un icono de notificación generado con el [generador de iconos de notificación](https://romannurik.github.io/AndroidAssetStudio/icons-notification.html) de Android Asset Studio.

## Escenario

En esta sección de nuestro tutorial, ensamblaremos una aplicación denominada Foo PlayFab App. Es una aplicación de Android que tiene las siguientes funciones:

* Inicia sesión en PlayFab mediante un identificador de dispositivo Android.
* Recibe notificaciones push de PlayFab.

Nuestro nombre de paquete será com.foo.playfab.app.

<Info>
  Asegúrese de usar su propio nombre de paquete y título al seguir este tutorial.
</Info>

### Capítulo 1: Configuración de Firebase

Empiece a configurar Firebase mediante su [página de consola oficial](https://console.firebase.google.com/). Se le presentará una página donde puede agregar un nuevo proyecto.

* Para ello, seleccione el área **Add project**, como se muestra en la imagen siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-project.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=c6ebf07725bdea073d34718e5d7c3f1d" alt="Firebase - Agregar proyecto" width="709" height="601" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-project.png" />

* Se le pedirá que proporcione un **nombre de proyecto** (en este tutorial usamos nuestra **Foo PlayFab App**, pero *asegúrese* de idear su *propio* nombre al seguir este tutorial).

* Seleccione el botón **Create Project** para avanzar al paso siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-create-project.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=93cc77ef6805ee6472636146800a54e9" alt="Firebase - Crear proyecto" width="662" height="591" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-create-project.png" />

Se le redirigirá al **panel del nuevo proyecto**.

* Agregue una nueva **aplicación Android** al proyecto seleccionando el área que se muestra en la imagen siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-to-android-app.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=db71c761512694decfdf3298661322cf" alt="Firebase - Agregar Firebase a una aplicación Android" width="801" height="695" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-to-android-app.png" />

Agregar una nueva **aplicación** requiere 3 pasos.

1. En primer lugar, debe proporcionar un **nombre de paquete de Android**. Nosotros usamos **com.foo.playfab.app**, pero asegúrese de idear su *propio* **nombre de paquete** al seguir este tutorial.

2. Seleccione el botón **Register App** para pasar al paso siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-register-android-app.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=8949cec22f3514f2833782c065266372" alt="Firebase - Registrar aplicación Android" width="694" height="742" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-register-android-app.png" />

El paso 2 le permite descargar un archivo de configuración denominado **google-services.json**. Se usará más adelante en la **aplicación** para configurar automáticamente los servicios de **Google**.

* Después de descargarlo, seleccione el botón **Continue** para pasar al paso siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-google-settings-file.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=003f8a1a55f516e5a3fa60584e283db2" alt="Firebase - Agregar archivo de configuración de Google" width="694" height="742" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-google-settings-file.png" />

3. El paso final ofrece información sobre cómo configurar su proceso de compilación para conectar los SDK de Firebase y Google Play.

<Note>
  Puede ignorar esta información, ya que usaremos una herramienta automatizada integrada en Android Studio que realiza esta configuración automáticamente.
</Note>

* Seleccione el botón **Finish** para continuar.

<img src="https://mintcdn.com/microsoft-4404708b/59DtlsYffqki5YJ_/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-finish-adding-to-android-app.webp?fit=max&auto=format&n=59DtlsYffqki5YJ_&q=85&s=3ff4fb88ab6c458e6a343ca83afd98f9" alt="Firebase - Finalizar la adición a la aplicación Android" width="689" height="740" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-finish-adding-to-android-app.webp" />

* Una vez agregada la **aplicación**, aparecerá en el panel.

* En este punto, la configuración está completa y necesitamos extraer la clave de servidor de FCM (que usaremos para conectar las notificaciones push de PlayFab).

* Vaya a **Project settings**, como se muestra en la imagen siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-project-settings.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=25453db20ddb38b6c7cd0e6f46578db7" alt="Firebase - Configuración del proyecto" width="696" height="547" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-project-settings.png" />

* En **Project settings**, vaya a la pestaña **Cloud Messaging**.

* Busque el área **Server Key** (el área en rojo de la imagen que se muestra a continuación).

* Copie esta **clave** y guárdela en un lugar seguro y de fácil acceso.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-copy-server-key.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=47549ef555d012d68d2506b12e17d653" alt="Firebase - Cloud Messaging - Clave de servidor" width="855" height="487" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-copy-server-key.png" />

En este punto, hemos hecho todo lo necesario en Firebase para habilitar las notificaciones push.

### Capítulo 2: Configuración de Google Play Console

Cuando su aplicación esté lista, lo más probable es que cree un proyecto de Google Console para mantener una página de producto en Play Store. Veamos el proceso de creación de un proyecto de Google Play y su vinculación con el proyecto de Firebase.

Empiece por visitar la [página de Google Play Console](https://play.google.com/apps/publish) y crear un nuevo proyecto, como se muestra en la imagen siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-console-page.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=b2764cf59e851638067b05739c9e0bfe" alt="Google Play - Página de la consola" width="1097" height="691" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-console-page.png" />

* Asigne el **título**.

<Note>
  En este ejemplo, usamos **Foo PlayFab App**. Asegúrese de idear su *propio* título y nombre de paquete mientras sigue este tutorial.
</Note>

* Seleccione el botón **Create** para continuar.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-create-application.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=ac4858a57d9150e91dbbbe5502004fa1" alt="Google Play - Crear aplicación" width="607" height="455" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-create-application.png" />

* Se abrirá la página del **proyecto de Google Play Console**.

* Seleccione **Services & APIs** en el menú lateral.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-console-services-and-apis.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=89ed8f41596cf33bcb7d90201e0d799b" alt="Google Play Console - Servicios y API" width="466" height="604" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-console-services-and-apis.png" />

* Se abrirá la página **Services configuration**.
* Busque el panel **Firebase Cloud Messaging**.
* Seleccione el botón **Link a Sender ID**, como se muestra en la imagen siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-fcm-link-sender-id.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=c38ceb863412115eadb603d7b045e2c4" alt="Google Play - Panel de FCM - Vincular un identificador de remitente" width="497" height="650" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-fcm-link-sender-id.png" />

Para vincular el **identificador de remitente**:

* Use la clave de servidor de FCM que recibió (y guardó) al usar la consola de Firebase en el capítulo anterior.
* Cuando termine, seleccione el botón **Link**, como se muestra en nuestro ejemplo.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-add-fcm-api-key.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=09e18dd1c6e80d94ffbbea649b7943ca" alt="Google Play - Vincular un identificador de remitente - Agregar clave de API de FCM" width="627" height="360" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-add-fcm-api-key.png" />

* Dedique un momento a comprobar que el **identificador de remitente** que se muestra en **Google Play Console** coincide con el de la **consola de Firebase**, como se muestra en el ejemplo siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-firebase-match-sender-id.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=4ddb06d507e22df96db776b3e74fd3c6" alt="Google Play Console - Consola de Firebase - Coincidencia del identificador de remitente" width="1012" height="480" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-firebase-match-sender-id.png" />

En este punto, el **proyecto de Google Play Console** está correctamente vinculado al **proyecto de Firebase**.

### Capítulo 3: Configuración del título de PlayFab

El propósito de este capítulo es mostrarle cómo configurar los servicios de PlayFab para que puedan enviar notificaciones push al jugador en su nombre.

* En primer lugar, debe ir a **Title settings** en el menú de configuración de su título.

* Seleccione la pestaña **Push Notifications**.

* Para la opción de Android, seleccione el icono de **configuración**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-push-notifications-android-settings.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=4eec7a15301af9539810665d379e4dd2" alt="PlayFab - Notificaciones push - Configuración de Android" width="1366" height="835" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-push-notifications-android-settings.png" />

* Se le pedirá su **clave de API de servidor de Google**.

* Copie la que recibió a través de la consola de Firebase, como se muestra en el ejemplo proporcionado a continuación.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-firebase-add-server-api-key.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=37afb2d4a347067d24e0025d5db1c622" alt="PlayFab - Consola de Firebase - Agregar clave de API de servidor" width="1131" height="508" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-firebase-add-server-api-key.png" />

* Si todo es correcto, se le presentará una página que muestra las **notificaciones push** como **activas**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-push-notifications-android-active.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=968a305d91cfbd117a34cab960fd28d1" alt="PlayFab - Notificaciones push - Activas" width="1366" height="835" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-push-notifications-android-active.png" />

Con esto concluye la configuración de su título de PlayFab.

### Capítulo 4: Configuración del proyecto de Android Studio

Para utilizar el JavaSDK de PlayFab, necesitará el JavaSDK de cliente de PlayFab y su dependencia, Google GSON.

* Descargue aquí la biblioteca JAR del JavaSDK de cliente de PlayFab.

* Busque `client-sdk-*.jar` y el Java Doc correspondiente si lo necesita.

* Descargue la versión más reciente de Google GSON.

* Busque `gson-*.jar`.

* Tenga a mano los archivos .jar mencionados anteriormente.

Empiece por crear un proyecto normal de Android Studio.

* Compruebe que el **nombre de paquete** coincide con el que ha usado a lo largo de este tutorial (en Firebase, por ejemplo).

<Note>
  Para los fines de *este* ejemplo, usamos **com.foo.playfab.app**, pero recuerde idear su propio nombre de paquete y título mientras sigue este tutorial.
</Note>

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-add-app-name.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=e3a6f68571ac08857f7e1784409e18a4" alt="Android Studio - Nuevo proyecto - Agregar nombre de la aplicación" width="1058" height="734" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-add-app-name.png" />

* Seleccione el **SDK mínimo** de su elección.

* A continuación, seleccione el botón **Next**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-select-min-sdk.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=37acc7e58f141a91bbc54b598e764640" alt="Android Studio - Nuevo proyecto - Seleccionar SDK mínimo" width="916" height="740" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-select-min-sdk.png" />

Para este tutorial, sugerimos usar la plantilla **Empty Activity** para empezar.

* Seleccione la plantilla que quiere usar.

* A continuación, seleccione el botón **Next**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-select-template.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=26ee148418e7ea9ffb651dcef5b5dc72" alt="Android Studio - Nuevo proyecto - Seleccionar plantilla" width="916" height="740" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-select-template.png" />

* Configure la plantilla como quiera.

* Seleccione el botón **Finish**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-finish.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=f79cb46f260919d023e11c75d6ec9189" alt="Android Studio - Nuevo proyecto - Finalizar" width="916" height="740" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-finish.png" />

Una vez que abra el proyecto recién creado:

* Cambie a la pestaña **Project** **(1)**.

<Note>
  En el capítulo anterior, descargó el archivo de configuración `google-services.json` desde la consola de Firebase. Úselo para el paso siguiente.
</Note>

* Compruebe que este archivo se encuentra en la carpeta **App** **(2)**.
* A continuación, vaya a **Tools (3)**.
* Seleccione **Firebase (4)**, como se muestra en el ejemplo proporcionado a continuación.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-add-config-file.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=71251ee117e53ba0ea52d14dd5ab94b6" alt="Android Studio - Agregar archivo de configuración al proyecto" width="873" height="847" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-add-config-file.png" />

El **Asistente de Firebase** se abrirá en el lado derecho de la ventana.

* Busque la carpeta **Cloud Messaging** y seleccione **Set up Firebase Cloud Messaging**, como se muestra a continuación.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-firebase-set-up-cloud-messaging.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=c1ab23fad1d9ce59d043f8a817ff2634" alt="Android Studio - Asistente de Firebase - Configurar Cloud Messaging" width="592" height="820" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-firebase-set-up-cloud-messaging.png" />

* En el **Asistente de notificaciones de Firebase**, seleccione el botón **Add FCM to your app (1)**, como se muestra en la imagen siguiente.
* Se abrirá un cuadro de diálogo que indica que se agregarán nuevas dependencias mediante **Gradle**.
* Seleccione **Accept Changes (2)** para aceptar los cambios.

<Note>
  Desafortunadamente, las dependencias que agrega automáticamente el proceso de sincronización de **Gradle** (**3**) son incorrectas y notificarán un error.
</Note>

* Para configurar las dependencias correctamente, reemplace las líneas agregadas automáticamente por las siguientes:

  `implementation 'com.google.firebase:firebase-core:16.0.3`\
  `implementation 'com.google.firebase:firebase-messaging:17.0.0`

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-firebase-add-fcm-to-your-app.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=6e068982118ca54c1c54aa211854059a" alt="Android Studio - Asistente de Firebase - Agregar FCM a la aplicación" width="1162" height="597" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-firebase-add-fcm-to-your-app.png" />

Una vez completado ese proceso:

* Compruebe que el **Asistente de notificaciones de Firebase** indica que las dependencias ahora están configuradas correctamente **(1)**.

<Note>
  Al principio de este capítulo, adquirimos los archivos JAR necesarios. Normalmente, el archivo de compilación captura estos archivos automáticamente.
</Note>

* Para asegurarse de que estos archivos JAR aparecen en la carpeta **app/libs** **(2)**, seleccione todos los archivos y haga clic con el botón derecho en ellos.
* A continuación, elija **Add as library... (3)**, como se muestra en el ejemplo proporcionado a continuación.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-firebase-add-library.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=cac566cb854d201438a125b093700bf4" alt="Android Studio - Asistente de Firebase - Agregar como biblioteca" width="1315" height="881" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-firebase-add-library.png" />

* Con el [generador de iconos de notificación](https://romannurik.github.io/AndroidAssetStudio/icons-notification.html) de Android Asset Studio, prepare los iconos y colóquelos dentro de **app/src/main/res**.

* En el ejemplo que se muestra a continuación, el icono se denomina **ic\_stat\_blur\_on**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-add-icons.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=44c75647824acbc7f6eed1764629fb79" alt="Android Studio - Agregar iconos" width="495" height="393" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-add-icons.png" />

* Por último, seleccione **Rebuild Project**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-rebuild-project.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=af06d0cc414a65ca537ec1930463b0d4" alt="Android Studio - Recompilar proyecto" width="1471" height="849" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-rebuild-project.png" />

Ahora podemos empezar a implementar el código para recibir y controlar las notificaciones. Vamos a modificar (y crear si es necesario) 4 archivos:

1. **app/src/main/AndroidManifest.xml**
2. **app/src/main/java/..packagePath../MainActivity.java**
3. **app/src/main/java/..packagePath../FooAppFirebaseInstanceIdService.java**
4. **app/src/main/java/..packagePath../FooAppFirebaseMessagingService.java**

<Note>
  La implementación actual está pensada para ser lo más corta posible, solo para probar rápidamente las notificaciones. Considere las [guías de FCM](https://firebase.google.com/docs/cloud-messaging/concept-options) para conocer procedimientos recomendados de alta calidad y ejemplos de implementación más complejos.
</Note>

#### AndroidManifest.xml

En el código siguiente, reemplace los marcadores de posición `MY_PACKAGE_IDENTIFIER` por su *propio* identificador de paquete.

```xml theme={null}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="MY_PACKAGE_IDENTIFIER">
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- The following block enables our custom Firebase Instance ID Service-->
        <service android:name=".FooAppFirebaseInstanceIdService" android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
            </intent-filter>
        </service>

        <service
            android:name=".FooAppFirebaseMessagingService" android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>

    </application>

</manifest>
```

#### MainActivity.java

Los siguientes marcadores de posición del código deben reemplazarse según su escenario.

* `PLAYFAB_TITLE_ID`
  * Use el identificador de su título que recibió en Game Manager de PlayFab.

* `PACKAGE_IDENTIFIER`
  * Use el identificador de paquete de Java que coincida con su configuración.

```java theme={null}
package PACKAGE_IDENTIFIER;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.playfab.PlayFabClientAPI;
import com.playfab.PlayFabClientModels.*;
import com.playfab.PlayFabErrors;
import com.playfab.PlayFabSettings;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    // Invoked when activity is started
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Set PlayFab title
        PlayFabSettings.TitleId = "PLAYFAB_TITLE_ID";

        // Start login operation
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                if(login()) FooAppFirebaseInstanceIdService.setAllowRegisterForPush(true); // Ready to register for push notifications
            }
        });
    }

    public boolean login(){
        LoginWithAndroidDeviceIDRequest request = new LoginWithAndroidDeviceIDRequest();
        request.CreateAccount = true;

        // There are several approaches on getting unique android device id.
        // https://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id
        request.AndroidDeviceId = "qwerty";

        PlayFabErrors.PlayFabResult<LoginResult> response = PlayFabClientAPI.LoginWithAndroidDeviceID(request);
        if(response.Error != null){
            Log.d("Foo PlayFab App",CompileErrorsFromResult(response.Error));
            return false;
        }
        return true;
    }

    // Utility method to compose an error message out of PlayFab result.
    private static String CompileErrorsFromResult(PlayFabErrors.PlayFabError error) {
        if (error == null)
            return null;

        String errorMessage = "";
        if (error.errorMessage != null)
            errorMessage += error.errorMessage;
        if (error.errorDetails != null)
            for (Map.Entry<String, List<String>> pair : error.errorDetails.entrySet())
                for (String msg : pair.getValue())
                    errorMessage += "\n" + pair.getKey() + ": " + msg;
        return errorMessage;
    }
}
```

#### FooAppFirebaseInstanceIdService.java

El marcador de posición del código que se muestra a continuación debe reemplazarse según su escenario.

* `PACKAGE_IDENTIFIER`
  * El identificador de paquete de Java que coincida con su configuración.

```java theme={null}
package PACKAGE_IDENTIFIER;

import android.text.TextUtils;
import android.util.Log;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
import com.playfab.PlayFabClientAPI;
import com.playfab.PlayFabClientModels;
import com.playfab.PlayFabErrors;
import java.util.List;
import java.util.Map;

public class FooAppFirebaseInstanceIdService extends FirebaseInstanceIdService {

    private static String _token;

    private static boolean _allowRegistration;

    // This is invoked from activity that performs authentication.
    // Once login is complete this method is invoked.
    // If we have a pending token, we use it to register for push notifications
    public static void setAllowRegisterForPush(boolean isAllowed) {
        _allowRegistration = isAllowed;
        if (_allowRegistration && !TextUtils.isEmpty(_token)) {
            registerForPush(_token);
        }
    }

    // Invoked when firebase has fetched a token
    // If we already have logged in, we use new token to register for push
    @Override
    public void onTokenRefresh() {
        _token = FirebaseInstanceId.getInstance().getToken();
        if (_allowRegistration && !TextUtils.isEmpty(_token)) {
            registerForPush(_token);
        }
    }

    private static void registerForPush(String token) {
        PlayFabClientModels.AndroidDevicePushNotificationRegistrationRequest request = new PlayFabClientModels.AndroidDevicePushNotificationRegistrationRequest();
        request.DeviceToken = token;

        PlayFabErrors.PlayFabResult<PlayFabClientModels.AndroidDevicePushNotificationRegistrationResult> response = PlayFabClientAPI.AndroidDevicePushNotificationRegistration(request);

        if (response.Error != null) {
            Log.d("Foo PlayFab App", CompileErrorsFromResult(response.Error));
        }
    }

    // Utility method to compose an error message out of PlayFab result.
    private static String CompileErrorsFromResult(PlayFabErrors.PlayFabError error) {
        if (error == null)
            return null;

        String errorMessage = "";
        if (error.errorMessage != null)
            errorMessage += error.errorMessage;
        if (error.errorDetails != null)
            for (Map.Entry<String, List<String>> pair : error.errorDetails.entrySet())
                for (String msg : pair.getValue())
                    errorMessage += "\n" + pair.getKey() + ": " + msg;
        return errorMessage;
    }

}
```

#### FooAppFirebaseMessagingService.java

El marcador de posición del código que se muestra a continuación debe reemplazarse según su escenario.

* `PACKAGE_IDENTIFIER`
  * El identificador de paquete de Java que coincida con su configuración.

```java theme={null}
package com.foo.playfab.app;

import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class FooAppFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage message) {
        // Intercept the message here
        Log.d("Foo PlayFab App","Message received: "+message.getNotification().getBody());
    }
}
```

## Pruebas

En este punto, debería poder implementar la aplicación en el dispositivo.

* Una vez que inicie la aplicación, esta iniciará sesión automáticamente y se registrará para las notificaciones push.

* Seleccione el botón **Inicio** de su dispositivo para minimizar la aplicación. *Esto es importante*, ya que nos permite probar la notificación que llega a la bandeja del sistema.

* A continuación, vaya a la página de Game Manager de su título de PlayFab y use el panel para localizar el **registro push** más reciente.

* Seleccione el **identificador del jugador (1)**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-playstream-event-log.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=8f7c5bacba75a46d48ac840dee5bec99" alt="PlayFab - PlayStream - Registro de eventos" width="524" height="330" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-playstream-event-log.png" />

Esto abrirá una página **Send Push Notification** para ese jugador.

* Seleccione el botón **Send Push Notification** **(1)**.

* Escriba el **título (2)**.

* Escriba el cuerpo de su mensaje **(3)**.

* Confirme los cambios seleccionando el botón **Send Push Notification** **(4)**.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-send-push-notification.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=e055e70076d9991525fe1668015c0760" alt="PlayFab - Enviar notificación push" width="1308" height="560" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-send-push-notification.png" />

* Compruebe que el mensaje llega a su dispositivo.

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-app-receive-playfab-push-notification.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=dd679dd51527afebfb287bc2ab59d2c9" alt="Aplicación Android - Recibir notificación push de PlayFab" width="378" height="672" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-app-receive-playfab-push-notification.png" />

Si su mensaje llega, los mensajes se están entregando correctamente en su aplicación.

En este punto, la integración se ha realizado correctamente. Puede usar **FooAppFirebaseMessagingService** para controlar el mensaje entrante mientras su aplicación se está ejecutando realmente.


## Related topics

- [Notificaciones push para Android](/es/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-android.md)
- [Notificaciones push](/es/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/index.md)
- [Plantillas de notificaciones push](/es/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notification-templates.md)
- [Inicio rápido de notificaciones push](/es/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart.md)
- [Introducción a Android](/es/services/playfab/multiplayer/networking/android-specific-requirements.md)
