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

# Início rápido de notificações por push

> Configure as notificações por push do PlayFab para os canais APNS do iOS e GCM do Android por meio do Game Manager ou da Admin API SetupPushNotification, com roteamento pelo Amazon SNS.

As notificações por push do PlayFab são habilitadas pela vinculação de três sistemas principais:

1. O sistema operacional do dispositivo do jogador (Android, iOS etc.)
2. O canal específico do fornecedor (Google, Apple etc.)
3. O roteamento de mensagens entre plataformas (PlayFab por meio do Amazon Simple Notification Service (SNS)).

<Note>
  Se algum desses sistemas for desvinculado, os clientes deixarão de receber notificações. É bastante simples alterar acidentalmente um dos três sistemas e acabar quebrando o vínculo. Além disso, é difícil saber, em qualquer ponto individual do fluxo, se todos os sistemas estão configurados corretamente.
</Note>

## O sistema de roteamento de push do PlayFab

Cada título do PlayFab pode habilitar um canal de notificação do Google (GCM) e um da Apple (APNS, APNS\_SANDBOX) por vez. Eles podem ser configurados de uma destas duas formas:

1. Usando a interface do usuário no **Game Manager**, em **Settings -> Push Notifications**.
2. Usando a **PlayFab Admin API**: [SetupPushNotification](xref:titleid.playfabapi.com.admin.title-widedatamanagement.setuppushnotification).

Para obter informações de configuração mais detalhadas, leia estes tutoriais:

* [Notificações por push para Android](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-android)
* [Notificações por push para iOS](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-ios)

## Mensagens de push no jogo

As mensagens de push variam de acordo com o mecanismo/plataforma de desenvolvimento. No entanto, a forma mais fácil de receber notificações por push é usar um projeto do Unity com nosso SDK e o plug-in do Firebase Cloud Messaging (FCM) para Android, ou apenas o Unity para iOS.

* **Receber push no Android**: isso exige um plug-in. O plug-in com melhor suporte é o plug-in nativo do FCM.
* **Receber push no iOS**: isso *não* exige um plug-in para mensagens de push básicas.

