> ## 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.

# Notificaciones push para Android

> Configure las notificaciones push de PlayFab para Android configurando su proyecto de Firebase, cargando la clave privada del servidor y realizando pruebas con un cliente de Unity3D.

# Notificaciones push para Android

## Requisitos previos

* [Inicio rápido de notificaciones push](/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart)
* [Inicio rápido de Unity3D](/services/playfab/sdks/unity3d/quickstart)
* **Opcional** [Unity Editor Extensions](https://blog.playfab.com/blog/new-unity-editor-extensions-beta)
* **Opcional** [Inicio rápido de Postman](/services/playfab/sdks/postman/postman-quickstart)

## Configuración del canal de notificaciones de Android

### Configuración de Firebase

Hay tres sitios web de Google que debe usar y sincronizar. En Google/Firebase, hay tanto proyectos como aplicaciones:

* **Proyecto**:
  * Importe su proyecto en la [consola de Firebase](https://console.firebase.google.com/) si aún no está allí.

* **Aplicación**:
  * Los proyectos de [Firebase](https://console.firebase.google.com/) contienen aplicaciones.
  * Asegúrese de que su aplicación existe en ambas ubicaciones, con el mismo nombre e identificador (por ejemplo, [Unicorn Battle y com.playfab.unicornbattle2](https://play.google.com/store/apps/details?id=com.playfab.unicornbattle2)).

### PlayFab requiere un archivo de clave privada del servidor

* Puede obtener este archivo de clave privada en la [consola de Firebase](https://console.firebase.google.com/)
* **Consola de Firebase**:
  * Seleccione su **proyecto** o **aplicación** y busque la opción **Settings** (hay muchas maneras de hacerlo, todas ellas le llevan al mismo lugar).
  * En la pestaña **Service accounts**, seleccione el botón **Generate new private key** para descargar el archivo JSON.

## Uso del archivo de clave privada

* Proporcione su archivo de clave privada de una de estas dos maneras:

  1. Cargue el archivo de clave privada directamente en la **interfaz de usuario de Game Manager**: **Settings** (para su **título**) > **Push Notifications** > **Android**.

  2. O llame a [SetupPushNotification](xref:titleid.playfabapi.com.admin.title-widedatamanagement.setuppushnotification) mediante Postman o un proyecto de Unity con los métodos de la API de servidor habilitados.

  * Name: **your\_game\_name**
  * Platform: **GCM**
  * Credential: (**contenido del archivo de clave privada como cadena**): `{ ... }`
  * Overwrite OldARN: `true`
  * Debería recibir una respuesta **HTTP 200 OK** con datos similares a los siguientes.

    ```json theme={null}
    // Postman JSON result output
    {
        "code": 200,
        "status": "OK",
        "data": { "ARN" : "arn:*******/GCM/your_game_name" }
    }
    ```

* Una vez configurado correctamente (con cualquiera de los dos métodos), debería ver esto en la **interfaz de usuario de Game Manager**, en **Settings (para su título) > Push Notifications > Android**.

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

## Introducción: notificaciones push para Android + Unity

Para configurar su proyecto de Unity:

* Cree un nuevo proyecto de Unity.

* **OPCIONAL** Importe el paquete [PlayFab Unity Editor Extensions](https://aka.ms/playfabunityextension).

* Importe el paquete del [SDK de PlayFab para Unity](https://aka.ms/playfabunitysdkdownload).

* Siga la guía [FCM Unity](https://firebase.google.com/docs/cloud-messaging/unity/client) para instalar la mensajería de FCM y configurar un proyecto para notificaciones push.
  * Una vez finalizado, puede continuar con esta guía para recibir mensajes de PlayFab.
  * En el ejemplo siguiente le proporcionamos un script monoBehaviour completo listo para FCM, que combina FCM y PlayFab.

* En la guía de FCM, creó un script monobehavior que configuraba el complemento de Firebase.
  * Puede seguir usando ese script monobehavior o reemplazarlo por el del ejemplo siguiente.

### Configuración de su primera notificación push

En Unity, abra el script que creó en el tutorial de FCM y reemplace el contenido.

```csharp theme={null}
using PlayFab;
using PlayFab.ClientModels;
using PlayFab.Json;
using UnityEngine;

public class MsgCatcher : MonoBehaviour
{
    public string pushToken;
    public string playFabId;
    public string lastMsg;

    // OnGUI should be deleted/replaced with your own gui - This is only provided for debugging
    public void OnGUI()
    {
        GUI.Label(new Rect(0, 0, Screen.width, 200), pushToken);
        GUI.Label(new Rect(0, 200, Screen.width, Screen.height - 200), lastMsg);
    }

    private void OnPfFail(PlayFabError error)
    {
        Debug.Log("PlayFab: api error: " + error.GenerateErrorReport());
    }

    public void Start()
    {
        // PlayFabSettings.TitleId = "TITLE_ID";
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
        Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
        LoginToPlayFab();
    }

    private void LoginToPlayFab()
    {
#if UNITY_ANDROID
        var request = new LoginWithAndroidDeviceIDRequest { AndroidDeviceId = SystemInfo.deviceUniqueIdentifier, CreateAccount = true, };
        PlayFabClientAPI.LoginWithAndroidDeviceID(request, OnPfLogin, OnPfFail);
#endif
    }

    private void OnPfLogin(LoginResult result)
    {
        Debug.Log("PlayFab: login successful");
        playFabId = result.PlayFabId;
        RegisterForPush();
    }

    private void RegisterForPush()
    {
        if (string.IsNullOrEmpty(pushToken) || string.IsNullOrEmpty(playFabId))
            return;

#if UNITY_ANDROID
        var request = new AndroidDevicePushNotificationRegistrationRequest {
            DeviceToken = pushToken,
            SendPushNotificationConfirmation = true,
            ConfirmationMessage = "Push notifications registered successfully"
        };
        PlayFabClientAPI.AndroidDevicePushNotificationRegistration(request, OnPfAndroidReg, OnPfFail);
#endif
    }

    private void OnPfAndroidReg(AndroidDevicePushNotificationRegistrationResult result)
    {
        Debug.Log("PlayFab: Push Registration Successful");
    }

    private void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token)
    {
        Debug.Log("PlayFab: Received Registration Token: " + token.Token);
        pushToken = token.Token;
        RegisterForPush();
    }

    private void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e)
    {
        Debug.Log("PlayFab: Received a new message from: " + e.Message.From);
        lastMsg = "";
        if (e.Message.Data != null)
        {
            lastMsg += "DATA: " + JsonWrapper.SerializeObject(e.Message.Data) + "\n";
            Debug.Log("PlayFab: Received a message with data:");
            foreach (var pair in e.Message.Data)
                Debug.Log("PlayFab data element: " + pair.Key + "," + pair.Value);
        }
        if (e.Message.Notification != null)
        {
            Debug.Log("PlayFab: Received a notification:");
            lastMsg += "TITLE: " + e.Message.Notification.Title + "\n";
            lastMsg += "BODY: " + e.Message.Notification.Body + "\n";
        }
    }
}
```

Compile y ejecute su proyecto de Unity en un dispositivo. Si recibe una notificación push con el texto **Push notifications registered successfully**, todo ha funcionado según lo previsto.

<Note>
  `PlayFabSettings.TitleId = TITLE_ID`. Debe establecer su propio `TitleId`. Este ejemplo no funcionará si no actualiza este `TitleId`, porque nuestro título está registrado con nuestras claves y configuración de Firebase, *no las suyas*. Puede hacerlo quitando el comentario de esta línea y reemplazando `TITLE_ID` por su `titleId`, o puede elegir su título desde el complemento opcional Editor Extensions mencionado en la sección anterior.
</Note>

### Solución de problemas en Android

* Compruebe que puede enviar notificaciones push de prueba desde la consola de Firebase.
  * Si no puede, su complemento de Firebase no está configurado correctamente y debe revisar la documentación de Firebase para averiguar por qué, o ponerse en contacto con el soporte técnico de Firebase.

* Asegúrese de que el pushToken de su cliente de FCM está establecido correctamente.
  * Debería llamarse a la función `OnTokenReceived` del ejemplo y esta debería tener un token válido.
  * Si *no* se llama, su complemento de Firebase *no* está configurado correctamente y debe revisar la documentación de Firebase para averiguar por qué, o ponerse en contacto con el soporte técnico de Firebase.

* Asegúrese de que su `titleId` está establecido en un título de su propiedad y de que se ha registrado con la clave de API de servidor de su proyecto de Firebase.

### Características avanzadas

En **server.[SendPushNotification](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification)**, puede usar **[request.Package](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#pushnotificationpackage).CustomData** para entregar datos arbitrarios al dispositivo. En el ejemplo anterior, esto se entrega en la sección con el comentario siguiente.

```csharp theme={null}
 Debug.Log("PlayFab: Received a message with data:");
```

Puede personalizar su receptor de cliente para utilizar esos datos como quiera. **CustomData** no se muestra al jugador, por lo que puede usarse para entregar información de juego personalizada a su cliente o para programar localmente otra notificación futura mediante el complemento de **FCM**.

También puede usar **[request.Package](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#pushnotificationpackage).CustomData** o solicitar **[AdvancedPlatformDelivery](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#advancedpushplatformmsg)** para realizar entregas a muchos complementos de terceros.

<Note>
  La entrega a complementos de terceros no se admite ni se garantiza, pero está disponible para usuarios avanzados.
</Note>

## Soporte adicional

Para obtener ayuda, informar de errores de ejemplo y plantear preguntas relacionadas, escríbanos en nuestros [foros](https://community.playfab.com/index.html).

Actualmente, solo damos soporte a nuestros servicios para el flujo estándar descrito en este documento. Si su equipo busca funcionalidad adicional con otros servicios o complementos push comunes, háganoslo saber. Nos encanta recibir comentarios de nuestra comunidad de desarrolladores.

Para obtener documentación sobre la carga push mediante Amazon SNS:

* [Amazon SNS Message & JSON Formats](https://docs.aws.amazon.com/sns/latest/dg/json-formats.html)


## Related topics

- [Inicio rápido de notificaciones push](/es/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart.md)
- [Introducción a Android Studio y las notificaciones push](/es/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/getting-started-android-studio-push-notifications.md)
- [Notificaciones push para iOS](/es/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-ios.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)
