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

# Introdução ao Android Studio e às notificações por push

> Conecte o Android Studio, o Google Play Services, o Firebase Cloud Messaging e o PlayFab para enviar notificações por push aos seus aplicativos cliente Android.

## Visão geral

Este tutorial foi criado para ajudar você a começar a usar a integração do PlayFab no Android com notificações por push.

As notificações por push exigem configuração em vários sistemas. Antes de começar, vamos falar sobre como a infraestrutura funciona. Há 4 entidades participando do processo:

1. **Google Play Services**
2. **Firebase Cloud Messaging Service**s (**FCM**, criado sobre o antigo **Google Cloud Messaging**.)
3. **PlayFab Services**
4. **Aplicativos cliente**

### 1. Google Play Services

O Google Play Services identifica sua página na Play Store usando um nome de pacote.

Um exemplo disso seria: **com.bob.games.matchthree**.

Quando registrado no Google Play, o nome do pacote se torna uma ID de aplicativo exclusiva e atende a várias finalidades, desde a instalação pela Play Store até a prevenção de falsificação de identidade.

### 2. Firebase Cloud Messaging (FCM)

Os serviços do Firebase Cloud Messaging oferecem um sistema baseado em nuvem para enviar, direcionar e entregar suas notificações por push.

Eles também permitem que outros serviços (como o PlayFab) enviem notificações por push em seu nome usando a chave de servidor do FCM.

### 3. PlayFab Services

Em seguida, o PlayFab Services usa a chave de servidor do FCM para enviar notificações por push aos seus clientes.

### 4. Serviços cliente

Por fim, seu aplicativo cliente pode receber notificações e processá-las conforme necessário.

### Divisão em quatro partes

Como resultado, precisamos configurar *4 sistemas diferentes*. Para isso, nosso tutorial está dividido em 4 capítulos, que abordam a configuração de cada parte.

<Note>
  A *ordem* em que você configura os sistemas é importante.
</Note>

## Pré-requisitos