<Tip>
  Consulte a documentação do FCM para obter instruções sobre como configurar o [plug-in do FCM para Unity](https://firebase.google.com/docs/cloud-messaging/unity/client) ou o push no [Android Studio](https://firebase.google.com/docs/cloud-messaging/android/client).
</Tip>

## Testar a configuração

Depois de configurar seu título e seu cliente, você pode testar a configuração usando a API de servidor do PlayFab [SendPushNotification](xref:titleid.playfabapi.com.server.accountmanagement.sendpushnotification). Essa API permite enviar quantas notificações por push forem necessárias sem custo adicional.

Você pode usar o serviço CloudScript do PlayFab como um ambiente de API de servidor rápido e seguro. A partir dele, as notificações por push podem ser enviadas conforme necessário.

Para usar esse método para testar a configuração, faça upload do código do exemplo a seguir ou acrescente-o ao CloudScript do seu título.

### Exemplo

Considere o seguinte cenário:

* Os jogadores do seu título podem acessar um placar de líderes baseado em estatísticas de classificação.

* Cada jogador pode pagar 1 unidade da moeda CH e desafiar outro jogador que esteja a até 5 posições de distância do jogador atual.

Primeiro, considere uma moeda virtual conforme mostrado na captura de tela de exemplo abaixo (consulte o tutorial [Moedas](/pt-BR/services/playfab/economy-monetization/economy-v2/tutorials/currencies) para obter informações sobre como definir uma moeda virtual).

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-new-currency.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=529f8a8499e64af54013e73f64e933fd" alt="PlayFab Economy: Currencies: nova moeda" width="1800" height="969" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-new-currency.png" />

Agora, considere as seguintes estatísticas definidas para cada jogador (consulte o tutorial [Acessar resultados de torneios arquivados](/pt-BR/services/playfab/community/leaderboards/tournaments-leaderboards/accessing-archived-tournament-results) para obter informações sobre como gerar um placar de líderes de teste).

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-statistics-player-rank.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=dfd2bdb1c0160f95676fd7fbf69781af" alt="Estatísticas do jogador no PlayFab: Rank" width="1026" height="456" data-path="images/playfab/live-service-management/game-configuration/title-communications/tutorials/playfab-statistics-player-rank.png" />

Depois de configurar esses pré-requisitos, você poderá configurar um sistema de desafios por notificação por push.

O código de cliente a seguir chamará o CloudScript `ChallengePlayer`.

```csharp theme={null}
public void ChallengeRandomClosePlayer(string currentPlayerId) {
    PlayFabClientAPI.GetLeaderboardAroundPlayer(new GetLeaderboardAroundPlayerRequest() {
        MaxResultsCount = 10,
        StatisticName = "Rank",
        PlayFabId = currentPlayerId,
    }, result => OnLeaderboardLoaded(result,currentPlayerId),OnPlayFabError);
}

private void OnLeaderboardLoaded(GetLeaderboardAroundPlayerResult leaderboard, string currentPlayerId) {
    var index = (int)(UnityEngine.Random.value * (leaderboard.Leaderboard.Count-1));
    if (leaderboard.Leaderboard[index].PlayFabId == currentPlayerId)
        index = (index + 1) % leaderboard.Leaderboard.Count;
    var targetId = leaderboard.Leaderboard[index].PlayFabId;

    PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest() {
        FunctionName = "ChallengePlayer",
        FunctionParameter = new Dictionary<string, object>() {
            { "TargetId", targetId }
        }
    }, null, OnPlayFabError);
}

public void OnPlayFabError(PlayFabError obj) {
    Debug.Log(obj.GenerateErrorReport());
}
```

O código do CloudScript `ChallengePlayer` manipulará a solicitação, validará o estado do placar de líderes e enviará a notificação por push de desafio ao alvo.

```javascript theme={null}
handlers.ChallengePlayer = function (args) {
    var targetId = args.TargetId;
    var leaderboard = server.GetLeaderboardAroundUser({
        MaxResultsCount : 10,
        PlayFabId : currentPlayerId,
        StatisticName : "Rank"
    });

    for(var i = 0; i < leaderboard.Leaderboard.length; i++) {
        var target = leaderboard.Leaderboard[i];
        if(target.PlayFabId !== targetId) continue;

        // subtract virtual currency from current player
        server.SubtractUserVirtualCurrency({
            VirtualCurrency : "CH",
            PlayFabId : currentPlayerId,
            Amount : 1
        });

        // get current player profile
        var profile = server.GetPlayerProfile({
            PlayFabId : currentPlayerId
        }).PlayerProfile;

        // try to send push notification
        try {
            server.SendPushNotification({
                Recipient : targetId,
                Package : {
                    Message : `${profile.DisplayName} challenges you for a battle!`,
                    Title: "You have been challenged",
                }
            });
        } catch (ex) {
            // Target player has not registered for Push Notifications
        }
        return;
    }
}
```

## Uso de notificações por push

Ter a capacidade de usar notificações por push é um poder incrível. No entanto, quando *usadas em excesso*, elas podem fazer com que os usuários desativem notificações futuras ou até *abandonem completamente o jogo*.

Porém, se usadas com critério, as notificações por push podem ser uma das suas melhores ferramentas para criar e manter a comunidade do seu jogo.

As notificações por push são um protocolo de mensagens do tipo *enviar e esquecer*, que não garante a entrega.

<Note>
  Lembre-se de que *não há garantia* de que seus jogadores receberão, abrirão ou interagirão com sua mensagem. Considerando essa ressalva, é uma boa prática usar as mensagens como funcionalidade *bônus*, e não como parte crítica do loop de jogo.
</Note>

Nas plataformas iOS, os aplicativos recebem um prompt único do sistema operacional, permitindo que o usuário determine o status das notificações por push. Depois que o usuário fizer a seleção inicial, essa configuração persistirá até que:

* O aplicativo seja atualizado ou reinstalado.

* O usuário faça alterações nas configurações pelo menu de configurações do telefone.

Nos aplicativos Android, as notificações são habilitadas por padrão e podem ser ativadas e desativadas à vontade pelo cliente.

<Tip>
  É uma boa prática reinicializar os ouvintes de notificação a cada sessão.
</Tip>

## Recursos

Os recursos a seguir fornecem informações adicionais sobre os tópicos deste início rápido:

* [Firebase Unity SDK](https://firebase.google.com/docs/unity/setup): uma solução completa do FCM para Unity. Esse SDK, entre todos os outros recursos, permite receber e processar notificações por push enviadas pelo FCM.
* [Push It Real Good: How to Get Players to Say Yes to Push Notifications](https://blog.playfab.com/blog/push-it-real-good-how-get-players-say-yes-push-notifications/): esta postagem de blog detalha estratégias e técnicas adicionais para usar notificações por push.
* [Push Notifications](https://blog.playfab.com/blog/push-sep-17): esta postagem de blog descreve a atualização mais recente da funcionalidade de push e a mudança para o FCM como o plug-in principal para Android.
* [Início rápido do Postman](/pt-BR/services/playfab/sdks/postman/postman-quickstart): este início rápido mostra como testar nossas APIs usando o Postman.


## 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)
- [Notificações por push para iOS](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notifications-for-ios.md)
- [PFPlatformSpecificRegisterForIOSPushNotificationRequest](/pt-BR/services/playfab/api-references/c/pfplatformspecifictypes/structs/pfplatformspecificregisterforiospushnotificationrequest.md)
- [Modelos de notificação por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/push-notification-templates.md)
- [Documentação do gerenciamento de serviços ao vivo do PlayFab](/pt-BR/services/playfab/live-service-management/index.md)
