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

# Notificações por push para Android

> Configure as notificações por push do PlayFab para Android configurando seu projeto do Firebase, fazendo upload da chave privada do servidor e testando com um cliente Unity3D.

# Notificações por push para Android

## Pré-requisitos

* [Início rápido de notificações por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart)
* [Início rápido do Unity3D](/pt-BR/services/playfab/sdks/unity3d/quickstart)
* **Opcional** [Unity Editor Extensions](https://blog.playfab.com/blog/new-unity-editor-extensions-beta)
* **Opcional** [Início rápido do Postman](/pt-BR/services/playfab/sdks/postman/postman-quickstart)

## Configurar o canal de notificação do Android

### Configuração do Firebase

Há três sites do Google que você precisa usar e sincronizar. No Google/Firebase, há Projects e Apps:

* **Project**:
  * Importe seu projeto para o [Firebase Console](https://console.firebase.google.com/) se ele ainda não estiver lá.

* **App**:
  * Os Projects do [Firebase](https://console.firebase.google.com/) contêm apps.
  * Verifique se o seu app existe nos dois locais, com o mesmo nome e identificador (por exemplo, [Unicorn Battle e com.playfab.unicornbattle2](https://play.google.com/store/apps/details?id=com.playfab.unicornbattle2)).

### O PlayFab exige um arquivo de chave privada do servidor

* Você pode obter esse arquivo de chave privada no [Firebase Console](https://console.firebase.google.com/)
* **Firebase Console**:
  * Selecione seu **Project** ou **App** e localize a opção **Settings** (há várias formas de fazer isso, e todas levam ao mesmo lugar).
  * Na guia **Service accounts**, selecione o botão **Generate new private key** para baixar o arquivo JSON.

## Usar o arquivo de chave privada

* Forneça seu arquivo de chave privada de uma destas duas formas:

  1. Faça upload do arquivo de chave privada diretamente na **interface do usuário do Game Manager**: **Settings** (do seu **Title**) > **Push Notifications** > **Android**.

  2. Ou chame [SetupPushNotification](xref:titleid.playfabapi.com.admin.title-widedatamanagement.setuppushnotification) usando o Postman ou um projeto do Unity com os métodos da Server API habilitados.

  * Name: **your\_game\_name**
  * Platform: **GCM**
  * Credential: (**conteúdo do arquivo de chave privada como uma cadeia de caracteres**): `{ ... }`
  * Overwrite OldARN: `true`
  * Você deverá receber uma resposta **HTTP 200 OK** com dados semelhantes aos seguintes.

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

* Depois de configurado corretamente (usando qualquer um dos métodos), você deverá ver isto na **interface do usuário do Game Manager** em **Settings (do seu 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="Configurações do PlayFab: Push Notifications: Android" width="617" height="404" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-settings-push-notification-android.png" />

## Introdução: notificações por push para Android + Unity

Para configurar seu projeto do Unity:

* Crie um novo projeto do Unity.

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

* Importe o pacote [Unity PlayFab SDK](https://aka.ms/playfabunitysdkdownload).

* Siga o guia [FCM Unity](https://firebase.google.com/docs/cloud-messaging/unity/client) para instalar as mensagens do FCM e configurar um projeto para notificações por push.
  * Depois de concluir, você pode continuar com este guia para receber mensagens do PlayFab.
  * Forneceremos um script monoBehaviour completo e pronto para o FCM no exemplo a seguir, que combina o FCM e o PlayFab.

* No guia do FCM, você criou um script monobehavior que configurou o plug-in do Firebase.
  * Você pode continuar usando esse script monobehavior ou substituí-lo pelo do exemplo a seguir.

### Configurar sua primeira notificação por push

No Unity, abra o script que você criou no tutorial do FCM e substitua o conteúdo.

```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 e execute seu projeto do Unity em um dispositivo. Se você receber uma notificação por push com o texto **Push notifications registered successfully**, tudo funcionou conforme o esperado.

<Note>
  `PlayFabSettings.TitleId = TITLE_ID`. Você precisa definir seu próprio `TitleId`. Este exemplo não funcionará se você não atualizar esse `TitleId`, porque nosso título está registrado com nossas chaves e configurações do Firebase, *não as suas*. Você pode fazer isso removendo o comentário dessa linha e substituindo `TITLE_ID` pelo seu `titleId`, ou pode escolher seu título no plug-in opcional Editor Extensions mencionado na seção anterior.
</Note>

### Solução de problemas do Android

* Verifique se você consegue enviar notificações por push de teste pelo Firebase Console.
  * Se não conseguir, seu plug-in do Firebase não está configurado corretamente, e você deve revisar a documentação do Firebase para descobrir o motivo ou entrar em contato com o suporte do Firebase.

* Verifique se o pushToken do cliente do FCM está definido corretamente.
  * A função `OnTokenReceived` do exemplo deve ser chamada e deve ter um token válido.
  * Se ela *não* for chamada, seu plug-in do Firebase *não* está configurado corretamente, e você deve revisar a documentação do Firebase para descobrir o motivo ou entrar em contato com o suporte do Firebase.

* Verifique se o seu `titleId` está definido como um título que você possui e se ele foi registrado com a chave de API do servidor do seu projeto do Firebase.

### Recursos avançados

Em **server.[SendPushNotification](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification)**, você pode usar **[request.Package](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#pushnotificationpackage).CustomData** para entregar dados arbitrários ao dispositivo. No exemplo anterior, isso é entregue à seção com o seguinte comentário.

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

Você pode personalizar o receptor do cliente para utilizar esses dados como quiser. **CustomData** não é exibido ao jogador, portanto pode ser usado para entregar informações personalizadas do jogo ao seu cliente ou para agendar localmente outra notificação futura usando o plug-in do **FCM**.

Você também pode usar **[request.Package](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#pushnotificationpackage).CustomData** ou solicitar **[AdvancedPlatformDelivery](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification#advancedpushplatformmsg)** para entregar a vários plug-ins de terceiros.

<Note>
  A entrega para plug-ins de terceiros não tem suporte nem garantia, mas está disponível para usuários avançados.
</Note>

## Suporte adicional

Para obter ajuda, exemplos de bugs e perguntas relacionadas, escreva para nós nos nossos [fóruns](https://community.playfab.com/index.html).

No momento, só oferecemos suporte aos nossos serviços para o fluxo padrão descrito neste documento. Se sua equipe estiver procurando funcionalidades adicionais com outros serviços ou plug-ins de push comuns, informe-nos! Adoramos receber feedback da nossa comunidade de desenvolvedores.

Para obter a documentação sobre o payload de push por meio do Amazon SNS:

* [Formatos de mensagem e JSON do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/json-formats.html)


## Related topics

- [Início rápido de notificações por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart.md)
- [Notificações por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/index.md)
- [Introdução ao Android Studio e às notificações por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/getting-started-android-studio-push-notifications.md)
- [Notificações por push para iOS](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-ios.md)
- [Modelos de notificação por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notification-templates.md)