* Você precisa ter uma conta do Google.
* Você precisa ter uma conta do PlayFab.
* Um ícone de notificação gerado usando o [Notification icon generator](https://romannurik.github.io/AndroidAssetStudio/icons-notification.html) do Android Asset Studio.

## Cenário

Nesta seção do nosso tutorial, montaremos um aplicativo chamado Foo PlayFab App. É um aplicativo Android com as seguintes funções:

* Ele entra no PlayFab usando uma ID de dispositivo Android.
* Ele recebe notificações por push do PlayFab.

Nosso nome de pacote será com.foo.playfab.app.

<Info>
  Use seu próprio nome de pacote e título ao seguir este tutorial.
</Info>

### Capítulo 1: configurar o Firebase

Comece a configurar o Firebase usando a [página oficial do console](https://console.firebase.google.com/). Será exibida uma página na qual você pode adicionar um novo projeto.

* Para isso, selecione a área **Add project**, conforme mostrado na imagem a seguir.

<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: adicionar projeto" width="709" height="601" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-project.png" />

* Será solicitado que você forneça um **Project Name** (neste tutorial, usamos nosso **Foo PlayFab App**, mas *crie* seu *próprio* nome ao seguir este tutorial).

* Selecione o botão **Create Project** para avançar para a próxima etapa.

<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: criar projeto" width="662" height="591" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-create-project.png" />

Você será redirecionado para o **New Project Dashboard**.

* Adicione um novo **Android Application** ao projeto selecionando a área mostrada na imagem a seguir.

<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: adicionar o Firebase ao aplicativo Android" width="801" height="695" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-to-android-app.png" />

Um novo **Application** exige 3 etapas para ser adicionado.

1. Primeiro, você precisa fornecer um **Android Package Name**. Estamos usando **com.foo.playfab.app**, mas crie seu *próprio* **Package Name** ao seguir este tutorial.

2. Selecione o botão **Register App** para passar para a próxima etapa.

<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 o aplicativo Android" width="694" height="742" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-register-android-app.png" />

A etapa 2 permite baixar um arquivo de configurações chamado **google-services.json**. Ele será usado mais tarde no **App** para configurar automaticamente os serviços do **Google**.

* Depois de baixá-lo, selecione o botão **Continue** para passar para a próxima etapa.

<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: adicionar o arquivo de configurações do Google" width="694" height="742" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-add-google-settings-file.png" />

3. A etapa final oferece informações sobre como configurar seu processo de build para conectar os SDKs do Firebase e do Google Play.

<Note>
  Você pode ignorar essas informações, pois usaremos uma ferramenta automatizada integrada ao Android Studio que realiza essa configuração automaticamente.
</Note>

* Selecione o botão **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: concluir a adição ao aplicativo Android" width="689" height="740" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-finish-adding-to-android-app.webp" />

* Depois que o **Application** for adicionado, ele aparecerá no painel.

* Nesse ponto, a configuração está concluída, e precisamos extrair a chave de servidor do FCM (que usaremos para conectar as notificações por push do PlayFab).

* Acesse **Project settings**, conforme mostrado na imagem a seguir.

<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: configurações do projeto" width="696" height="547" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-project-settings.png" />

* Em **Project settings**, navegue até a guia **Cloud Messaging**.

* Localize a área **Server Key** (a área vermelha na imagem mostrada abaixo).

* Copie essa **Key** e armazene-a em um local seguro e de fácil acesso.

<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: chave de servidor" width="855" height="487" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/firebase-copy-server-key.png" />

Nesse ponto, fizemos tudo o que era necessário no Firebase para habilitar as notificações por push.

### Capítulo 2: configurar o Google Play Console

Quando seu aplicativo estiver pronto, você provavelmente criará um projeto do Google Console para manter a página do produto na Play Store. Vamos percorrer o processo de criar um projeto do Google Play e vinculá-lo ao projeto do Firebase.

Comece visitando a [página do Google Play Console](https://play.google.com/apps/publish) e criando um novo projeto, conforme mostrado na imagem a seguir.

<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 do console" width="1097" height="691" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-console-page.png" />

* Atribua o **Title**.

<Note>
  Neste exemplo, usamos **Foo PlayFab App**. Crie seu *próprio* título e nome de pacote ao seguir este tutorial.
</Note>

* Selecione o botão **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: criar aplicativo" width="607" height="455" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-create-application.png" />

* A página **Google Play Console Project** será aberta.

* Selecione **Services & APIs** no menu 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: Services and APIs" width="466" height="604" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-console-services-and-apis.png" />

* A página **Services configuration** será aberta.
* Localize o painel **Firebase Cloud Messaging**.
* Selecione o botão **Link a Sender ID**, conforme mostrado na imagem a seguir.

<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: painel do FCM: vincular uma Sender ID" 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 a **Sender ID**:

* Use a chave de servidor do FCM que você recebeu (e salvou) ao usar o console do Firebase no capítulo anterior.
* Ao terminar, selecione o botão **Link**, conforme mostrado no nosso exemplo.

<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 uma Sender ID: adicionar a chave de API do FCM" width="627" height="360" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-add-fcm-api-key.png" />

* Reserve um momento para verificar se a **Sender ID** exibida no **Google Play Console** corresponde à do **Firebase Console**, conforme mostrado no exemplo abaixo.

<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 e Firebase Console: Sender ID correspondente" width="1012" height="480" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/google-play-firebase-match-sender-id.png" />

Nesse ponto, o **Google Play Console Project** está vinculado com êxito ao **Firebase Project**.

### Capítulo 3: configurar o título do PlayFab

O objetivo deste capítulo é mostrar como configurar o PlayFab Services para que ele possa enviar notificações por push ao jogador em seu nome.

* Primeiro, acesse **Title settings** no menu Settings do seu título.

* Selecione a guia **Push Notifications**.

* Para a opção Android, selecione o ícone **Settings**.

<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: Push Notifications: configurações do Android" width="1366" height="835" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-push-notifications-android-settings.png" />

* Será solicitada sua **Google server API key**.

* Copie a que você recebeu pelo console do Firebase, conforme mostrado no exemplo abaixo.

<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 e Firebase Console: adicionar a chave de API do servidor" width="1131" height="508" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-firebase-add-server-api-key.png" />

* Se tudo estiver correto, será exibida uma página que mostra **Push Notifications** como **Active**.

<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: Push Notifications: ativo" width="1366" height="835" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-push-notifications-android-active.png" />

Isso conclui a configuração do seu título do PlayFab.

### Capítulo 4: configurar o projeto do Android Studio

Para usar o PlayFab JavaSDK, você precisará do PlayFab Client JavaSDK e de sua dependência, o Google GSON.

* Baixe a biblioteca JAR do PlayFab client JavaSDK aqui.

* Procure `client-sdk-*.jar` e o Java Doc correspondente, se precisar.

* Baixe a versão mais recente do Google GSON.

* Procure `gson-*.jar`.

* Mantenha os arquivos .jar mencionados à mão.

Comece criando um projeto normal do Android Studio.

* Verifique se o **Package name** corresponde ao que você usou ao longo deste tutorial (no Firebase, por exemplo).

<Note>
  Para os fins *deste* exemplo, estamos usando **com.foo.playfab.app**, mas lembre-se de criar seu próprio nome de pacote e título ao seguir 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: novo projeto: adicionar nome do aplicativo" width="1058" height="734" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-add-app-name.png" />

* Selecione um **Minimum SDK** de sua escolha.

* Em seguida, selecione o botão **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: novo projeto: selecionar o 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 começar usando o modelo **Empty Activity**.

* Selecione o modelo que você deseja usar.

* Em seguida, selecione o botão **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: novo projeto: selecionar o modelo" width="916" height="740" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-select-template.png" />

* Configure o modelo como desejar.

* Selecione o botão **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: novo projeto: concluir" width="916" height="740" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-new-project-finish.png" />

Depois de abrir o projeto recém-criado:

* Mude para a guia **Project** **(1)**.

<Note>
  No capítulo anterior, você baixou o arquivo de configuração `google-services.json` do console do Firebase. Use-o na próxima etapa.
</Note>

* Verifique se esse arquivo está na pasta **App** **(2)**.
* Em seguida, navegue até **Tools (3)**.
* Selecione **Firebase (4)**, conforme mostrado no exemplo abaixo.

<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: adicionar o arquivo de configuração ao projeto" width="873" height="847" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-add-config-file.png" />

O **Firebase Assistant** será aberto no lado direito da janela.

* Localize a pasta **Cloud Messaging** e selecione **Set up Firebase Cloud Messaging**, conforme mostrado abaixo.

<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: Firebase Assistant: configurar o 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" />

* No **Firebase Notifications Assistant**, selecione o botão **Add FCM to your app (1)**, conforme mostrado na imagem a seguir.
* Uma caixa de diálogo será aberta indicando que novas dependências serão adicionadas por meio do **Gradle**.
* Selecione **Accept Changes (2)** para conceder as alterações.

<Note>
  Infelizmente, as dependências adicionadas automaticamente pelo processo de sincronização do **Gradle** (**3**) estão incorretas e relatarão falha!
</Note>

* Para configurar as dependências corretamente, substitua as instruções adicionadas automaticamente pelas seguintes:

  `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: Firebase Assistant: adicionar o FCM ao seu aplicativo" 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" />

Quando esse processo for concluído:

* Verifique se o **Firebase Notifications Assistant** indica que as dependências agora estão configuradas corretamente **(1)**.

<Note>
  No início deste capítulo, obtivemos os arquivos JAR necessários. Normalmente, o arquivo de build busca esses arquivos automaticamente.
</Note>

* Para garantir que esses arquivos JAR estejam listados na pasta **app/libs** **(2)**, selecione todos os arquivos e clique com o botão direito do mouse neles.
* Em seguida, escolha **Add as library... (3)**, conforme mostrado no exemplo abaixo.

<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: Firebase Assistant: adicionar como biblioteca" width="1315" height="881" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-firebase-add-library.png" />

* Usando o [Notification icon generator](https://romannurik.github.io/AndroidAssetStudio/icons-notification.html) do Android Asset Studio, prepare os ícones e coloque-os em **app/src/main/res**.

* No exemplo mostrado abaixo, o ícone se chama **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: adicionar ícones" width="495" height="393" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-add-icons.png" />

* Por fim, selecione **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 o projeto" width="1471" height="849" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-studio-rebuild-project.png" />

Agora podemos começar a implementar o código para receber e manipular notificações. Vamos modificar (e criar, se necessário) 4 arquivos:

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>
  A implementação atual foi elaborada para ser a mais curta possível, apenas para testar rapidamente as notificações. Consulte os [guias do FCM](https://firebase.google.com/docs/cloud-messaging/concept-options) para obter práticas recomendadas de alta qualidade e exemplos de implementação mais complexos.
</Note>

#### AndroidManifest.xml

No código a seguir, substitua todos os espaços reservados `MY_PACKAGE_IDENTIFIER` pelo seu *próprio* identificador de pacote.

```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

Os seguintes espaços reservados no código devem ser substituídos de acordo com o seu cenário.

* `PLAYFAB_TITLE_ID`
  * Use a ID do seu título que você recebeu no PlayFab Game Manager.

* `PACKAGE_IDENTIFIER`
  * Use o identificador de pacote Java que corresponde à sua configuração.

```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

O espaço reservado no código exibido abaixo deve ser substituído de acordo com o seu cenário.

* `PACKAGE_IDENTIFIER`
  * O identificador de pacote Java que corresponde à sua configuração.

```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

O espaço reservado no código mostrado abaixo deve ser substituído de acordo com o seu cenário.

* `PACKAGE_IDENTIFIER`
  * O identificador de pacote Java que corresponde à sua configuração.

```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());
    }
}
```

## Teste

Nesse ponto, você deverá conseguir implantar o aplicativo no dispositivo.

* Depois que você iniciar o aplicativo, ele fará login automaticamente e se registrará para receber notificações por push.

* Selecione o botão **Home** no dispositivo para minimizar o aplicativo. *Isso é importante*, pois nos permite testar a notificação que chega à bandeja do sistema.

* Em seguida, acesse a página do Game Manager do seu título do PlayFab e use o Dashboard para localizar o **Push Registration** mais recente.

* Selecione a **Player ID (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: log de eventos" width="524" height="330" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-playstream-event-log.png" />

Isso abrirá uma página **Send Push Notification** para esse jogador.

* Selecione o botão **Send Push Notification** **(1)**.

* Digite o **Title (2)**.

* Insira o corpo da mensagem **(3)**.

* Confirme as alterações selecionando o botão **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 notificação por push" width="1308" height="560" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-send-push-notification.png" />

* Verifique se a mensagem chega ao seu 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="Aplicativo Android: receber notificação por push do PlayFab" width="378" height="672" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/android-app-receive-playfab-push-notification.png" />

Se a mensagem chegar, as mensagens estão sendo entregues com êxito ao seu aplicativo.

Nesse ponto, você concluiu a integração com êxito. Você pode usar o **FooAppFirebaseMessagingService** para manipular a mensagem recebida enquanto o aplicativo está em execução.


## Related topics

- [Notificações por push para Android](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-android.md)
- [Modelos de notificação por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notification-templates.md)
- [Notificações por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/index.md)
- [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 para iOS](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-ios.md)
