

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurar uma aplicação móvel no Amazon SNS
<a name="mobile-push-send"></a>

Este tópico descreve como configurar as aplicações móveis no Console de gerenciamento da AWS usando as informações descritas em [Pré-requisitos para notificações ao usuário do Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Pré-requisitos para notificações ao usuário do Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Para começar a usar as notificações por push para dispositivos móveis do Amazon SNS, é necessário o seguinte:
+ Um conjunto de credenciais para se conectar a um dos serviços de notificação push compatíveis: ADM, Baidu APNs, FCM, MPNS ou WNS.
+ Um token de dispositivo ou ID de registro para o dispositivo e aplicativo móvel.
+ Amazon SNS configurado para enviar mensagens de notificação por push para os endpoints móveis.
+ Um aplicativo móvel que está registrado e configurado para usar um dos serviços de notificações por push compatíveis.

O registro da aplicação em um serviço de notificação por push requer várias etapas. O Amazon SNS precisa de algumas das informações que você fornece ao serviço de notificação por push para enviar mensagens de notificação por push diretas ao endpoint móvel. De modo geral, você precisa das credenciais necessárias para a conexão com o serviço de notificação por push, um token de dispositivo ou um ID de registro (que representam o dispositivo e o aplicativo móvel) recebido do serviço de notificação por push, e o aplicativo móvel registrado no serviço de notificação por push. 

O formato exato das credenciais difere entre plataformas móveis, mas, em cada caso, essas credenciais devem ser enviadas durante uma conexão com a plataforma. Um conjunto de credenciais é emitido para cada aplicativo móvel e deve ser usado para enviar uma mensagem para qualquer instância do aplicativo. 

Os nomes específicos variarão de acordo com qual serviço de notificação por push estiver sendo usado. Por exemplo, ao usar APNs como serviço de notificação push, você precisa de um *token de dispositivo*. Como alternativa, ao usar o FCM, o token de dispositivo equivalente será chamado de *ID de registro*. O *token de dispositivo* ou o *ID de registro* é uma string enviada para o aplicativo pelo sistema operacional do dispositivo móvel. Ela identifica unicamente uma instância de um aplicativo móvel em execução em um determinado dispositivo móvel e pode ser considerada como identificadores exclusivos desse par de dispositivo e aplicativo. 

O Amazon SNS armazena as credenciais (além de outras configurações) como um recurso de aplicação de plataforma. Os tokens de dispositivo (novamente com algumas configurações extras) são representados como objetos chamados *endpoints de plataforma*. Cada endpoint de plataforma pertence a um aplicativo de plataforma específico, e cada endpoint de plataforma pode ser acessado usando as credenciais armazenadas em seu aplicativo de plataforma correspondente.

As seções a seguir incluem os pré-requisitos para cada um dos serviços de notificação por push com suporte. Depois de obter as informações de pré-requisito, você pode enviar uma mensagem de notificação push usando o push móvel Console de gerenciamento da AWS ou o push móvel do Amazon SNS. APIs Para obter mais informações, consulte [Configurar notificações de push com o Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Criar uma aplicação da plataforma Amazon SNS
<a name="mobile-push-send-register"></a>

Para enviar notificações do Amazon SNS para endpoints móveis, seja diretamente ou por meio de assinaturas de um tópico, você precisa criar uma aplicação de plataforma primeiro. Após registrar a aplicação com a AWS, você precisa criar um endpoint para a aplicação e o dispositivo móvel. Esse endpoint permite que o Amazon SNS envie mensagens ao dispositivo.

**Para criar uma aplicação de plataforma**

1. Faça login no [console do Amazon SNS](https://console.aws.amazon.com/sns/home).

1. No painel de navegação, selecione **Notificações por push**.

1. Na seção **Aplicações de plataforma**, selecione **Criar aplicação de plataforma**.

1. Escolha a **Região da AWS**. Para obter uma lista das regiões da AWS em que você pode criar aplicações para dispositivos móveis, consulte [Regiões suportadas pelo aplicativo móvel Amazon SNS](sns-mobile-push-supported-regions.md).

1. Insira os seguintes **detalhes da aplicação**:
   + **Nome da aplicação**: um nome para sua aplicação. O nome deve ter entre 1 e 256 caracteres e podem conter letras maiúsculas e minúsculas, números, sublinhados, hifens e pontos.
   + **Plataforma de notificações por push**: selecione o **serviço de notificação** adequado no qual a aplicação está registrada (por exemplo, Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM)).

1. Dependendo da plataforma que você selecionou, você precisará fornecer credenciais específicas:
   + Para **APNs** (Apple Push Notification Service): escolha entre autenticação **baseada em token** ou **baseada em certificado**.
     + Para autenticação baseada em token, faça upload de um **arquivo .p8** (gerado por meio do Keychain Access).
     + Para autenticação baseada em certificado, faça upload de um **arquivo .p12** (também exportado do Keychain Access).
   + Para **FCM** (Firebase Cloud Messaging): insira a **chave do servidor** do Firebase Console.
   + Para **outras plataformas** (como ADM ou GCM): insira as respectivas **chaves de API** ou **credenciais**.

1. Depois de inserir os detalhes necessários, escolha **Criar aplicação de plataforma**. Essa ação registra a aplicação no Amazon SNS e cria o objeto de aplicação da plataforma correspondente.

1. Após a criação, o Amazon SNS gera e retorna um [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) (Nome de recurso da Amazon). Esse ARN identifica de forma exclusiva a aplicação de plataforma e é usado na criação de endpoints para dispositivos móveis.

# Configurar um endpoint da plataforma Amazon SNS para notificações móveis
<a name="mobile-platform-endpoint"></a>

Quando um aplicativo e um dispositivo móvel se registram em um serviço de notificação por push (como APNs o Firebase Cloud Messaging), o serviço de notificação por push retorna um token do dispositivo. O Amazon SNS usa esse token de dispositivo para criar um endpoint de plataforma, que atua como um destino para enviar mensagens diretas de notificação por push para o aplicativo no dispositivo. O endpoint da plataforma serve como uma ponte, roteando as mensagens enviadas pelo Amazon SNS para o serviço de notificação por push para entrega no dispositivo móvel correspondente. Para obter mais informações, consulte [Pré-requisitos para notificações ao usuário do Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) e [Configurar notificações de push com o Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Como funcionam os tokens de dispositivos e os endpoints da plataforma
<a name="device-token-platform-endpoint"></a>

Um token de dispositivo identifica de forma exclusiva um dispositivo móvel registrado em um serviço de notificação push (por exemplo APNs, Firebase Cloud Messaging). Quando um aplicativo se registra no serviço de notificação por push, ele gera um token de dispositivo específico para esse aplicativo e dispositivo. O Amazon SNS usa esse token de dispositivo para criar um endpoint de plataforma dentro do aplicativo de plataforma correspondente.

O endpoint da plataforma permite que o Amazon SNS envie mensagens de notificação por push para o dispositivo por meio do serviço de notificação por push, mantendo a conexão entre seu aplicativo e o dispositivo do usuário.

## Criar um endpoint de plataforma
<a name="mobile-platform-endpoint-create"></a>

Para enviar notificações para uma aplicação com o Amazon SNS, o token do dispositivo da aplicação deve primeiro ser registrado no Amazon SNS chamando a ação de criação de endpoint de plataforma. Essa ação leva o Nome do recurso da Amazon (ARN) do aplicativo de plataforma e o token do dispositivo como parâmetros e retorna o ARN do endpoint de plataforma criado.

A ação do [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) faz o seguinte:
+ Se o endpoint de plataforma já existir, não o crie novamente. Retorne o ARN do endpoint de plataforma existente para o chamador.
+ Se já existir um endpoint de plataforma com o mesmo token de dispositivo, mas com configurações diferentes, não crie o endpoint novamente. Gere uma exceção para o chamador.
+ Se o endpoint de plataforma não existir, crie-o. Retorne o ARN do endpoint de plataforma recém-criado para o chamador.

Você não deve chamar a ação de criação do endpoint de plataforma imediatamente sempre que um aplicativo é iniciado, pois essa abordagem nem sempre fornece um endpoint que funciona. Isso pode acontecer, por exemplo, quando um aplicativo for desinstalado e reinstalado no mesmo dispositivo e o endpoint dele já existir mas estiver desabilitado. Para realizar um processo de registro bem-sucedido, você deve fazer o seguinte:

1. Verifique se um endpoint de plataforma existe para esta combinação de aplicativo-dispositivo.

1. Verifique se o token do dispositivo no endpoint de plataforma é o token do dispositivo válido mais recente.

1. Verifique se o endpoint de plataforma está ativado e pronto para uso.

## Pseudocódigo
<a name="mobile-platform-endpoint-pseudo-code"></a>

O seguinte pseudocódigo descreve uma prática recomendada para a criação de um endpoint de plataforma atual, em funcionamento e habilitado em uma ampla variedade de condições de inicialização. Essa abordagem funciona se essa for a primeira vez que o aplicativo estiver sendo registrado ou não, se o endpoint de plataforma para este aplicativo já existir e se o endpoint de plataforma estiver ativado, tiver o token de dispositivo correto e assim por diante. É seguro chamá-lo várias vezes consecutivas, já que ele não criará endpoints de plataforma duplicados ou alterará um endpoint de plataforma existente se ele já estiver atualizado e ativado.

```
retrieve the latest device token from the mobile operating system
if (the platform endpoint ARN is not stored)
  # this is a first-time registration
  call create platform endpoint
  store the returned platform endpoint ARN
endif

call get endpoint attributes on the platform endpoint ARN 

if (while getting the attributes a not-found exception is thrown)
  # the platform endpoint was deleted 
  call create platform endpoint with the latest device token
  store the returned platform endpoint ARN
else 
  if (the device token in the endpoint does not match the latest one) or 
      (GetEndpointAttributes shows the endpoint as disabled)
    call set endpoint attributes to set the latest device token and then enable the platform endpoint
  endif
endif
```

Essa abordagem pode ser usada a qualquer momento que o aplicativo precisar se registrar ou efetuar um novo registro. Ela também pode ser usada ao notificar o Amazon SNS sobre uma alteração no token do dispositivo. Nesse caso, você pode chamar a ação com o valor de token do dispositivo mais recente. Alguns pontos a observar nessa abordagem são:
+ Há dois casos em que ela pode chamar a ação de criação de endpoint de plataforma. Ela poderá ser chamada no início, quando o aplicativo não souber seu próprio ARN de endpoint de plataforma, como acontece durante um registro feito pela primeira vez. Ela também será chamada se a chamada inicial de ação de `GetEndpointAttributes` falhar com uma exceção não encontrada. Isso também acontecerá se o aplicativo souber o ARN de endpoint, mas ele foi excluído.
+ A ação de `GetEndpointAttributes` é chamada para verificar o estado do endpoint de plataforma, mesmo se o endpoint de plataforma for recém-criado. Isso acontece quando o endpoint de plataforma já existe mas está desativado. Nesse caso, a ação de criação de endpoint de plataforma é bem-sucedida, mas não habilita o endpoint de plataforma. Portanto, você deve verificar o estado do endpoint da plataforma antes de retornar o sucesso.

## AWS Exemplo de SDK
<a name="mobile-platform-endpoint-sdk-examples"></a>

O código a seguir mostra como implementar o pseudocódigo anterior usando os clientes do Amazon SNS fornecidos pelo. AWS SDKs

Para usar um AWS SDK, você deve configurá-lo com suas credenciais. Para obter mais informações, consulte [Os arquivos compartilhados de configuração e credenciais no Guia](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) de *referência de ferramentas AWS SDKs e ferramentas*.

------
#### [ CLI ]

**AWS CLI**  
**Para criar um endpoint de aplicação de plataforma**  
O exemplo `create-platform-endpoint` a seguir cria um endpoint para a aplicação de plataforma especificada usando o token especificado.  

```
aws sns create-platform-endpoint \
    --platform-application-arn arn:aws:sns:us-west-2:123456789012:app/GCM/MyApplication \
    --token EXAMPLE12345...
```
Saída:  

```
{
      "EndpointArn": "arn:aws:sns:us-west-2:1234567890:endpoint/GCM/MyApplication/12345678-abcd-9012-efgh-345678901234"
}
```

------
#### [ Java ]

**SDK para Java 2.x**  
 Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no [AWS Code Examples Repository](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointRequest;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 *
 * In addition, create a platform application using the AWS Management Console.
 * See this doc topic:
 *
 * https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-register.html
 *
 * Without the values created by following the previous link, this code examples
 * does not work.
 */

public class RegistrationExample {
    public static void main(String[] args) {
        final String usage = """

            Usage:     <token> <platformApplicationArn>

            Where:
               token - The device token or registration ID of the mobile device. This is a unique 
               identifier provided by the device platform (e.g., Apple Push Notification Service (APNS) for iOS devices, Firebase Cloud Messaging (FCM) 
               for Android devices) when the mobile app is registered to receive push notifications.

               platformApplicationArn - The ARN value of platform application. You can get this value from the AWS Management Console.\s

            """;

        if (args.length != 2) {
            System.out.println(usage);
            return;
        }

        String token = args[0];
        String platformApplicationArn = args[1];
        SnsClient snsClient = SnsClient.builder()
            .region(Region.US_EAST_1)
            .build();

        createEndpoint(snsClient, token, platformApplicationArn);
    }
    public static void createEndpoint(SnsClient snsClient, String token, String platformApplicationArn) {
        System.out.println("Creating platform endpoint with token " + token);
        try {
            CreatePlatformEndpointRequest endpointRequest = CreatePlatformEndpointRequest.builder()
                .token(token)
                .platformApplicationArn(platformApplicationArn)
                .build();

            CreatePlatformEndpointResponse response = snsClient.createPlatformEndpoint(endpointRequest);
            System.out.println("The ARN of the endpoint is " + response.endpointArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
        }
    }
}
```

------

 Para obter mais informações, consulte [Ações da API de push para dispositivos móveis](mobile-push-api.md).

## Solução de problemas
<a name="mobile-platform-endpoint-problems"></a>

### Chamar repetidamente a criação de endpoint da plataforma com um token de dispositivo desatualizado
<a name="mobile-platform-endpoint-problems-outdated"></a>

Especialmente para endpoints do FCM, você pode pensar que é melhor armazenar o primeiro token de dispositivo emitido pela aplicação e, em seguida, chamar a criação de endpoint de plataforma com esse token de dispositivo sempre na inicialização da aplicação. Isso pode parecer correto, pois a aplicação não precisará gerenciar o estado do token do dispositivo, e o Amazon SNS atualizará automaticamente o token do dispositivo para seu valor mais recente. No entanto, essa solução tem uma série de problemas sérios:
+ O Amazon SNS utiliza o feedback do FCM para atualizar os tokens de dispositivo expirados para novos tokens de dispositivo. O FCM retém informações sobre tokens de dispositivo antigos por algum tempo, mas não indefinidamente. Quando o FCM esquecer a conexão entre o token do dispositivo antigo e o novo token, o Amazon SNS não poderá mais atualizar o token do dispositivo armazenado no endpoint de plataforma para seu valor correto, ele apenas desabilitará o endpoint de plataforma.
+ O aplicativo de plataforma conterá vários endpoints de plataforma correspondentes ao mesmo token de dispositivo.
+ O Amazon SNS impõe uma cota para o número de endpoints de plataforma que podem ser criados a partir do mesmo token de dispositivo. Finalmente, a criação de novos endpoints falhará com uma exceção de parâmetro inválido e aparecerá a seguinte mensagem de erro: “This endpoint is already registered with a different token.”

Para obter mais informações sobre o gerenciamento de endpoints do FCM, consulte [Gerenciamento de endpoints do Firebase Cloud Messaging pelo Amazon SNS](sns-fcm-endpoint-management.md).

### Habilitar novamente um endpoint de plataforma associado a um token de dispositivo inválido
<a name="mobile-platform-endpoint-problems-invalid"></a>

Quando uma plataforma móvel (como APNs ou FCM) informa ao Amazon SNS que o token do dispositivo usado na solicitação de publicação era inválido, o Amazon SNS desativa o endpoint da plataforma associado ao token do dispositivo. O Amazon SNS rejeitará as publicações posteriores nesse token de dispositivo. Você pode achar melhor simplesmente reativar o endpoint de plataforma e manter a publicação, mas, na maioria dos casos, isso não funcionará: as mensagens que são publicadas não são entregues e o endpoint de plataforma é desativado novamente logo em seguida.

Isso ocorre porque o token de dispositivo associado ao endpoint de plataforma é genuinamente inválido. As entregas destinadas a ele não terão sucesso porque ele não corresponde a nenhum aplicativo instalado. Na próxima vez em que for publicada, a plataforma móvel informará novamente ao Amazon SNS que o token de dispositivo é inválido, e o Amazon SNS desabilitará novamente o endpoint de plataforma.

Para ativar novamente um endpoint de plataforma desabilitada, ele precisa ser associado a um token de dispositivo válido (com uma chamada de ação de definição de atributos de endpoint) e depois habilitado. A partir de então, as entregas para o endpoint dessa plataforma terão sucesso. A única vez que a reabilitação de um endpoint de plataforma sem atualização do seu token de dispositivo funcionará será quando um token de dispositivo associado a esse endpoint for inválido, mas depois tornar-se válido novamente. Isso pode acontecer, por exemplo, quando um aplicativo for desinstalado e instalado novamente no mesmo dispositivo móvel e receber o mesmo token de dispositivo. A abordagem apresentada anteriormente faz isso, garantindo que a reativação de um endpoint de plataforma seja feita somente após verificar se o token de dispositivo associado a ele é o mais atual disponível.

# Integração de tokens de dispositivos com o Amazon SNS para notificações móveis
<a name="mobile-push-send-devicetoken"></a>

Quando você registra pela primeira vez um aplicativo e um dispositivo móvel em um serviço de notificação, como o Apple Push Notification Service (APNs) e o Firebase Cloud Messaging (FCM), os tokens ou o registro do dispositivo IDs são devolvidos pelo serviço. Eles tokens/IDs são adicionados ao Amazon SNS para criar um endpoint para o aplicativo e o dispositivo, usando a API. [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) Depois que o endpoint é criado, um [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html) é retornado, que o Amazon SNS usa para direcionar as notificações para o aplicativo/dispositivo correto.

Você pode adicionar tokens de dispositivo ou registro IDs no Amazon SNS das seguintes formas:
+ Adicione manualmente um único token por meio do Console de gerenciamento da AWS
+ Faça upload de vários tokens usando a API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Registre tokens para futuros dispositivos

****Para adicionar manualmente um token de dispositivo ou ID de registro****

1. Faça login no [console do Amazon SNS](https://console.aws.amazon.com/sns/home).

1. No painel de navegação, selecione **Notificações por push**.

1. Na seção **Aplicações de plataforma**, selecione sua aplicação e escolha **Editar**. Se você ainda não criou uma aplicação de plataforma, siga o guia [Criar uma aplicação da plataforma Amazon SNS](mobile-push-send-register.md) para fazer isso agora.

1. Escolha **Criar endpoint**.

1. Na caixa **Token de endpoint**, insira o **token** ou o **ID de registro**, dependendo do serviço de notificação que você está usando (por exemplo, ID de registro do FCM).

1. (Opcional) Insira dados adicionais no campo **Dados do usuário**. Esses dados devem ter codificação UTF-8 e ter menos de 2 KB.

1. Escolha **Criar endpoint**.

Com o endpoint criado, você pode enviar mensagens diretamente para o dispositivo móvel ou para dispositivos móveis que estejam inscritos em um tópico do Amazon SNS.

****Como fazer o upload de vários tokens usando a API `CreatePlatformEndpoint`****

As etapas a seguir mostram como usar o aplicativo Java de amostra (`bulkupload`pacote) fornecido pela AWS para fazer upload de vários tokens (tokens de dispositivo ou registro IDs) no Amazon SNS. Você pode usar esse aplicativo de amostra para ajudá-lo a começar a fazer upload de tokens existentes. 
**nota**  
As etapas a seguir usam o IDE para Java Eclipse. As etapas pressupõem que você tenha instalado o AWS SDK para Java e tenha as credenciais AWS de segurança do seu Conta da AWS. Para obter mais informações, consulte [AWS SDK para Java](https://aws.amazon.com/sdkforjava/). Para obter mais informações sobre credenciais, consulte [Credenciais de segurança da AWS](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) no *Guia do usuário do IAM*. 

1. Faça o download e descompacte o arquivo [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Crie um novo **projeto Java** no Eclipse e importe a pasta `SNSSamples` para o projeto. 

1. Faça o download da [biblioteca OpenCSV](http://sourceforge.net/projects/opencsv/) e adicione-a ao caminho da compilação.

1. No arquivo `BulkUpload.properties`, especifique o seguinte: 
   + Seu `ApplicationArn` (ARN da aplicação de plataforma).
   + O caminho absoluto para o local do arquivo CSV que contém os tokens.
   + Registrando em log nomes de arquivos para tokens bem-sucedidos e com falha. Por exemplo, `goodTokens.csv` e `badTokens.csv`.
   + (Opcional) Uma configuração para delimitador, caractere de aspa e número de segmentos a serem usados.

   O `BulkUpload.properties` completo deve ser semelhante ao seguinte:

   ```
   applicationarn: arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp
   csvfilename: C:\\mytokendirectory\\mytokens.csv
   goodfilename: C:\\mylogfiles\\goodtokens.csv
   badfilename: C:\\mylogfiles\\badtokens.csv
   delimiterchar: ','
   quotechar: '"'
   numofthreads: 5
   ```

1.  Execute o **BatchCreatePlatformEndpointSampleaplicativo.java** para fazer o upload dos tokens para o Amazon SNS. Os tokens enviados com sucesso serão registrados em log em `goodTokens.csv`, enquanto os tokens malformados serão registrados em log em `badTokens.csv`.

**Como registrar tokens de dispositivos para futuras instalações de aplicativos**

Existem duas opções para esse processo:

**Usar o serviço do Amazon Cognito**  
Seu aplicativo móvel pode usar credenciais de segurança temporárias para criar endpoints. O Amazon Cognito é recomendado para gerar credenciais temporárias. Para obter mais informações, consulte o *[Guia do desenvolvedor do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)*.   
Para rastrear [registros](application-event-notifications.md) de aplicativos, use os eventos do Amazon SNS para receber notificações quando um novo ARNs endpoint for criado.  
Como alternativa, você pode usar a API [https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html) para recuperar a lista de endpoints registrados.

**Usar um servidor de proxy**  
Se a infraestrutura do seu aplicativo já for compatível com o registro de dispositivos na instalação, você poderá usar seu servidor como proxy. Ele encaminhará os tokens do dispositivo para o Amazon SNS por meio da API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html).  
O ARN do endpoint criado pelo Amazon SNS será retornado e poderá ser armazenado pelo seu servidor para futura publicação de mensagens.

# Amazon SNS: métodos de autenticação de notificação push da Apple
<a name="sns-apple-authentication-methods"></a>

É possível autorizar o Amazon SNS a enviar notificações por push para sua aplicação iOS ou macOS fornecendo informações que identifiquem você como desenvolvedor da aplicação. Para autenticar, forneça uma *chave* ou um *certificado* [ao criar uma aplicação de plataforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). Ambos estão disponíveis em sua conta de Desenvolvedor da Apple.

**Chave de assinatura de token**  
Uma chave de assinatura privada que o Amazon SNS usa para assinar tokens de autenticação do Apple Push Notification Service (APNs).  
Se você fornecer uma chave de assinatura, o Amazon SNS usará um token para se autenticar APNs para cada notificação push que você enviar. Com sua chave de assinatura, você pode enviar notificações push para ambientes APNs de produção e sandbox.  
Sua chave de assinatura não expira e a mesma chave de assinatura pode ser usada para várias aplicações. Para obter mais informações, consulte [Comunique-se com o APNs uso de tokens de autenticação](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) na seção **Ajuda da conta do desenvolvedor** do site da Apple.

**Certificado**  
Um certificado TLS que o Amazon SNS usa para se autenticar quando você APNs envia notificações push. O certificado pode ser obtido da sua conta de Desenvolvedor da Apple.  
Os certificados expiram após um ano. Quando isso acontecer, crie um novo certificado e forneça-o ao Amazon SNS. Para obter mais informações, consulte [Estabelecendo uma conexão baseada em certificado APNs](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) no site do desenvolvedor da Apple.

**Para gerenciar APNs configurações usando o AWS Management Console**

1. Faça login no console [do Amazon SNS](https://console.aws.amazon.com/sns/home).

1. No painel de navegação, selecione **Notificações por push**.

1. Na seção **Aplicativos da plataforma**, selecione o **aplicativo** cujas APNs configurações você deseja editar e escolha **Editar**. Se você ainda não criou uma aplicação de plataforma, siga o guia [Criar uma aplicação da plataforma Amazon SNS](mobile-push-send-register.md) para fazer isso agora.

1. Escolha **Editar** para modificar as configurações da aplicação da sua plataforma.

1. Na seção **Tipo de autenticação**, escolha uma das seguintes opções:
   + **Autenticação baseada em tokens** (recomendada para integrações modernas APNs )
   + **Autenticação baseada em certificado** (método antigo)

1. Configure suas **credenciais** com base no tipo de autenticação:
   + **Para autenticação baseada em token:**
     + Faça o upload do **arquivo .p8**, que é a chave de assinatura do token de autenticação que você baixou da sua conta de Desenvolvedor da Apple.
     + Insira o **ID da chave de assinatura**, que você encontra na sua conta de desenvolvedor da Apple. Navegue até **Certificados IDs** **e Perfis**, **Chaves** e selecione a **chave** que você deseja usar.
     + Forneça o **Identificador de equipe** da sua conta de Desenvolvedor da Apple. Você pode encontrar essa informação na página Membership (Associação).
     + Insira o **Identificador do pacote** atribuído ao seu aplicativo. Você pode encontrar isso em Certificados IDs e Perfis, Aplicativo IDs.
   + **Para autenticação baseada em certificado:**
     + Faça o upload do **arquivo .p12** do certificado TLS. Esse arquivo pode ser exportado do Keychain Access no macOS após baixar e instalar o certificado de sua conta de Desenvolvedor da Apple.
     + Se você atribuiu uma **senha** ao certificado .p12, insira-a aqui.

1. Depois de inserir as credenciais necessárias, escolha **Salvar alterações** para atualizar as configurações.

# Integração do Amazon SNS à configuração de autenticação do Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

Este tópico descreve como obter as credenciais necessárias da API do FCM (HTTP v1) do Google para usar com a AWS API e a. AWS CLI Console de gerenciamento da AWS

**Importante**  
26 de março de 2024: o Amazon SNS oferece suporte à API HTTP v1 do FCM para dispositivos Apple e destinos Webpush. Recomendamos que você migre suas aplicações móveis por push existentes para a API mais recente do FCM HTTP v1 até 1º de junho de 2024 para evitar interrupções nas aplicações.  
18 de janeiro de 2024: o Amazon SNS introduziu o suporte à API HTTP v1 do FCM para entrega de notificações push móveis para dispositivos Android.  
20 de junho de 2023: Google descontinuou a API HTTP legada do Firebase Cloud Messaging (FCM). O Amazon SNS agora oferece suporte à entrega para todos os tipos de dispositivos usando a API HTTP v1 do FCM. Recomendamos que você migre suas aplicações móveis por push existentes para a API mais recente do FCM HTTP v1 até 1º de junho de 2024 para evitar interrupções nas aplicações.

É possível autorizar o Amazon SNS a enviar notificações por push para suas aplicações fornecendo informações que identifiquem você como desenvolvedor da aplicação. Para autenticar, forneça uma **chave de API** ou um **token** [ao criar uma aplicação de plataforma](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). É possível consultar as informações a seguir no [console da aplicação do Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds):

**Chave de API**  
A chave de API é uma credencial usada ao chamar a API legada do Firebase. O FCM Legacy APIs será removido pelo Google em 20 de junho de 2024. Se você estiver usando uma chave de API como credencial da plataforma, atualize a credencial da plataforma selecionando **Token** como opção e fazendo upload do arquivo JSON associado à aplicação Firebase.

**Token**  
Um token de acesso de curta duração é usado ao chamar a API HTTP v1. Essa é a API sugerida pelo Firebase para enviar notificações por push. Para gerar tokens de acesso, o Firebase fornece aos desenvolvedores um conjunto de credenciais na forma de um arquivo de chave privada (também conhecido como arquivo service.json).

## Pré-requisito
<a name="sns-fcm-authentication-prerequisite"></a>

Você deve obter as credenciais service.json do FCM antes de começar a gerenciar as configurações do FCM no Amazon SNS. Para obter suas credenciais service.json, consulte [Migrar do FCM legado APIs para o HTTP v1 na documentação do](https://firebase.google.com/docs/cloud-messaging/migrate-v1) Google Firebase.

## Gerenciar configurações do FCM usando o CLI
<a name="sns-fcm-authentication-api"></a>

Você pode criar notificações push do FCM usando a AWS API. O número e o tamanho dos recursos do Amazon SNS em uma AWS conta são limitados. Para obter mais informações, consulte [Endpoints e cotas do Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) no *Guia do Referência geral da AWS *.

**Para criar uma notificação push do FCM junto com um tópico AWS (API) do Amazon SNS**  
Ao usar as credenciais de **chave**, `PlatformCredential` é `API key`. Ao usar credenciais de **token**, `PlatformCredential` é um arquivo de chave privada formatado em JSON:
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Para recuperar um tipo de credencial do FCM para um tópico existente do Amazon SNS (API)AWS**  
Recupera o tipo de credencial `"AuthenticationMethod": "Token"` ou ` "AuthenticationMethod": "Key"`:
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Para definir um atributo do FCM para um tópico AWS existente do Amazon SNS (API)**  
Define o atributo do FCM:
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Gerenciar configurações do FCM usando o console
<a name="sns-fcm-authentication-cli"></a>

Você pode criar notificações push do FCM usando a AWS Command Line Interface (CLI). O número e o tamanho dos recursos do Amazon SNS em uma AWS conta são limitados. Para obter mais informações, consulte [Amazon Simple Notification Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/sns.html) (Endpoints e cotas do Amazon Simple Notification Service). 

**Como criar uma notificação por push do FCM junto com um tópico do Amazon SNS (AWS CLI)**  
Ao usar as credenciais de **chave**, `PlatformCredential` é `API key`. Ao usar credenciais de **token**, `PlatformCredential` é um arquivo de chave privada formatado em JSON: Ao usar a AWS CLI, o arquivo deve estar no formato de string e os caracteres especiais devem ser ignorados. Para formatar o arquivo corretamente, o Amazon SNS recomenda usar o seguinte comando: `SERVICE_JSON=`jq @json <<< cat service.json``:
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Como recuperar um tipo de credencial do FCM para um tópico existente do Amazon SNS (AWS CLI)**  
Recupera o tipo de credencial `"AuthenticationMethod": "Token"` ou ` "AuthenticationMethod": "Key"`:
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Como definir um atributo do FCM para um tópico existente do Amazon SNS (AWS CLI)**  
Define o atributo do FCM:
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Gerenciar configurações do FCM (console)
<a name="sns-fcm-authentication-console"></a>

Use as etapas a seguir para inserir e gerenciar suas credenciais do Firebase Cloud Messaging (FCM) no Amazon SNS.

1. Faça login no console [do Amazon SNS](https://console.aws.amazon.com/sns/home).

1. No painel de navegação, selecione **Notificações por push**.

1. Na seção **Aplicações de plataforma**, selecione a **aplicação de plataforma FCM** cujas credenciais deseja editar e escolha **Editar**.

1. Na seção **Credenciais do Firebase Cloud Messaging**, escolha uma das seguintes opções:
   + **Autenticação baseada em token** (método recomendado): faça o upload do **arquivo de chave privada** (JSON) que você baixou do console do Firebase. Esse arquivo contém as credenciais necessárias para gerar tokens de acesso de curta duração para notificações do FCM. Para obter esse arquivo:

     1. Acesse o [console da aplicação Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Nas **Configurações do projeto**, selecione **Cloud Messaging**.

     1. Baixe o arquivo JSON da **chave privada** (para uso no método de autenticação baseado em token).
   + **Autenticação de chave de API**: se preferir usar o método de autenticação de chave de API mais antigo, insira a **chave de API do Google** no campo fornecido. Para obter esse arquivo:

     1. Acesse o [console da aplicação Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Em **Configurações do projeto**, selecione **Cloud Messaging**.

     1. Copie a **chave do servidor** (chave de API) a ser usada para enviar notificações.

1. Quando terminar, escolha **Salvar alterações**.

**Tópicos relacionados**
+ [Usar cargas úteis do Google Firebase Cloud Messaging v1 no Amazon SNS](sns-fcm-v1-payloads.md)

# Gerenciamento de endpoints do Firebase Cloud Messaging pelo Amazon SNS
<a name="sns-fcm-endpoint-management"></a>

## Gerenciamento e manutenção de tokens de dispositivos
<a name="sns-managing-device-tokens"></a>

Você pode garantir a capacidade de entrega das notificações push do seu aplicativo móvel seguindo estas etapas:

1. Armazene todos os tokens do dispositivo, o endpoint ARNs correspondente do Amazon SNS e os carimbos de data/hora em seu servidor de aplicativos.

1. Remova todos os tokens obsoletos e exclua o endpoint correspondente do Amazon SNS ARNs.

Na inicialização inicial do seu aplicativo, você receberá um token de dispositivo (também conhecido como token de registro) para o dispositivo. Esse token de dispositivo é gerado pelo sistema operacional do dispositivo e está vinculado ao seu aplicativo FCM. Depois de receber esse token de dispositivo, você pode registrá-lo no Amazon SNS como um endpoint da plataforma. Recomendamos que você armazene o token do dispositivo, o ARN do endpoint da plataforma Amazon SNS e o carimbo de data/hora salvando-os em seu servidor de aplicativos ou em outro armazenamento persistente. Para configurar seu aplicativo FCM para recuperar e armazenar tokens de dispositivos, consulte [Recuperar e armazenar tokens de registro](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) na documentação do *Firebase* do Google.

É importante que você mantenha up-to-date os tokens. Os tokens de dispositivo do seu usuário podem ser alterados nas seguintes condições:

1. O aplicativo móvel é restaurado em um novo dispositivo.

1. O usuário desinstala ou atualiza o aplicativo.

1. O usuário limpa os dados do aplicativo.

Quando o token do seu dispositivo for alterado, recomendamos que você atualize o endpoint correspondente do Amazon SNS com o novo token. Isso permite que o Amazon SNS continue a comunicação com o dispositivo registrado. Você pode fazer isso implementando o seguinte pseudocódigo em seu aplicativo móvel. Ele descreve uma prática recomendada para criar e manter endpoints de plataforma habilitados. Essa abordagem pode ser executada sempre que os aplicativos móveis são iniciados ou como um trabalho agendado em segundo plano.

### Pseudocódigo
<a name="sns-device-token-pseudo-code"></a>

Saiba como gerenciar e manter tokens de dispositivos usando o pseudocódigo do FCM.

```
retrieve the latest token from the mobile OS
if (endpoint arn not stored)
    # first time registration
    call CreatePlatformEndpoint
    store returned endpoint arn
endif

call GetEndpointAttributes on the endpoint arn 

if (getting attributes encountered NotFound exception)
    #endpoint was deleted 
    call CreatePlatformEndpoint
    store returned endpoint arn
else 
    if (token in endpoint does not match latest) or 
        (GetEndpointAttributes shows endpoint as disabled)
        call SetEndpointAttributes to set the 
                     latest token and enable the endpoint
    endif
endif
```

Para saber mais sobre os requisitos de atualização de tokens, consulte [Atualizar tokens regularmente](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis) na documentação do *Firebase* do Google.

## Como detectar tokens inválidas
<a name="sns-detecting-invalid-tokens"></a>

Quando uma mensagem é enviada para um endpoint do FCM v1 com um token de dispositivo inválido, o Amazon SNS receberá uma das seguintes exceções:
+ `UNREGISTERED` (HTTP 404): quando o Amazon SNS receber essa exceção, você receberá um evento de falha na entrega com um `FailureType` de `InvalidPlatformToken` e um `FailureMessage` de *Token de plataforma associado ao endpoint* não é válido. O Amazon SNS desativará o endpoint da sua plataforma quando uma entrega falhar, com essa exceção.
+ `INVALID_ARGUMENT` (HTTP 400): quando o Amazon SNS recebe essa exceção, significa que o token do dispositivo ou a carga útil da mensagem é inválida. Para obter mais informações, consulte [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)a documentação do *Firebase* do Google.

Como `INVALID_ARGUMENT` pode ser devolvido em qualquer um desses casos, o Amazon SNS retornará um `FailureType` de `InvalidNotification` e um `FailureMessage` de *Notificação de corpo é inválida*. Quando você receber esse erro, verifique se sua carga útil está correta. Se estiver correto, verifique se o token do dispositivo está up-to-date. O Amazon SNS desativará o endpoint da sua plataforma quando uma entrega falhar, com essa exceção.

Outro caso em que você enfrentará um evento de falha na entrega do `InvalidPlatformToken` é quando o token do dispositivo registrado não pertence ao aplicativo que está tentando enviar essa mensagem. Nesse caso, o Google retornará um erro *SENDER\$1ID\$1MISMATCH*. O Amazon SNS desativará o endpoint da sua plataforma quando uma entrega falhar, com essa exceção.

Todos os códigos de erro observados recebidos da API FCM v1 estão disponíveis CloudWatch quando você configura o [registro do status de entrega do](topics-attrib.md) seu aplicativo. 

Para receber eventos de entrega para seu aplicativo, consulte [Eventos do aplicativo disponíveis](application-event-notifications.md#application-event-notifications-events).

## Remover tokens obsoletos
<a name="sns-removing-stale-tokens"></a>

Os tokens são considerados obsoletos quando as entregas de mensagens ao dispositivo endpoint começam a falhar. O Amazon SNS define esses tokens obsoletos como endpoints desativados para seu aplicativo de plataforma. Quando você publica em um endpoint desativado, o Amazon SNS retornará `EventDeliveryFailure` um evento com `FailureType` de `EndpointDisabled` e um `FailureMessage` de *Endpoint é desativado*. Para receber eventos de entrega para seu aplicativo, consulte [Eventos do aplicativo disponíveis](application-event-notifications.md#application-event-notifications-events).

Ao receber esse erro do Amazon SNS, você precisa remover ou atualizar o token obsoleto no aplicativo da sua plataforma.