

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

# Usando o Amazon SNS para mensagens application-to-person
<a name="sns-user-notifications"></a>

O sistema de mensagens do Amazon SNS application-to-person (A2P) permite que você envie notificações e alertas diretamente para os dispositivos móveis de seus clientes por meio de SMS (Short Message Service). Usando esse recurso, você pode enviar notificações push para aplicativos móveis, mensagens de texto para números de telefone celular e e-mails de texto sem formatação para endereços de e-mail. Além disso, você tem a flexibilidade de distribuir mensagens usando tópicos para alcançar vários destinatários ou publicar mensagens diretamente endpoints móveis individuais para comunicação personalizada.

Este tópico explica como usar o Amazon SNS para notificações ao usuário com assinantes, como aplicativos móveis, números de celulares e endereços de e-mail.

![\[Uma visão geral de como o Amazon SNS suporta mensagens application-to-person (A2P), permitindo que os editores enviem notificações diretamente aos clientes. Ele mostra duas formas principais de distribuição de mensagens: publicação direta em endpoints individuais (como endereços de e-mail, números de telefone ou aplicativos móveis) e publicação baseada em tópicos, que envia mensagens para vários assinantes ao mesmo tempo. Os assinantes, representados à direita, podem receber notificações por meio de notificações push, mensagens de texto ou e-mails, oferecendo flexibilidade para diferentes casos de uso.\]](http://docs.aws.amazon.com/pt_br/sns/latest/dg/images/sns-a2p-overview.png)


# Mensagens de texto em dispositivos móveis com o Amazon SNS
<a name="sns-mobile-phone-number-as-subscriber"></a>

**Importante**  
O Guia do desenvolvedor de SMS do Amazon SNS foi atualizado. O Amazon SNS foi integrado com [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para a entrega de mensagens SMS. Este Guia contém as informações mais recentes sobre como criar, configurar e gerenciar as mensagens SMS do Amazon SNS.

As mensagens de texto móveis (SMS) do Amazon SNS foram projetadas para facilitar a entrega de mensagens em várias plataformas, como aplicativos web, móveis e comerciais que oferecem suporte a SMS. Os usuários podem enviar mensagens para um ou vários números de telefone inscrevendo-os em um tópico, simplificando o processo de distribuição.

As mensagens do Amazon SNS são entregues por AWS End User Messaging SMS, o que garante uma transmissão confiável de mensagens. [No Amazon SNS APIs, você pode definir várias propriedades, como tipos de mensagens (promocionais ou transacionais), [limites de gastos mensais](sms_preferences.md#sms_preferences_console), [listas de exclusão e otimização da entrega](sms_manage.md#sms_manage_optout) de mensagens.](sms_preferences.md#sms_preferences_console)

AWS End User Messaging SMS gerencia a transmissão de mensagens para o número de telefone de destino por meio de sua rede global de fornecimento de SMS. Ele gerencia o roteamento, o status da entrega e qualquer conformidade necessária com os regulamentos regionais. Para acessar recursos adicionais de SMS, como permissões granulares, pools telefônicos, conjuntos de configurações, simulador de SMS e regras de país, consulte o [Guia do usuário do AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html).

![\[Uma ilustração de como o Amazon SNS se integra AWS End User Messaging SMS para entregar mensagens de texto móveis de forma confiável. As mensagens podem ser enviadas diretamente para destinatários individuais ou distribuídas para grupos por meio dos tópicos do Amazon SNS. AWS End User Messaging SMS gerencia o roteamento, a entrega e a conformidade de mensagens em toda a sua rede global, garantindo escalabilidade e confiabilidade. Essa configuração também permite configurar preferências de mensagens, gerenciar limites de gastos e rastrear o status de entrega para otimizar as AWS SMS mensagens.\]](http://docs.aws.amazon.com/pt_br/sns/latest/dg/images/sns-sms-end-user-messaging.png)


Os principais recursos a seguir ajudam você a enviar mensagens SMS do Amazon SNS escaláveis e facilmente extensíveis:

**[Personalize as preferências de mensagens](sms_preferences.md)**  
Personalize as entregas de SMS para você Conta da AWS configurando as preferências de SMS com base em seu orçamento e caso de uso. Por exemplo, você pode escolher se as mensagens priorizam o custo ou entrega confiável.

**[Defina cotas de gastos](channels-sms-awssupport-spend-threshold.md)**  
Defina suas entregas SMS ao especificar cotas de gastos para entregas de mensagens individuais e cotas de gastos mensais para sua Conta da AWS. Quando exigido pelas leis e regulamentações locais (como os EUA e o Canadá), os destinatários de SMS [podem](sms_manage.md#sms_manage_optout) optar por não receber mais mensagens SMS de você. Conta da AWS Depois que um destinatário cancela o recebimento de mensagens, você pode, com limitações, incluir o número de telefone para retomar o envio de mensagens.

**[Envie mensagens SMS globalmente](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)**  
O Amazon SNS é compatível com sistemas de mensagens SMS em várias regiões, e permite enviar mensagens para mais de 240 países e regiões.

## Como o Amazon SNS entrega minhas mensagens SMS?
<a name="sns-sms-pinpoint-integration"></a>

Quando você solicita que o Amazon SNS envie SMS em seu nome, as mensagens são enviadas usando AWS End User Messaging SMS. A integração entre o Amazon SNS AWS End User Messaging SMS oferece os seguintes benefícios:

**[Políticas do IAM](sns-mobile-phone-number-getting-started.md#sns-mobile-phone-number-prerequisites)**  
Você pode aproveitar o IAM e as políticas de recursos para controlar e distribuir o acesso aos seus recursos de SMS em outros AWS serviços e regiões.

**Configurações do [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)**  
Todas as configurações relacionadas à ID de originação (criação, atualização de configuração, provisionamento de nova originação IDs, alteração de modelos de registro) são usadas. AWS End User Messaging SMS

**[Faturamento AWS End User Messaging SMS](https://aws.amazon.com/sns/sms-pricing/)**  
No entanto AWS End User Messaging SMS, todo o faturamento por SMS é feito. Você pode consolidar seus AWS gastos com suas cargas de trabalho de SMS e, ao mesmo tempo, adquirir e gerenciar seus recursos de SMS em um local central.

# Conceitos básicos do Amazon SNS SMS
<a name="sns-mobile-phone-number-getting-started"></a>

**Importante**  
O Guia do desenvolvedor de SMS do Amazon SNS foi atualizado. O Amazon SNS foi integrado com [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para a entrega de mensagens SMS. Este Guia contém as informações mais recentes sobre como criar, configurar e gerenciar as mensagens SMS do Amazon SNS.

Este tópico orienta você no gerenciamento de seu sandbox de SMS e na configuração de IAM e políticas baseadas em recursos para conceder ao Amazon SNS as permissões necessárias para acessar e utilizar o. AWS End User Messaging SMS APIs 

## Pré-requisitos
<a name="sns-mobile-phone-number-prerequisites"></a>

O Amazon SNS recomenda atualizar sua política do IAM para incluir as seguintes ações para garantir controle e visibilidade abrangentes sobre seus recursos do Amazon SNS:
+ [`AmazonSNSFullAccess`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSFullAccess)
+ [`AmazonSNSReadOnly`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) 

# Usar sandbox de SMS do Amazon SNS
<a name="sns-sms-sandbox"></a>

As contas SMS recém-criadas do Amazon SNS são automaticamente colocadas na sandbox de SMS para garantir a segurança de clientes e destinatários da AWS, reduzindo o risco de fraude e abuso. Esse ambiente serve como um espaço seguro para fins de teste e desenvolvimento. Ao operar no sandbox de SMS, você tem acesso a todos os recursos do Amazon SNS, mas está sujeito a certas limitações:
+ As mensagens SMS poderão ser enviadas apenas para números de telefone de destino verificados.
+ É possível ter até dez números de telefone de destino verificados.
+ A exclusão de números de telefone de destino só é possível após 24 horas ou mais desde a verificação ou desde a última tentativa de verificação.

Quando a conta for movida para fora da sandbox, essas restrições serão removidas e será possível enviar mensagens SMS para qualquer destinatário.

## Primeiras etapas
<a name="sns-mobile-phone-number-getting-started-steps"></a>

Novas contas do Amazon SNS SMS são colocadas em uma sandbox de SMS. Use as etapas a seguir para criar e gerenciar números de telefone em sua sandbox, criar números de origem e IDs de remetente e registrar sua empresa.

1. Adicione um **número de telefone de destino** à sandbox de SMS. Para obter detalhes sobre como adicionar, gerenciar e mover números de telefone do sandbox de SMS do Amazon SNS, consulte [Adicionar e verificar números de telefone na sandbox de Amazon SNS SMS](sns-sms-sandbox-verifying-phone-numbers.md).

1. Criar uma **identidade de origem** que seus destinatários veem nos dispositivos quando você envia uma mensagem SMS. Para saber mais sobre identidades de origem, incluindo os diferentes tipos que você pode usar, consulte a documentação [Identidades de origem para mensagens do Amazon SNS SMS](channels-sms-originating-identities.md).

1. **Cadastre** sua empresa. Alguns países exigem que você registre a identidade da sua empresa para poder comprar números de telefone ou IDs de remetente e revisar as mensagens enviadas aos destinatários em seus países. Para obter informações sobre quais países precisam de registro, consulte [Países e regiões compatíveis com mensagem de SMS com AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) no *Guia do usuário do AWS End User Messaging SMS*.

1. **Envie** suas mensagens para um tópico ou telefone celular. Para obter mais informações, consulte [Enviar mensagens SMS usando o Amazon SNS](sms_sending-overview.md).

# Adicionar e verificar números de telefone na sandbox de Amazon SNS SMS
<a name="sns-sms-sandbox-verifying-phone-numbers"></a>

Antes de começar a enviar mensagens SMS Conta da AWS enquanto estiver na [sandbox de SMS](sns-sms-sandbox.md), você deve concluir as etapas de configuração a seguir. Isso garante que sua conta esteja pronta para enviar e receber mensagens SMS e que seus números de telefone de destino sejam devidamente verificados.

1. Crie um **[ID de origem](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-number-types.html)**. Assim como acontece com contas que não estão na sandbox de SMS, um ID de origem é necessário antes de enviar mensagens SMS para destinatários em alguns países ou regiões.

1. Adicione os **números de telefone de destino** para os quais você deseja enviar mensagens na sandbox de SMS.

1. Verifique os **números de telefone** para garantir que os números de telefone de destino sejam válidos para uso em suas mensagens SMS.

**Como adicionar e verificar números de telefone de destino**

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

1. No menu do console, selecione uma [região compatível com mensagens SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. No painel de navegação, escolha **Mensagens de texto (SMS)**.

1. Na seção **Números de telefone de destino na sandbox**, selecione **Adicionar número de telefone**.

1. Em **Detalhes do destino**, forneça as seguintes informações e selecione **Adicionar número de telefone**:
   + **Código do país** e **número de telefone** do destino.
   + O **idioma** em que você deseja que a mensagem de verificação seja enviada.

1. Depois de adicionar o número de telefone, o Amazon SNS enviará um OTP para o número de telefone de destino fornecido. Esse OTP é necessário para verificação.

1. Você receberá o OTP como uma mensagem SMS padrão no **número de telefone de destino** fornecido.
   + Se você não receber o OTP em 15 minutos, selecione **Reenviar código de verificação** no console do Amazon SNS.
   + É possível reenviar o OTP até cinco vezes em um período de 24 horas.

1. Depois de receber o OTP, insira-o na caixa **Código de verificação** e selecione **Verificar número de telefone**.

1. Verifique o **status da verificação**.
   + Depois de verificar o número de telefone, o número de telefone e seu status de verificação serão exibidos na seção **Números de telefone de destino da sandbox**.
   + Se o status da verificação for **Pendente**, a verificação não foi bem-sucedida. Isso pode acontecer se, por exemplo, você não inserir o código do país corretamente.
   + A exclusão de números de telefone de destino só é possível após 24 horas ou mais desde a última tentativa de verificação.

1. Se quiser usar o mesmo número de telefone de destino em outras regiões, **repita** as etapas anteriores para cada região em que pretende usá-lo.

## Solução de problemas do não recebimento de um texto OTP
<a name="sns-sms-sandbox-troubleshooting-phone-numbers"></a>

Solucione problemas comuns que podem impedir que um número de telefone receba mensagens de texto OTP.
+ **Limite de gastos com SMS do Amazon SNS:** se sua Conta da AWS excedeu o limite de gastos para enviar mensagens SMS, outras mensagens, incluindo textos OTP, podem não ser entregues até que o limite seja aumentado ou o problema de cobrança seja resolvido.
+ **Número de telefone não ativado para receber notificações por SMS:** em alguns países ou regiões, os destinatários devem optar por receber mensagens SMS a partir de códigos curtos, que são comumente usados para textos OTP. Se o número de telefone do destinatário não estiver ativado, ele não receberá o texto OTP.
+ **Restrições ou filtragem da operadora:** algumas operadoras de celular podem ter restrições ou mecanismos de filtragem que impedem a entrega de certos tipos de mensagens SMS, incluindo textos OTP. Isso pode ser devido a políticas de segurança ou medidas anti-spam implementadas pela operadora.
+ **Número de telefone inválido ou incorreto:** se o número de telefone fornecido pelo destinatário estiver incorreto ou inválido, o texto OTP não será entregue.
+ **Problemas de rede:** problemas ou interrupções temporárias na rede podem impedir a entrega de mensagens SMS, incluindo textos OTP, ao telefone do destinatário.
+ **Entrega atrasada:** em alguns casos, as mensagens SMS podem sofrer atrasos na entrega devido ao congestionamento da rede ou a outros fatores. O texto do OTP pode eventualmente ser entregue, mas pode ser adiado além do prazo esperado.
+ **Suspensão ou encerramento da conta:** Se houver problemas com você Conta da AWS, como falta de pagamento ou violação dos AWS termos de serviço, os recursos de mensagens do Amazon SNS, incluindo mensagens de texto OTP, podem ser suspensos ou encerrados.

# Excluir números de telefone da sandbox de Amazon SNS SMS
<a name="sns-sms-sandbox-deleting-phone-numbers"></a>

É possível excluir tanto números de telefone de destino pendentes como verificados da [sandbox de SMS](sns-sms-sandbox.md).

**Importante**  
Você pode apenas excluir o número de telefone 24 horas após [verificar o número de telefone](sns-sms-sandbox-verifying-phone-numbers.md) ou 24 horas após a última tentativa de verificação.

**Para excluir números de telefone de destino da sandbox de SMS**

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

1. No menu do console, selecione uma [região compatível com mensagens SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html) em que você adicionou um número de telefone de destino.

1. No painel de navegação, selecione **Mensagens de texto (SMS)**.

1. Na página **Mensagens de texto móveis (SMS)**, navegue até a seção **Números de telefone de destino da sandbox**.

1. Escolha o número de telefone específico que você deseja excluir e, em seguida, escolha **Excluir número de telefone**.

1. Para confirmar que deseja excluir o número de telefone, insira **delete me** e escolha **Excluir**.

   Verifique se passaram 24 horas ou mais desde que você verificou ou tentou verificar o número de telefone de destino antes de prosseguir com a exclusão.

1. Repita essas etapas em todas as regiões em que esse número de telefone de destino deve ser utilizado.

# Saída da sandbox do Amazon SNS SMS
<a name="sns-sms-sandbox-moving-to-production"></a>

Para Conta da AWS sair da [sandbox de SMS](sns-sms-sandbox.md), você precisa primeiro adicionar, verificar e testar os números de telefone de destino. Depois de fazer isso, crie um caso com AWS Support.

**Para solicitar que sua AWS conta seja removida da sandbox de SMS**

1. **Verificar número de telefone**

   1. Enquanto você Conta da AWS estiver na sandbox do SMS, abra o console do [Amazon SNS](https://console.aws.amazon.com/sns/home).

   1. No painel de navegação, em Dispositivo móvel, escolha **Mensagens de texto (SMS)**.

   1. Na seção de números de telefone de destino da sandbox, [adicione e verifique](sns-sms-sandbox-verifying-phone-numbers.md) um ou mais números de telefone de destino. Essa verificação garante que você possa enviar e receber mensagens com sucesso.

1. **Testar a publicação de SMS**

   1. Confirme se é possível publicar e receber mensagens em pelo menos um número de telefone de destino verificado. Para obter instruções mais detalhadas sobre como publicar mensagens SMS, consulte [Publicação de mensagens SMS em um telefone celular usando o Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

1. **Iniciar a edição do sandbox**

   1. Na página **Mobile text messaging (SMS)** (Mensagens de texto móveis (SMS)) do console do Amazon SNS, em **Account information** (Informações da conta), escolha **Exit SMS sandbox** (Sair da sandbox de SMS). Essa ação redireciona você para o [Central de suporte da Amazon](https://support.console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase) e cria automaticamente um caso de suporte com a opção de **aumento da cota de serviço** selecionada.

1. **Preencher o formulário**

   1. No formulário de suporte em **Aumento da cota de serviços**, faça o seguinte:

     1. Escolha escolher **Mensagens de texto SNS** como serviço.

     1. Forneça o **URL do site** ou o **nome do aplicativo** a partir do qual você pretende enviar mensagens SMS.

     1. Especifique o tipo de mensagem que você pretende enviar: **Senha de uso único**, **Promocional** ou **Transacional**.

     1. Escolha a **Região da AWS** a partir da qual você enviará mensagens SMS.

     1. Liste os **países** ou as **regiões** para os quais você pretende enviar mensagens SMS.

     1. Descreva como seus clientes **optam por receber mensagens**.

     1. Inclua qualquer **modelo de mensagem** que você pretenda usar.

1. **Especificar cota e região**

   1. Em **Solicitações**, faça o seguinte:

     1. Escolha para **Região da AWS**onde você deseja mover seu Conta da AWS.

     1. Escolha **Limites gerais** para **Tipo de recurso**.

     1. Escolha **Sair da sandbox de SMS** para **Cota**.

     1. (Opcional) Para solicitar aumentos adicionais ou outros ajustes, escolha **Adicionar outra solicitação** e especifique os detalhes necessários.

     1. Em **Novo valor de cota**, insira o **limite** em USD que você está solicitando.

1. **Outros detalhes**

   1. Na **descrição do caso**, forneça detalhes adicionais relevantes à sua solicitação.

   1. Expanda **Opções de contato**, e escolha o **Idioma de contato preferido**.

1. **Envie a solicitação**

   1. Escolha **Enviar** para enviar a solicitação para Suporte.

A Suporte equipe fornece uma resposta inicial à sua solicitação em 24 horas.

Para evitar que nossos sistemas sejam usados para enviar conteúdo indesejado ou malicioso, consideramos cuidadosamente cada solicitação. Se for possível, atenderemos à sua solicitação dentro desse período de 24 horas. No entanto, se for necessário solicitar mais informações a você, o tempo de resolução poderá ser mais longo.

Se o seu caso de uso não estiver alinhado com nossas políticas, talvez não seja possível atender à sua solicitação.

# Identidades de origem para mensagens do Amazon SNS SMS
<a name="channels-sms-originating-identities"></a>

**Importante**  
O Guia do desenvolvedor de SMS do Amazon SNS foi atualizado. O Amazon SNS foi integrado com [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para a entrega de mensagens SMS. Este Guia contém as informações mais recentes sobre como criar, configurar e gerenciar as mensagens SMS do Amazon SNS.

As identidades de origem de mensagens SMS são identificadores usados para representar o remetente de uma mensagem SMS. Você pode se identificar para seus destinatários usando os seguintes tipos de identidades de origem:

**Números de origem**  
Uma cadeia numérica que identifica o número de telefone do remetente da mensagem SMS. Existem vários tipos de números de origem, incluindo códigos longos (números de telefone padrão que normalmente têm 10 ou mais dígitos), códigos longos de 10 dígitos (10DLC), números gratuitos (TFN) e códigos curtos (números de telefone que contêm entre 4 e 7 dígitos).  
O suporte para números de origem não está disponível em países onde as leis locais exijam o uso do remetente IDs em vez dos números de origem. Quando você envia uma mensagem SMS usando um número de origem, o dispositivo do destinatário mostra o número de origem como o número de telefone do remetente. É possível especificar diferentes números de origem por caso de uso.  
Para obter mais informações, consulte [Números de telefone](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) no *Guia do usuário do AWS End User Messaging SMS *.  
**Para ver uma lista de todos os números de origem existentes em sua AWS conta, no painel de navegação do console do [Amazon SNS](https://console.aws.amazon.com/sns/home), escolha Números de origem.**

**Remetente IDs**  
Um nome alfabético que identifica o remetente de uma mensagem SMS. Quando você envia uma mensagem SMS usando um ID de remetente, e o destinatário está em uma área que oferece suporte à autenticação de ID de remetente, o ID desse remetente é exibido no dispositivo do destinatário em lugar de seu número de telefone. Um ID de remetente fornece aos destinatários de SMS mais informações sobre o remetente do que um número de telefone, código longo ou código simplificado.  
 IDs Os remetentes são suportados em vários países e regiões ao redor do mundo. Em alguns lugares, se a sua empresa envia mensagens SMS para clientes individuais, você deve usar um ID de remetente pré-registrado em uma agência reguladora ou grupo do setor. Para obter uma lista completa de países e regiões que oferecem suporte ou exigem remetente IDs, consulte [Países e regiões com suporte para mensagens SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) no *Guia do AWS End User Messaging SMS usuário*.  
Não há cobrança adicional pelo uso do remetente IDs. No entanto, o suporte e os requisitos para autenticação de ID de remetente variam de acordo com o país. Vários mercados importantes (incluindo Canadá, China e Estados Unidos da América) não suportam IDs o uso do remetente. Algumas áreas exigem que as empresas que enviam mensagens SMS para clientes individuais usem um ID de remetente pré-registrado junto a uma agência reguladora ou grupo do setor.  
Para obter informações adicionais, consulte [Remetente IDs](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) no *Guia do AWS End User Messaging SMS Usuário*.

# Configurar mensagens SMS no Amazon SNS
<a name="channels-sms-configurations"></a>

**Importante**  
O Guia do desenvolvedor de SMS do Amazon SNS foi atualizado. O Amazon SNS foi integrado com [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para a entrega de mensagens SMS. Este Guia contém as informações mais recentes sobre como criar, configurar e gerenciar as mensagens SMS do Amazon SNS.

Você pode usar as configurações no Amazon SNS SMS para definir preferências de SMS de acordo com suas necessidades, como ajustar cotas de gastos e configurar o registro do status de entrega. Este tópico também fornece detalhes sobre como publicar mensagens SMS em tópicos usando o console do Amazon SNS e o AWS SDK, lidar com cotas de forma eficiente e recuperar estatísticas detalhadas sobre a atividade de SMS.

# Enviar mensagens SMS usando o Amazon SNS
<a name="sms_sending-overview"></a>

Esta seção descreve como enviar mensagens SMS usando o Amazon SNS, incluindo publicar em um tópico, inscrever números de telefone em tópicos, definir atributos em mensagens e publicar diretamente em telefones celulares.

## Publicar mensagens de SMS em um tópico do Amazon SNS
<a name="sms_publish-to-topic"></a>

É possível publicar uma única mensagem SMS em vários números de telefone de uma só vez inscrevendo esses números de telefone em um tópico do Amazon SNS. Um tópico do Amazon SNS é um canal de comunicação para o qual é possível adicionar inscritos e publicar mensagens para todos esses inscritos. Um assinante recebe todas as mensagens publicadas no tópico até que você cancele a assinatura ou até que o assinante opte por não receber mensagens SMS da sua conta. AWS 

### Enviando uma mensagem para um tópico usando o AWS console
<a name="sms_publish-to-topic_console"></a>

**Para criar um tópico**

Realize as seguintes etapas se você ainda não tiver um tópico para o qual deseja enviar mensagens SMS.

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

1. No menu do console, selecione uma [região compatível com mensagens SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. No painel de navegação, escolha **Tópicos**.

1. Na página **Topics** (Tópicos), escolha **Create topic** (Criar tópico).

1. Na página **Create topic** (Criar tópico), em **Details** (Detalhes), faça o seguinte:

   1. Em **Tipo**, escolha **Padrão**.

   1. Em **Name** (Nome), insira um nome para o tópico.

   1. (Opcional) Para **Display name** (Nome de exibição), digite um prefixo personalizado para suas mensagens SMS. Quando você envia uma mensagem para o tópico, o Amazon SNS acrescenta o nome de exibição seguido por uma seta para a direita (>) e um espaço. Os nomes de exibição não fazem distinção entre maiúsculas e minúsculas e o Amazon SNS converte os nomes de exibição para caracteres maiúsculos. Por exemplo, se o nome de exibição de um tópico é `MyTopic` e a mensagem é `Hello World!`, a mensagem é exibida como:

      ```
      MYTOPIC> Hello World!
      ```

1. Escolha **Criar tópico**. O nome do tópico e o nome do recurso da Amazon (ARN) aparecem na página **Topics** (Tópicos).

**Para criar uma assinatura de SMS**

Use assinaturas para enviar uma mensagem SMS para vários destinatários publicando a mensagem somente uma vez em seu tópico.
**nota**  
Quando você começa a usar o Amazon SNS para enviar mensagens SMS, sua AWS conta está na sandbox de *SMS*. A sandbox de SMS oferece um ambiente seguro para testar os recursos do Amazon SNS sem arriscar a reputação como remetente do SMS. Enquanto sua conta estiver na sandbox de SMS, é possível usar todos os recursos do Amazon SNS, mas as mensagens SMS podem ser enviadas somente para números de telefone de destino verificados. Para obter mais informações, consulte [Usar sandbox de SMS do Amazon SNS](sns-sms-sandbox.md).

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

1. No painel de navegação, escolha **Assinaturas**.

1. Na página **Assinaturas**, escolha **Criar assinatura**.

1. Na página **Create subscription** (Criar assinatura), na seção **Details** (Detalhes), faça o seguinte:

   1. Em **Topic ARN** (ARN do tópico), insira ou escolha o nome do recurso da Amazon (ARN) do tópico para o qual você deseja enviar mensagens SMS.

   1. Para **Protocol** (Protocolo), escolha **SMS**.

   1. Para **Endpoint** digite o número de telefone que você deseja assinar para seu tópico.

1. Selecione **Criar assinatura**. As informações da assinatura são exibidas na página **Subscriptions** (Assinaturas).

   Para adicionar mais números de telefone, repita essas etapas. Também é possível adicionar outros tipos de assinaturas, como e-mail.

**Para enviar uma mensagem**

Quando você publica uma mensagem em um tópico, o Amazon SNS tenta entregar essa mensagem para cada número de telefone inscrito no tópico.

1. No [console do Amazon SNS](https://console.aws.amazon.com/sns/home), na página **Topics** (Tópicos), escolha o nome do tópico para o qual você deseja enviar mensagens SMS.

1. Na página de detalhes do tópico, selecione **Publicar mensagem**.

1. Na página **Publish message to topic** (Publicar mensagem no tópico), em **Message details** (Detalhes da mensagem), faça o seguinte:

   1. Em **Subject** (Assunto), deixe o campo em branco, a menos que o tópico contenha inscrições de e-mail e você queira publicar nas inscrições por e-mail e por SMS. O Amazon SNS usará o **Subject** (Assunto) que você inserir como linha de assunto do e-mail.

   1. (Opcional) Para**Time to Live (TTL)** (Vida útil (TTL)), insira o número de segundos que o Amazon SNS tem para enviar sua mensagem SMS para qualquer assinante de endpoint de aplicação móvel.

1. Em **Message body** (Corpo da mensagem), faça o seguinte:

   1. Em **Message structure** (Estrutura de mensagem), escolha **Identical payload for all delivery protocols** (Carga útil idêntica para todos os protocolos de entrega) para enviar a mesma mensagem para todos os tipos de protocolo inscritos no tópico. Ou escolha **Custom payload for each delivery protocol** (Carga útil personalizada para cada protocolo de entrega) para personalizar a mensagem direcionada a assinantes de diferentes tipos de protocolo. Por exemplo, é possível inserir uma mensagem padrão para assinantes de número de telefone e uma mensagem personalizada para assinantes de e-mail.

   1. Em **Message body to send to the endpoint** (Corpo da mensagem a ser enviada para o endpoint), insira sua mensagem ou suas mensagens personalizadas por protocolo de entrega.

      Se o tópico tem um nome de exibição, o Amazon SNS adiciona-o à mensagem, o que aumenta o tamanho da mensagem. O tamanho do nome de exibição é o número de caracteres no nome, mais dois caracteres para a seta (>) e o espaço adicionado pelo Amazon SNS.

      Para obter mais informações sobre as cotas de tamanho de mensagens SMS, consulte [Publicação de mensagens SMS em um telefone celular usando o Amazon SNS](#sms_publish-to-phone).

1. (Opcional) Para **atributos de mensagem**, adicione metadados de mensagem, como carimbos de data/hora, assinaturas e. IDs

1. Selecione **Publish message (Publicar mensagem)**. O Amazon SNS envia a mensagem SMS e exibe uma mensagem de êxito.

### Enviar uma mensagem para um tópico usando o AWS SDKs
<a name="sms_publish-to-topic_sdk"></a>

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

O código de exemplo a seguir mostra como:
+ Criar um tópico do Amazon SNS.
+ Inscrever números de telefone no tópico.
+ Publicar mensagens SMS no tópico para que todos os números de telefone inscritos recebam a mensagem de uma só vez.

------
#### [ 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). 
Criar um tópico e retorne seu ARN.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
import software.amazon.awssdk.services.sns.model.CreateTopicResponse;
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
 */
public class CreateTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicName>

                Where:
                   topicName - The name of the topic to create (for example, mytopic).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicName = args[0];
        System.out.println("Creating a topic with name: " + topicName);
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String arnVal = createSNSTopic(snsClient, topicName);
        System.out.println("The topic ARN is" + arnVal);
        snsClient.close();
    }

    public static String createSNSTopic(SnsClient snsClient, String topicName) {
        CreateTopicResponse result;
        try {
            CreateTopicRequest request = CreateTopicRequest.builder()
                    .name(topicName)
                    .build();

            result = snsClient.createTopic(request);
            return result.topicArn();

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
}
```
Inscreva um endpoint em um tópico.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * 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
 */
public class SubscribeTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicArn> <phoneNumber>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   phoneNumber - A mobile phone number that receives notifications (for example, +1XXX5550100).
                """;

        if (args.length < 2) {
            System.out.println(usage);
            System.exit(1);
        }

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

        subTextSNS(snsClient, topicArn, phoneNumber);
        snsClient.close();
    }

    public static void subTextSNS(SnsClient snsClient, String topicArn, String phoneNumber) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("sms")
                    .endpoint(phoneNumber)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Defina atributos na mensagem, como o ID do remetente, o preço máximo e seu tipo. Os atributos de mensagem são opcionais.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * 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
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Publique uma mensagem em um tópico. A mensagem é enviada para todos os assinantes.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
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
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

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

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

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

------

## Publicação de mensagens SMS em um telefone celular usando o Amazon SNS
<a name="sms_publish-to-phone"></a>

É possível usar o Amazon SNS para enviar mensagens SMS diretamente para um telefone celular sem inscrever o número de telefone em um tópico do Amazon SNS.

**nota**  
A inscrição de números de telefone em um tópico é útil se você quer enviar uma mensagem para vários números de telefone de uma só vez. Para obter instruções sobre como publicar uma mensagem SMS em um tópico, consulte [Publicar mensagens de SMS em um tópico do Amazon SNS](#sms_publish-to-topic).

Ao enviar uma mensagem, é possível controlar se a mensagem é otimizada para custos ou confiabilidade de entrega. Também é possível especificar um [ID do remetente ou número de origem](channels-sms-originating-identities.md). Se você enviar a mensagem programaticamente usando a API do Amazon SNS ou AWS SDKs a, você pode especificar um preço máximo para a entrega da mensagem.

Cada mensagem SMS pode ter até 140 bytes, e a cota de caracteres depende do esquema de codificação. Por exemplo, uma mensagem SMS pode incluir:
+ 160 caracteres GSM
+ 140 caracteres ASCII
+ 70 caracteres UCS-2

Se você publicar uma mensagem que exceda a cota de tamanho, o Amazon SNS a enviará como várias mensagens, cada uma delas respeitando a cota de tamanho. Para isso, as palavras são mantidas inteiras na mensagem, não cortadas. O tamanho total da cota de uma única ação de publicação de SMS é de 1.600 bytes.

Ao enviar uma mensagem SMS, você especifica o número de telefone com o formato E.164, que é uma estrutura padrão de numeração de telefones para telecomunicação internacional. Os números de telefone que seguem esse formato podem conter no máximo 15 dígitos junto como prefixo de um sinal de adição (\$1) e o código do país. Por exemplo, um número de telefone dos EUA no formato E.164 aparece como \$11. XXX5550100

### Enviar uma mensagem (console)
<a name="sms_publish_console"></a>

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

1. No menu do console, selecione uma [região compatível com mensagens SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. No painel de navegação, escolha **Mensagens de texto (SMS)**.

1. Na página **Mobile text messaging (SMS)** (Mensagens de texto para dispositivos móveis (SMS)), selecione **Publish text message** (Publicar mensagem de texto).

1. Na página **Publish SMS message** (Publicar mensagem SMS), para **Message type** (Tipo de mensagem), escolha uma das seguintes opções:
   + **Promotional** (Promocional): mensagens não essenciais, como mensagens de marketing.
   + **Transactional** (Transacional): mensagens urgentes que oferecem suporte para transações do cliente, como senhas únicas para autenticação multifator.
**nota**  
Essa configuração em nível de mensagem substitui o tipo de mensagem padrão em nível de conta. É possível definir um tipo de mensagem padrão em nível de conta na seção **Text messaging preferences** (Opções de mensagens de texto) da página **Mobile text messaging (SMS)** (Mensagens de texto para dispositivos móveis (SMS)).

   Para obter informações sobre mensagens promocionais e transacionais, consulte [Worldwide SMS Pricing](https://aws.amazon.com/sns/sms-pricing/) (Preço global para SMS).

1. Em **Destination phone number** (Número de telefone de destino), digite o número de telefone para o qual você deseja enviar a mensagem.

1. Em **Message** (Mensagem), digite a mensagem a ser enviada.

1. (Opcional) Em **Origination identities** (Identidades de origem), especifique como você se identificará para seus destinatários:
   + Para especificar um **Sender ID** (ID do remetente), digite um ID personalizado que contenha de 3 a 11 caracteres alfanuméricos sem espaços, com pelo menos uma letra. O ID do remetente é exibido como o remetente da mensagem no dispositivo receptor. Por exemplo, é possível usar a marca de sua empresa para tornar a origem da mensagem mais fácil de reconhecer.

     Support para remetente IDs varia de acordo com o país e a and/or região. Por exemplo, as mensagens enviadas para os números de telefone dos EUA não exibirão o ID do remetente. Para os países e regiões que oferecem suporte ao remetente IDs, consulte [Países e regiões com suporte para mensagens SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) no *Guia do AWS End User Messaging SMS usuário*.

     Se você não especificar um ID do remetente, uma das seguintes informações será exibida como identidade de origem:
     + Em países com suporte para códigos longos, o código longo será exibido.
     + Em países onde somente o remetente IDs é suportado, o *AVISO* é exibido.

     Esse ID do remetente no nível de mensagem substitui o ID de remetente padrão, que você define na página **Preferências de mensagens de texto**.
   + Para especificar um **Origination number** (Número de origem), insira uma string de 5 a 14 números para ser exibida como número de telefone do remetente no dispositivo do receptor. Essa sequência de caracteres deve corresponder a um número de origem configurado em seu Conta da AWS para o país de destino. O número de origem pode ser um número 10DLC, um número gratuito, um código person-to-person longo ou um código curto. Para obter mais informações, consulte [Identidades de origem para mensagens do Amazon SNS SMS](channels-sms-originating-identities.md).

     Se você não especificar um número de origem, o Amazon SNS selecionará um número de origem a ser usado para a mensagem de texto SMS, com base na configuração de sua Conta da AWS .

1. Se você estiver enviando mensagens SMS para destinatários na Índia, expanda **Country-specific attributes** (Atributos específicos do país) e especifique estes atributos:
   + **Entity ID** (ID da entidade): o ID da entidade ou ID da Principal Entity (PE – Entidade principal) para enviar mensagens SMS a destinatários na Índia. Esse ID é uma string exclusiva de 1 a 50 caracteres que a Telecom Regulatory Authority of India (TRAI) fornece para identificar a entidade que você registrou junto a ela.
   + **Template ID** (ID do modelo): o ID de modelo para enviar mensagens SMS a destinatários na Índia. Esse ID é uma string exclusiva de 1 a 50 caracteres fornecida pela TRAI que identifica o modelo que você registrou junto a ela. O ID do modelo deve ser associado ao ID do remetente que você especificou para a mensagem.

   Para obter mais informações sobre como enviar mensagens SMS para destinatários na [Índia, consulte o processo de registro de IDs do remetente](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations-sms-senderid-india.html) no *Guia do Usuário do AWS End User Messaging SMS *.

1. Selecione **Publish message (Publicar mensagem)**.

**dica**  
Para enviar mensagens SMS de um número de origem, você também pode escolher **Origination numbers** (Números de origem) no painel de navegação do console do Amazon SNS. Escolha um número de origem que inclua **SMS** na coluna **Capacities** (Recursos) e, em seguida, escolha **Publish text message** (Publicar mensagem de texto).

### Enviando uma mensagem (AWS SDKs)
<a name="sms_publish_sdk"></a>

Para enviar uma mensagem SMS usando um dos AWS SDKs, use a operação de API nesse SDK que corresponde à `Publish` solicitação na API do Amazon SNS. Com essa solicitação, você pode enviar uma mensagem SMS diretamente para um número de telefone. Você também pode usar o parâmetro `MessageAttributes` para definir valores para os seguintes nomes de atributos:

**`AWS.SNS.SMS.SenderID`**  
Um ID personalizado que contenha de 3 a 11 caracteres alfanuméricos ou caracteres de hífen (-) sem espaços, com pelo menos uma letra. O ID do remetente é exibido como o remetente da mensagem no dispositivo receptor. Por exemplo, é possível usar a marca de sua empresa para ajudar a tornar a origem da mensagem mais fácil de reconhecer.  
Support para remetente IDs varia de acordo com o país ou a região. Por exemplo, as mensagens enviadas para os números de telefone dos EUA não exibem o ID do remetente. Para obter uma lista dos países ou regiões que oferecem suporte ao remetente IDs, consulte [Países e regiões com suporte para mensagens SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) no *Guia do AWS End User Messaging SMS usuário*.  
Se você não especificar um ID do remetente, um [código longo](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-long-code.html) será exibido como o ID do remetente nos países ou regiões compatíveis. Para países ou regiões que exigem um ID do remetente alfabético, um *AVISO* será exibido como o ID do remetente.  
Esse atributo de mensagem substitui o atributo no nível da contas `DefaultSenderID` que você pode definir usando a solicitação `SetSMSAttributes`.

**`AWS.MM.SMS.OriginationNumber`**  
Uma string personalizada de 5 a 14 números, que pode incluir um sinal de adição opcional à esquerda (`+`). Essa string numérica aparece como o número de telefone do remetente no dispositivo receptor. A sequência de caracteres deve corresponder a um número de origem configurado na sua AWS conta para o país de destino. O número de origem pode ser um número 10DLC, número gratuito, código longo person-to-person (P2P) ou código curto. Para obter mais informações, consulte [Números de telefone](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) no *Guia do usuário do AWS End User Messaging SMS *.  
Se você não especificar um número de originação, o Amazon SNS escolherá um número de origem com base na configuração da sua conta. AWS 

**`AWS.SNS.SMS.MaxPrice`**  
O preço máximo em USD que você está disposto a gastar para enviar a mensagem SMS. Se o Amazon SNS determinar que enviar a mensagem pode gerar um custo que ultrapassaria o preço máximo, ele não enviará a mensagem.  
Esse atributo não tem efeito se seus custos de month-to-date SMS já tiverem excedido a cota definida para o `MonthlySpendLimit` atributo. É possível definir o atributo `MonthlySpendLimit` usando a solicitação `SetSMSAttributes`.  
Se você está enviando a mensagem para um tópico do Amazon SNS, o preço máximo se aplica a cada entrega de mensagem para cada número de telefone inscrito no tópico.

**`AWS.SNS.SMS.SMSType`**  
O tipo de mensagem que você está enviando:  
+ **`Promotional`** (padrão): mensagens não essenciais, como mensagens de marketing.
+ **`Transactional`**: mensagens essenciais que oferecem suporte a transações do cliente, como senhas únicas para autenticação multifator.
Esse atributo de mensagem substitui o atributo no nível da contas `DefaultSMSType` que você pode definir usando a solicitação `SetSMSAttributes`.

**`AWS.MM.SMS.EntityId`**  
Esse atributo é necessário somente para enviar mensagens SMS a destinatários na Índia.  
Esse é o ID da entidade ou ID da Principal Entity (PE – Entidade principal) para enviar mensagens SMS a destinatários na Índia. Esse ID é uma string exclusiva de 1 a 50 caracteres que a Telecom Regulatory Authority of India (TRAI) fornece para identificar a entidade que você registrou junto a ela.

**`AWS.MM.SMS.TemplateId`**  
Esse atributo é necessário somente para enviar mensagens SMS a destinatários na Índia.  
Este é o seu modelo para enviar mensagens SMS a destinatários na Índia. Esse ID é uma string exclusiva de 1 a 50 caracteres fornecida pela TRAI que identifica o modelo que você registrou junto a ela. O ID do modelo deve ser associado ao ID do remetente que você especificou para a mensagem.

#### Enviar uma mensagem
<a name="sms_publish_sdks"></a>

Os exemplos de código a seguir mostram como publicar mensagens SMS usando o Amazon SNS.

------
#### [ .NET ]

**SDK para .NET**  
 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/dotnetv3/SNS#code-examples). 

```
namespace SNSMessageExample
{
    using System;
    using System.Threading.Tasks;
    using Amazon;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    public class SNSMessage
    {
        private AmazonSimpleNotificationServiceClient snsClient;

        /// <summary>
        /// Initializes a new instance of the <see cref="SNSMessage"/> class.
        /// Constructs a new SNSMessage object initializing the Amazon Simple
        /// Notification Service (Amazon SNS) client using the supplied
        /// Region endpoint.
        /// </summary>
        /// <param name="regionEndpoint">The Amazon Region endpoint to use in
        /// sending test messages with this object.</param>
        public SNSMessage(RegionEndpoint regionEndpoint)
        {
            snsClient = new AmazonSimpleNotificationServiceClient(regionEndpoint);
        }

        /// <summary>
        /// Sends the SMS message passed in the text parameter to the phone number
        /// in phoneNum.
        /// </summary>
        /// <param name="phoneNum">The ten-digit phone number to which the text
        /// message will be sent.</param>
        /// <param name="text">The text of the message to send.</param>
        /// <returns>Async task.</returns>
        public async Task SendTextMessageAsync(string phoneNum, string text)
        {
            if (string.IsNullOrEmpty(phoneNum) || string.IsNullOrEmpty(text))
            {
                return;
            }

            // Now actually send the message.
            var request = new PublishRequest
            {
                Message = text,
                PhoneNumber = phoneNum,
            };

            try
            {
                var response = await snsClient.PublishAsync(request);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error sending message: {ex}");
            }
        }
    }
}
```
+  Consulte detalhes da API em [Publish](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Publish) na *Referência da API AWS SDK para .NET *. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 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/cpp/example_code/sns#code-examples). 

```
/**
 * Publish SMS: use Amazon Simple Notification Service (Amazon SNS) to send an SMS text message to a phone number.
 * Note: This requires additional AWS configuration prior to running example. 
 * 
 *  NOTE: When you start using Amazon SNS to send SMS messages, your AWS account is in the SMS sandbox and you can only
 *  use verified destination phone numbers. See https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html.
 *  NOTE: If destination is in the US, you also have an additional restriction that you have use a dedicated
 *  origination ID (phone number). You can request an origination number using Amazon Pinpoint for a fee.
 *  See https://aws.amazon.com/blogs/compute/provisioning-and-using-10dlc-origination-numbers-with-amazon-sns/ 
 *  for more information. 
 * 
 *  <phone_number_value> input parameter uses E.164 format. 
 *  For example, in United States, this input value should be of the form: +12223334444
 */

//! Send an SMS text message to a phone number.
/*!
  \param message: The message to publish.
  \param phoneNumber: The phone number of the recipient in E.164 format.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::publishSms(const Aws::String &message,
                             const Aws::String &phoneNumber,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::PublishRequest request;
    request.SetMessage(message);
    request.SetPhoneNumber(phoneNumber);

    const Aws::SNS::Model::PublishOutcome outcome = snsClient.Publish(request);

    if (outcome.IsSuccess()) {
        std::cout << "Message published successfully with message id, '"
                  << outcome.GetResult().GetMessageId() << "'."
                  << std::endl;
    }
    else {
        std::cerr << "Error while publishing message "
                  << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Consulte detalhes da API em [Publish](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Publish) na *Referência da API AWS SDK para C\$1\$1 *. 

------
#### [ 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.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
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
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

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

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Consulte detalhes da API em [Publish](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Publish) na *Referência da API AWS SDK for Java 2.x *. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 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/kotlin/services/sns#code-examples). 

```
suspend fun pubTextSMS(
    messageVal: String?,
    phoneNumberVal: String?,
) {
    val request =
        PublishRequest {
            message = messageVal
            phoneNumber = phoneNumberVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.publish(request)
        println("${result.messageId} message sent.")
    }
}
```
+  Consulte detalhes da API em [Publish](https://sdk.amazonaws.com/kotlin/api/latest/index.html) na *Referência da API AWS SDK para Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no [Repositório de exemplos de código da AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Sends a text message (SMS message) directly to a phone number using Amazon SNS.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1XXX5550100';

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'PhoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#publish-to-a-text-message-sms-message). 
+  Para obter detalhes da API, consulte [Publish](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Publish) na *Referência da API do AWS SDK para PHP *. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 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/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    def publish_text_message(self, phone_number, message):
        """
        Publishes a text message directly to a phone number without need for a
        subscription.

        :param phone_number: The phone number that receives the message. This must be
                             in E.164 format. For example, a United States phone
                             number might be +12065550101.
        :param message: The message to send.
        :return: The ID of the message.
        """
        try:
            response = self.sns_resource.meta.client.publish(
                PhoneNumber=phone_number, Message=message
            )
            message_id = response["MessageId"]
            logger.info("Published message to %s.", phone_number)
        except ClientError:
            logger.exception("Couldn't publish message to %s.", phone_number)
            raise
        else:
            return message_id
```
+  Consulte detalhes da API em [Publish](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Publish) na *Referência da API AWS SDK for Python (Boto3)*. 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 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/sap-abap/services/sns#code-examples). 

```
    " iv_phone_number = '+12065550101' - Phone number in E.164 format
    TRY.
        oo_result = lo_sns->publish(              " oo_result is returned for testing purposes. "
          iv_phonenumber = iv_phone_number
          iv_message = iv_message ).
        MESSAGE 'Message published to phone number.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Phone number does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Para obter os detalhes da API, consulte [Publicar](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) na *Referência da API do AWS SDK para SAP ABAP*. 

------

# Definir preferências de mensagens SMS no Amazon SNS
<a name="sms_preferences"></a>

Use o Amazon SNS para especificar preferências para mensagens SMS. Por exemplo, é possível especificar se as entregas serão otimizadas para fins de custo ou confiabilidade, o limite de gastos mensais, como as entregas serão registradas e a inscrição em relatórios diários de uso de SMS.

Essas preferências entrarão em vigor para cada mensagem SMS que você enviar de sua conta, mas será possível substituir algumas delas quando enviar uma mensagem individual. Para obter mais informações, consulte [Publicação de mensagens SMS em um telefone celular usando o Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

## Configurando as preferências de mensagens SMS usando o Console de gerenciamento da AWS
<a name="sms_preferences_console"></a>

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

1. Escolha uma [região que ofereça suporte a mensagens SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. No painel de navegação, escolha **Dispositivo móvel** e **Mensagens de texto (SMS)**.

1. Na página **Mobile text messaging (SMS) [Mensagens de texto (SMS) em dispositivos móveis]**, na seção **Text messaging preferences (Preferências de mensagens de texto)**, escolha **Edit (Editar)**.

1. Na página **Editar preferências de mensagens SMS**, na seção **Detalhes**, faça o seguinte:

   1. Em **Tipo de mensagem padrão**, selecione uma das seguintes opções:
      + **Promocional**: mensagens não essenciais (por exemplo, de marketing). O Amazon SNS otimiza a entrega de mensagens para gerar o custo mais baixo.
      + **Transnacional** (padrão): mensagens urgentes que comportam transações do cliente, como senhas únicas para autenticação multifator. O Amazon SNS otimiza a entrega de mensagens para gerar a mais alta confiabilidade.

      Para obter informações sobre a definição de preços para mensagens promocionais e transacionais, consulte [Definição global de preço para SMS](https://aws.amazon.com/sns/sms-pricing/).

   1. (Opcional) Em **Limite de gastos da conta**, insira a quantidade máxima (em dólares americanos) que você deseja gastar em mensagens SMS a cada mês.
**Importante**  
Por padrão, a cota de gasto é definida como 1,00 USD. Se desejar aumentar a cota de serviço, [envie uma solicitação](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-sns).
Se o valor definido no console exceder sua cota de serviço, o Amazon SNS interromperá a publicação de mensagens SMS.
Como o Amazon SNS é um sistema distribuído, ele interromperá o envio de mensagens SMS minutos depois que a cota de gasto for excedida. Durante esse intervalo, se você continuar a enviar mensagens SMS, poderá incorrer em custos que excederão sua cota.

1. (Opcional) Em **ID do remetente padrão**, insira um ID personalizado, como a marca de sua empresa, que será exibido como o remetente do dispositivo receptor.
**nota**  
Support para remetente IDs varia de acordo com o país.

1. (Opcional) Digite o **Amazon S3 bucket name for usage reports** (Nome do bucket do Amazon S3 para relatórios de uso).
**nota**  
A política de bucket do Amazon S3 deve conceder acesso de gravação ao Amazon SNS.

1. Escolha **Salvar alterações**.

## Definindo preferências (AWS SDKs)
<a name="sms_preferences_sdk"></a>

Para definir suas preferências de SMS usando um dos AWS SDKs, use a ação nesse SDK que corresponde à `SetSMSAttributes` solicitação na API do Amazon SNS. Com essa solicitação, você atribui valores para os diferentes atributos de SMS, como sua cota de gasto mensal e seu tipo de SMS padrão (promocional ou transacional). Para todos os atributos de SMS, consulte [Definir SMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html) na *referência da API do Amazon Simple Notification Service*.

Os exemplos de código a seguir mostram como usar o `SetSMSAttributes`.

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 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/cpp/example_code/sns#code-examples). 
Como usar o Amazon SNS para definir o atributo padrãoSMSType .  

```
//! Set the default settings for sending SMS messages.
/*!
  \param smsType: The type of SMS message that you will send by default.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::setSMSType(const Aws::String &smsType,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SetSMSAttributesRequest request;
    request.AddAttributes("DefaultSMSType", smsType);

    const Aws::SNS::Model::SetSMSAttributesOutcome outcome = snsClient.SetSMSAttributes(
            request);

    if (outcome.IsSuccess()) {
        std::cout << "SMS Type set successfully " << std::endl;
    }
    else {
        std::cerr << "Error while setting SMS Type: '"
                  << outcome.GetError().GetMessage()
                  << "'" << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Para obter detalhes da API, consulte [Definir SMSAttributes](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/SetSMSAttributes) na *referência AWS SDK para C\$1\$1 da API*. 

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

**AWS CLI**  
**Para definir atributos de mensagens SMS**  
O exemplo `set-sms-attributes` a seguir define o ID do remetente padrão para mensagens SMS como `MyName`.  

```
aws sns set-sms-attributes \
    --attributes DefaultSenderID=MyName
```
Este comando não produz saída.  
+  Para obter detalhes da API, consulte [Definir SMSAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-sms-attributes.html) na *Referência de AWS CLI Comandos*. 

------
#### [ 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.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * 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
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obter detalhes da API, consulte [Definir SMSAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetSMSAttributes) na *referência AWS SDK for Java 2.x da API*. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 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/javascriptv3/example_code/sns#code-examples). 
Crie o cliente em um módulo separado e exporte-o.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe o SDK e os módulos do cliente e chame a API.  

```
import { SetSMSAttributesCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {"Transactional" | "Promotional"} defaultSmsType
 */
export const setSmsType = async (defaultSmsType = "Transactional") => {
  const response = await snsClient.send(
    new SetSMSAttributesCommand({
      attributes: {
        // Promotional – (Default) Noncritical messages, such as marketing messages.
        // Transactional – Critical messages that support customer transactions,
        // such as one-time passcodes for multi-factor authentication.
        DefaultSMSType: defaultSmsType,
      },
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '1885b977-2d7e-535e-8214-e44be727e265',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-setattributes). 
+  Para obter detalhes da API, consulte [Definir SMSAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetSMSAttributesCommand) na *referência AWS SDK para JavaScript da API*. 

------
#### [ PHP ]

**SDK para PHP**  
 Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no [Repositório de exemplos de código da AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->SetSMSAttributes([
        'attributes' => [
            'DefaultSMSType' => 'Transactional',
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#set-sms-attributes). 
+  Para obter detalhes da API, consulte [Definir SMSAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetSMSAttributes) na *referência AWS SDK para PHP da API*. 

------

## Configurar preferências de mensagens SMS para entrega específica do país
<a name="sms_preferences_country_specific"></a>

Você pode gerenciar e controlar seu tráfego de SMS enviando mensagens somente para países de destino específicos. Isso garante que suas mensagens sejam enviadas somente para países aprovados, evitando cobranças indesejadas por SMS. As instruções a seguir usam a configuração do Amazon Pinpoint Protect para especificar os países que você deseja permitir ou bloquear.

1. Abra o AWS SMS console em [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/).

1. No painel de navegação, em **Visão geral**, na seção **Início rápido**, escolha **Criar uma configuração de proteção**.

1. Em **Detalhes da configuração de proteção**, insira um **nome comercial adequado** para sua configuração de proteção (por exemplo, Allow-Only-AU).

1. Em **Regras de país do SMS**, marque a caixa de seleção **Região/País** para bloquear o envio de mensagens para todos os países compatíveis.

1. Desmarque as caixas de seleção dos países para onde você deseja enviar mensagens. **Por exemplo, para permitir mensagens somente para a Austrália, desmarque a caixa de seleção para a Austrália.**

1. Na seção **Proteger associações de configuração**, em **Tipo de associação**, selecione **Conta padrão**. Isso garantirá que a configuração do AWS End User Messaging SMS Protect afete todas as mensagens enviadas por meio do Amazon SNS, do [Amazon](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) Cognito e da chamada de API do Amazon Pinpoint. [https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html](https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html)

1. Selecione **Criar** para salvar suas configurações.

   A seguinte mensagem de confirmação é exibida:

   ```
   Success Protect configuration protect-abc0123456789 has been created.
   ```

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

1. [**Publique uma mensagem**](sns-publishing.md) em um dos países bloqueados, como a Índia.

   A mensagem não será entregue. Você pode verificar isso nos registros de falha de entrega usando [CloudWatch](sms_stats_cloudwatch.md). Pesquise um grupo de registros **sns/region/AccountID/DirectPublishToPhoneNumber/Failure**para obter uma resposta semelhante ao exemplo a seguir:

   ```
   {
   "notification": {
   "messageId": "bd59a509-XXXX-XXXX-82f8-fbdb8cb68217",
   "timestamp": "YYYY-MM-DD XX:XX:XX.XXXX“
   },
   "delivery": {
   "destination": "+91XXXXXXXXXX",
   "smsType": "Transactional",
   "providerResponse": "Cannot deliver message to the specified destination country",
   "dwellTimeMs": 85
   },
   "status": "FAILURE"
   }
   ```

# Gerenciar assinaturas de números de telefone do Amazon SNS
<a name="sms_manage"></a>

O Amazon SNS oferece várias opções para gerenciar quem recebe mensagens SMS de sua conta. Com uma frequência limitada, você poderá incluir números de telefone que cancelaram o recebimento de mensagens SMS de sua conta. Para interromper o envio de mensagens para inscrições de SMS, você pode remover as inscrições ou os tópicos que publicam neles.

## Cancelar recebimento de mensagens SMS
<a name="sms_manage_optout"></a>

Quando exigido pelas leis e regulamentos locais (como nos Estados Unidos e Canadá), os destinatários de SMS podem usar seus dispositivos para cancelar a inscrição respondendo à mensagem com uma destas opções: 
+ ARRET (Francês)
+ CANCEL
+ END
+ CANCELAR
+ CANCELAR
+ QUIT
+ REMOVE
+ STOP
+ TD
+ CANCELAR INSCRIÇÃO

Para cancelar o recebimento, o destinatário deve responder ao mesmo [número de origem](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) que o Amazon SNS usou para entregar a mensagem. Depois de cancelar, o destinatário não receberá mais mensagens SMS enviadas por você, a Conta da AWS menos que você opte pelo número de telefone.

Se o número de telefone estiver inscrito em um tópico do Amazon SNS, o cancelamento não removerá a inscrição, mas mensagens SMS apresentarão falha na entrega para essa inscrição, a menos que você inclua o número de telefone.

## Gerenciar números de telefone e assinaturas usando o console do Amazon SNS
<a name="sms_manage_console"></a>

É possível usar o console do Amazon SNS para controlar quais números de telefone recebem mensagens SMS de sua conta.

### Incluir um número de telefone que cancelou a assinatura do console do Amazon SNS
<a name="sms_manage_optout_console"></a>

É possível ver quais números de telefone cancelaram o recebimento de mensagens SMS de sua conta, e incluí-los para retomar o envio de mensagens para eles.

Você pode incluir um número de telefone somente uma vez a cada 30 dias.

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

1. No menu do console, defina a seleção de região para uma [região que comporte mensagens SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. No painel de navegação, escolha **Text messaging (SMS) [Mensagens de texto (SMS)]**.

1. Na página **Mensagens de texto móveis (SMS)**, na seção **Números de telefone excluídos, os números de telefone desativados** são exibidos.

1. Marque a caixa de seleção para o número de telefone que você deseja incluir e selecione **Incluir**. O número de telefone não terá mais o recebimento cancelado e receberá mensagens SMS que você enviar a ele.

#### Excluir uma assinatura de SMS no console do Amazon SNS
<a name="sms_manage_subscriptions_console"></a>

Exclua uma inscrição de SMS para interromper o envio de mensagens SMS para aquele número de telefone quando você publicar nos tópicos.

1. No painel de navegação, escolha **Subscriptions (Assinaturas)**.

1. Marque as caixas de seleção para as inscrições que você deseja excluir. Escolha **Ações** e escolha **Excluir inscrições**.

1. Na janela **Delete** (Excluir), escolha **Delete** (Excluir). O Amazon SNS exclui a assinatura e exibe uma mensagem de êxito.

#### Excluir um tópico do console do Amazon SNS
<a name="sms_manage_topic_console"></a>

Exclua um tópico quando você não desejar mais publicar mensagens em seus endpoints inscritos.

1. No painel de navegação, escolha **Tópicos**.

1. Marque as caixas de seleção para os tópicos que você deseja excluir. Escolha **Ações** e escolha **Excluir tópicos**.

1. Na janela **Delete** (Excluir), escolha **Delete** (Excluir). O Amazon SNS exclui o tópico e exibe uma mensagem de êxito.

### Gerenciando números de telefone e assinaturas usando o SDK AWS
<a name="sms_manage_sdk"></a>

Você pode usar o AWS SDKs para fazer solicitações programáticas ao Amazon SNS e gerenciar quais números de telefone podem receber mensagens SMS da sua conta.

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

#### Visualizando todos os números de telefone desativados usando o SDK AWS
<a name="sms_view_optout_sdk"></a>

Para visualizar todos os números de telefone cancelados, envie uma solicitação `ListPhoneNumbersOptedOut` com a API do Amazon SNS.

Os exemplos de código a seguir mostram como usar o `ListPhoneNumbersOptedOut`.

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

**AWS CLI**  
**Para listar as opções de cancelamento de mensagens SMS**  
O exemplo `list-phone-numbers-opted-out` a seguir lista os números de telefone que optaram por não receber mensagens SMS.  

```
aws sns list-phone-numbers-opted-out
```
Saída:  

```
{
    "phoneNumbers": [
        "+15555550100"
    ]
}
```
+  Para obter detalhes da API, consulte [ListPhoneNumbersOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/list-phone-numbers-opted-out.html)em *Referência de AWS CLI Comandos*. 

------
#### [ 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.ListPhoneNumbersOptedOutRequest;
import software.amazon.awssdk.services.sns.model.ListPhoneNumbersOptedOutResponse;
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
 */
public class ListOptOut {
    public static void main(String[] args) {
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        listOpts(snsClient);
        snsClient.close();
    }

    public static void listOpts(SnsClient snsClient) {
        try {
            ListPhoneNumbersOptedOutRequest request = ListPhoneNumbersOptedOutRequest.builder().build();
            ListPhoneNumbersOptedOutResponse result = snsClient.listPhoneNumbersOptedOut(request);
            System.out.println("Status is " + result.sdkHttpResponse().statusCode() + "\n\nPhone Numbers: \n\n"
                    + result.phoneNumbers());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obter detalhes da API, consulte [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/ListPhoneNumbersOptedOut)a *Referência AWS SDK for Java 2.x da API*. 

------
#### [ PHP ]

**SDK para PHP**  
 Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no [Repositório de exemplos de código da AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Returns a list of phone numbers that are opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listPhoneNumbersOptedOut();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#list-opted-out-phone-numbers). 
+  Para obter detalhes da API, consulte [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/ListPhoneNumbersOptedOut)a *Referência AWS SDK para PHP da API*. 

------

#### Verificar se um número de telefone foi excluído usando o SDK AWS
<a name="sms_check_optout_sdk"></a>

Para verificar se um número de telefone cancelou o recebimento, envie uma solicitação `CheckIfPhoneNumberIsOptedOut` com a API do Amazon SNS.

Os exemplos de código a seguir mostram como usar o `CheckIfPhoneNumberIsOptedOut`.

------
#### [ .NET ]

**SDK para .NET**  
 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/dotnetv3/SNS#code-examples). 

```
    using System;
    using System.Threading.Tasks;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    /// <summary>
    /// This example shows how to use the Amazon Simple Notification Service
    /// (Amazon SNS) to check whether a phone number has been opted out.
    /// </summary>
    public class IsPhoneNumOptedOut
    {
        public static async Task Main()
        {
            string phoneNumber = "+15551112222";

            IAmazonSimpleNotificationService client = new AmazonSimpleNotificationServiceClient();

            await CheckIfOptedOutAsync(client, phoneNumber);
        }

        /// <summary>
        /// Checks to see if the supplied phone number has been opted out.
        /// </summary>
        /// <param name="client">The initialized Amazon SNS Client object used
        /// to check if the phone number has been opted out.</param>
        /// <param name="phoneNumber">A string representing the phone number
        /// to check.</param>
        public static async Task CheckIfOptedOutAsync(IAmazonSimpleNotificationService client, string phoneNumber)
        {
            var request = new CheckIfPhoneNumberIsOptedOutRequest
            {
                PhoneNumber = phoneNumber,
            };

            try
            {
                var response = await client.CheckIfPhoneNumberIsOptedOutAsync(request);

                if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
                {
                    string optOutStatus = response.IsOptedOut ? "opted out" : "not opted out.";
                    Console.WriteLine($"The phone number: {phoneNumber} is {optOutStatus}");
                }
            }
            catch (AuthorizationErrorException ex)
            {
                Console.WriteLine($"{ex.Message}");
            }
        }
    }
```
+  Para obter detalhes da API, consulte [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)a *Referência AWS SDK para .NET da API*. 

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

**AWS CLI**  
**Para verificar o cancelamento de mensagens SMS para um número de telefone**  
O `check-if-phone-number-is-opted-out` exemplo a seguir verifica se o número de telefone especificado optou por não receber mensagens SMS da AWS conta atual.  

```
aws sns check-if-phone-number-is-opted-out \
    --phone-number +1555550100
```
Saída:  

```
{
    "isOptedOut": false
}
```
+  Para obter detalhes da API, consulte [CheckIfPhoneNumberIsOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/check-if-phone-number-is-opted-out.html)em *Referência de AWS CLI Comandos*. 

------
#### [ 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.CheckIfPhoneNumberIsOptedOutRequest;
import software.amazon.awssdk.services.sns.model.CheckIfPhoneNumberIsOptedOutResponse;
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
 */
public class CheckOptOut {
    public static void main(String[] args) {

        final String usage = """

                Usage:    <phoneNumber>

                Where:
                   phoneNumber - The mobile phone number to look up (for example, +1XXX5550100).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

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

        checkPhone(snsClient, phoneNumber);
        snsClient.close();
    }

    public static void checkPhone(SnsClient snsClient, String phoneNumber) {
        try {
            CheckIfPhoneNumberIsOptedOutRequest request = CheckIfPhoneNumberIsOptedOutRequest.builder()
                    .phoneNumber(phoneNumber)
                    .build();

            CheckIfPhoneNumberIsOptedOutResponse result = snsClient.checkIfPhoneNumberIsOptedOut(request);
            System.out.println(
                    result.isOptedOut() + "Phone Number " + phoneNumber + " has Opted Out of receiving sns messages." +
                            "\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obter detalhes da API, consulte [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)a *Referência AWS SDK for Java 2.x da API*. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 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/javascriptv3/example_code/sns#code-examples). 
Crie o cliente em um módulo separado e exporte-o.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe o SDK e os módulos do cliente e chame a API.  

```
import { CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns";

import { snsClient } from "../libs/snsClient.js";

export const checkIfPhoneNumberIsOptedOut = async (
  phoneNumber = "5555555555",
) => {
  const command = new CheckIfPhoneNumberIsOptedOutCommand({
    phoneNumber,
  });

  const response = await snsClient.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '3341c28a-cdc8-5b39-a3ee-9fb0ee125732',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   isOptedOut: false
  // }
  return response;
};
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-checkifphonenumberisoptedout). 
+  Para obter detalhes da API, consulte [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/CheckIfPhoneNumberIsOptedOutCommand)a *Referência AWS SDK para JavaScript da API*. 

------
#### [ PHP ]

**SDK para PHP**  
 Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no [Repositório de exemplos de código da AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Indicates whether the phone number owner has opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$phone = '+1XXX5550100';

try {
    $result = $SnSclient->checkIfPhoneNumberIsOptedOut([
        'phoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#check-if-a-phone-number-has-opted-out). 
+  Para obter detalhes da API, consulte [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)a *Referência AWS SDK para PHP da API*. 

------

#### Incluir um número de telefone que cancelou a assinatura usando o Amazon SNS API
<a name="sms_manage_optin_sdk"></a>

Para incluir um número de telefone que cancelou o recebimento, envie uma solicitação `OptInPhoneNumber` com a API do Amazon SNS.

Você pode incluir um número de telefone somente uma vez a cada 30 dias.

#### Excluindo uma assinatura de SMS usando o SDK AWS
<a name="sms_manage_subscriptions_sdk"></a>

Para excluir uma inscrição de SMS de um tópico do Amazon SNS, obtenha o ARN da inscrição enviando uma solicitação `ListSubscriptions` com a API do Amazon SNS e, em seguida, informe o ARN em uma solicitação `Unsubscribe`.

Os exemplos de código a seguir mostram como usar o `Unsubscribe`.

------
#### [ .NET ]

**SDK para .NET**  
 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/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Cancele a assinatura de um tópico por meio de um ARN de assinatura.  

```
    /// <summary>
    /// Unsubscribe from a topic by a subscription ARN.
    /// </summary>
    /// <param name="subscriptionArn">The ARN of the subscription.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> UnsubscribeByArn(string subscriptionArn)
    {
        var unsubscribeResponse = await _amazonSNSClient.UnsubscribeAsync(
            new UnsubscribeRequest()
            {
                SubscriptionArn = subscriptionArn
            });
        return unsubscribeResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  Consulte detalhes da API em [Unsubscribe](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Unsubscribe) na *Referência da API AWS SDK para .NET *. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 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/cpp/example_code/sns#code-examples). 

```
//! Delete a subscription to an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param subscriptionARN: The Amazon Resource Name (ARN) for an Amazon SNS topic subscription.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::unsubscribe(const Aws::String &subscriptionARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::UnsubscribeRequest request;
    request.SetSubscriptionArn(subscriptionARN);

    const Aws::SNS::Model::UnsubscribeOutcome outcome = snsClient.Unsubscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Unsubscribed successfully " << std::endl;
    }
    else {
        std::cerr << "Error while unsubscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Consulte detalhes da API em [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Unsubscribe) na *Referência da API AWS SDK para C\$1\$1 *. 

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

**AWS CLI**  
**Para cancelar a assinatura de um tópico**  
O exemplo `unsubscribe` a seguir exclui a assinatura especificada de um tópico.  

```
aws sns unsubscribe \
    --subscription-arn arn:aws:sns:us-west-2:0123456789012:my-topic:8a21d249-4329-4871-acc6-7be709c6ea7f
```
Este comando não produz saída.  
+  Consulte detalhes da API em [Unsubscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/unsubscribe.html) na *Referência de comandos da AWS CLI *. 

------
#### [ 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.SnsException;
import software.amazon.awssdk.services.sns.model.UnsubscribeRequest;
import software.amazon.awssdk.services.sns.model.UnsubscribeResponse;

/**
 * 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
 */
public class Unsubscribe {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <subscriptionArn>

                Where:
                   subscriptionArn - The ARN of the subscription to delete.
                """;

        if (args.length < 1) {
            System.out.println(usage);
            System.exit(1);
        }

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

        unSub(snsClient, subscriptionArn);
        snsClient.close();
    }

    public static void unSub(SnsClient snsClient, String subscriptionArn) {
        try {
            UnsubscribeRequest request = UnsubscribeRequest.builder()
                    .subscriptionArn(subscriptionArn)
                    .build();

            UnsubscribeResponse result = snsClient.unsubscribe(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode()
                    + "\n\nSubscription was removed for " + request.subscriptionArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Consulte detalhes da API em [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Unsubscribe) na *Referência da API AWS SDK for Java 2.x *. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 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/javascriptv3/example_code/sns#code-examples). 
Crie o cliente em um módulo separado e exporte-o.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe o SDK e os módulos do cliente e chame a API.  

```
import { UnsubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} subscriptionArn - The ARN of the subscription to cancel.
 */
const unsubscribe = async (
  subscriptionArn = "arn:aws:sns:us-east-1:xxxxxxxxxxxx:mytopic:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
) => {
  const response = await snsClient.send(
    new UnsubscribeCommand({
      SubscriptionArn: subscriptionArn,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '0178259a-9204-507c-b620-78a7570a44c6',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-unsubscribing). 
+  Consulte detalhes da API em [Unsubscribe](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/UnsubscribeCommand) na *Referência da API AWS SDK para JavaScript *. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 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/kotlin/services/sns#code-examples). 

```
suspend fun unSub(subscriptionArnVal: String) {
    val request =
        UnsubscribeRequest {
            subscriptionArn = subscriptionArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.unsubscribe(request)
        println("Subscription was removed for ${request.subscriptionArn}")
    }
}
```
+  Consulte detalhes da API em [Cancelar assinatura](https://sdk.amazonaws.com/kotlin/api/latest/index.html) na *Referência da API AWS SDK para Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no [Repositório de exemplos de código da AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes a subscription to an Amazon SNS topic.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
    $result = $SnSclient->unsubscribe([
        'SubscriptionArn' => $subscription,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-subscribing-unsubscribing-topics.html#unsubscribe-from-a-topic). 
+  Consulte detalhes da API em [Unsubscribe](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Unsubscribe) na *Referência da API AWS SDK para PHP *. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 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/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_subscription(subscription):
        """
        Unsubscribes and deletes a subscription.
        """
        try:
            subscription.delete()
            logger.info("Deleted subscription %s.", subscription.arn)
        except ClientError:
            logger.exception("Couldn't delete subscription %s.", subscription.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def unsubscribe(self, subscription_arn: str) -> bool:
        """
        Unsubscribe from an SNS topic.

        :param subscription_arn: The ARN of the subscription to remove.
        :return: True if successful.
        :raises ClientError: If the unsubscribe operation fails.
        """
        try:
            self.sns_client.unsubscribe(SubscriptionArn=subscription_arn)
            
            logger.info(f"Unsubscribed: {subscription_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Subscription not found: {subscription_arn}")
                return True  # Already unsubscribed
            else:
                logger.error(f"Error unsubscribing: {error_code} - {e}")
                raise
```
+  Consulte detalhes da API em [Unsubscribe](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Unsubscribe) na *Referência da API AWS SDK for Python (Boto3)*. 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 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/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->unsubscribe( iv_subscriptionarn = iv_subscription_arn ).
        MESSAGE 'Subscription deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Subscription does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snsinvalidparameterex.
        MESSAGE 'Subscription with "PendingConfirmation" status cannot be deleted/unsubscribed. Confirm subscription before performing unsubscribe operation.' TYPE 'E'.
    ENDTRY.
```
+  Consulte detalhes da API em [Cancelar assinatura](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) na *Referência da API do AWS SDK para SAP ABAP*. 

------
#### [ Swift ]

**SDK para Swift**  
 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/swift/example_code/sns#code-examples). 

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.unsubscribe(
            input: UnsubscribeInput(
                subscriptionArn: arn
            )
        )

        print("Unsubscribed.")
```
+  Consulte detalhes da API em [Unsubscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/unsubscribe(input:)) na *Referência de API do AWS SDK para Swift*. 

------

#### Excluindo um tópico usando o SDK AWS
<a name="sms_manage_topic_sdk"></a>

Para excluir um tópico e todas as suas inscrições, obtenha o ARN do tópico enviando uma solicitação `ListTopics` com a API do Amazon SNS e, em seguida, informe o ARN em uma solicitação `DeleteTopic`.

Os exemplos de código a seguir mostram como usar o `DeleteTopic`.

------
#### [ .NET ]

**SDK para .NET**  
 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/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Exclua um tópico por meio do respectivo ARN.  

```
    /// <summary>
    /// Delete a topic by its topic ARN.
    /// </summary>
    /// <param name="topicArn">The ARN of the topic.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> DeleteTopicByArn(string topicArn)
    {
        var deleteResponse = await _amazonSNSClient.DeleteTopicAsync(
            new DeleteTopicRequest()
            {
                TopicArn = topicArn
            });
        return deleteResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  Para obter detalhes da API, consulte [DeleteTopic](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/DeleteTopic)a *Referência AWS SDK para .NET da API*. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 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/cpp/example_code/sns#code-examples). 

```
//! Delete an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::deleteTopic(const Aws::String &topicARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::DeleteTopicRequest request;
    request.SetTopicArn(topicARN);

    const Aws::SNS::Model::DeleteTopicOutcome outcome = snsClient.DeleteTopic(request);

    if (outcome.IsSuccess()) {
        std::cout << "Successfully deleted the Amazon SNS topic " << topicARN << std::endl;
    }
    else {
        std::cerr << "Error deleting topic " << topicARN << ":" <<
                  outcome.GetError().GetMessage() << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Para obter detalhes da API, consulte [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/DeleteTopic)a *Referência AWS SDK para C\$1\$1 da API*. 

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

**AWS CLI**  
**Para excluir um tópico do SNS**  
O exemplo `delete-topic` a seguir exclui o tópico do SNS especificado.  

```
aws sns delete-topic \
    --topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic"
```
Este comando não produz saída.  
+  Para obter detalhes da API, consulte [DeleteTopic](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/delete-topic.html)em *Referência de AWS CLI Comandos*. 

------
#### [ Go ]

**SDK para Go V2**  
 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/gov2/workflows/topics_and_queues#code-examples). 

```
import (
	"context"
	"encoding/json"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	"github.com/aws/aws-sdk-go-v2/service/sns/types"
)

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions
// used in the examples.
type SnsActions struct {
	SnsClient *sns.Client
}



// DeleteTopic delete an Amazon SNS topic.
func (actor SnsActions) DeleteTopic(ctx context.Context, topicArn string) error {
	_, err := actor.SnsClient.DeleteTopic(ctx, &sns.DeleteTopicInput{
		TopicArn: aws.String(topicArn)})
	if err != nil {
		log.Printf("Couldn't delete topic %v. Here's why: %v\n", topicArn, err)
	}
	return err
}
```
+  Para obter detalhes da API, consulte [DeleteTopic](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.DeleteTopic)a *Referência AWS SDK para Go da API*. 

------
#### [ 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.DeleteTopicRequest;
import software.amazon.awssdk.services.sns.model.DeleteTopicResponse;
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
 */
public class DeleteTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:     <topicArn>

                Where:
                   topicArn - The ARN of the topic to delete.
                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

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

        System.out.println("Deleting a topic with name: " + topicArn);
        deleteSNSTopic(snsClient, topicArn);
        snsClient.close();
    }

    public static void deleteSNSTopic(SnsClient snsClient, String topicArn) {
        try {
            DeleteTopicRequest request = DeleteTopicRequest.builder()
                    .topicArn(topicArn)
                    .build();

            DeleteTopicResponse result = snsClient.deleteTopic(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Para obter detalhes da API, consulte [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/DeleteTopic)a *Referência AWS SDK for Java 2.x da API*. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 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/javascriptv3/example_code/sns#code-examples). 
Crie o cliente em um módulo separado e exporte-o.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe o SDK e os módulos do cliente e chame a API.  

```
import { DeleteTopicCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic to delete.
 */
export const deleteTopic = async (topicArn = "TOPIC_ARN") => {
  const response = await snsClient.send(
    new DeleteTopicCommand({ TopicArn: topicArn }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'a10e2886-5a8f-5114-af36-75bd39498332',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
};
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topics-deletetopic). 
+  Para obter detalhes da API, consulte [DeleteTopic](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/DeleteTopicCommand)a *Referência AWS SDK para JavaScript da API*. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 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/kotlin/services/sns#code-examples). 

```
suspend fun deleteSNSTopic(topicArnVal: String) {
    val request =
        DeleteTopicRequest {
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.deleteTopic(request)
        println("$topicArnVal was successfully deleted.")
    }
}
```
+  Para obter detalhes da API, consulte a [DeleteTopic](https://sdk.amazonaws.com/kotlin/api/latest/index.html)referência da API *AWS SDK for Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 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/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes an SNS topic and all its subscriptions.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->deleteTopic([
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obter detalhes da API, consulte [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/DeleteTopic)a *Referência AWS SDK para PHP da API*. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 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/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_topic(topic):
        """
        Deletes a topic. All subscriptions to the topic are also deleted.
        """
        try:
            topic.delete()
            logger.info("Deleted topic %s.", topic.arn)
        except ClientError:
            logger.exception("Couldn't delete topic %s.", topic.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def delete_topic(self, topic_arn: str) -> bool:
        """
        Delete an SNS topic.

        :param topic_arn: The ARN of the topic to delete.
        :return: True if successful.
        :raises ClientError: If the topic deletion fails.
        """
        try:
            self.sns_client.delete_topic(TopicArn=topic_arn)
            
            logger.info(f"Deleted topic: {topic_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Topic not found: {topic_arn}")
                return True  # Already deleted
            else:
                logger.error(f"Error deleting topic: {error_code} - {e}")
                raise
```
+  Para obter detalhes da API, consulte a [DeleteTopic](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/DeleteTopic)Referência da API *AWS SDK for Python (Boto3*). 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 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/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->deletetopic( iv_topicarn = iv_topic_arn ).
        MESSAGE 'SNS topic deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Para obter detalhes da API, consulte a [DeleteTopic](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)referência da *API AWS SDK for SAP ABAP*. 

------
#### [ Swift ]

**SDK para Swift**  
 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/swift/example_code/sns#code-examples). 

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.deleteTopic(
            input: DeleteTopicInput(topicArn: arn)
        )
```
+  Para obter detalhes da API, consulte [DeleteTopic](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/deletetopic(input:))a *referência da API AWS SDK for Swift*. 

------

# Monitoramento de atividades de SMS do Amazon SNS
<a name="sms_stats"></a>

Ao monitorar a atividade do SMS, é possível manter o controle dos números de telefone de destino, das entregas bem-sucedidas ou com falha, dos motivos da falha, dos custos e de outras informações. O Amazon SNS ajuda resumindo estatísticas no console, enviando informações para a Amazon CloudWatch e enviando relatórios diários de uso de SMS para um bucket do Amazon S3 que você especificar.

# Visualizar estatísticas de entrega de SMS do Amazon SNS
<a name="sms_stats_console"></a>

É possível usar o console do Amazon SNS para exibir estatísticas sobre suas entregas recentes de SMS.

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

1. No menu do console, defina a seleção de região para uma [região que comporte mensagens SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html).

1. No painel de navegação, escolha **Text messaging (SMS) [Mensagens de texto (SMS)]**.

1. Na página **Mensagens de texto (SMS)**, na seção **Estatísticas da conta**, veja os gráficos para suas entregas de mensagens SMS promocionais e transacionais. Cada gráfico mostra os seguintes dados para os 15 dias anteriores:
   + Taxa de entrega (porcentagem de entregas bem-sucedidas)
   + Enviadas (número de tentativas de entrega)
   + Falhas (número de falhas na entrega)

Nessa página, você também pode escolher o botão **Usage** (Uso) para acessar o bucket do Amazon S3 em que você armazena seus relatórios de uso diário. Para obter mais informações, consulte [Como assinar relatórios diários de uso de SMS no Amazon SNS](sms_stats_usage.md).

# Monitoramento de entrega de SMS do Amazon SNS com CloudWatch métricas e registros da Amazon
<a name="sms_stats_cloudwatch"></a>

Você pode usar a Amazon CloudWatch e o Amazon CloudWatch Logs para monitorar suas entregas de mensagens SMS.

## Visualizando CloudWatch métricas da Amazon
<a name="sms_stats_cloudwatch_metrics"></a>

O Amazon SNS coleta automaticamente métricas sobre suas entregas de mensagens SMS e as envia para a Amazon. CloudWatch Você pode usar CloudWatch para monitorar essas métricas e criar alarmes para alertá-lo quando uma métrica ultrapassa um limite. Por exemplo, você pode monitorar CloudWatch métricas para saber sua taxa de entrega de SMS e suas cobranças de month-to-date SMS.

Para obter informações sobre CloudWatch métricas de monitoramento, configuração de CloudWatch alarmes e os tipos de métricas disponíveis, consulte[Monitorando tópicos do Amazon SNS usando CloudWatch](sns-monitoring-using-cloudwatch.md).

## Visualizando CloudWatch registros
<a name="sns-viewing-cloudwatch-logs"></a>

Você pode coletar informações sobre entregas de mensagens SMS bem-sucedidas e malsucedidas ao permitir que o Amazon SNS grave no Amazon Logs. CloudWatch Para cada mensagem SMS que você enviar, o Amazon SNS gravará um log que inclui o preço da mensagem, o status de sucesso ou falha, o motivo da falha (se a mensagem falhou), o tempo de permanência da mensagem e outras informações.

**Para ativar e visualizar CloudWatch os registros de suas mensagens SMS**

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

1. No menu do console, defina a seleção de região para uma [região que comporte mensagens SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. No painel de navegação, escolha **Text messaging (SMS) [Mensagens de texto (SMS)]**.

1. Na página **Mobile text messaging (SMS) [Mensagens de texto (SMS) em dispositivos móveis]**, na seção **Text messaging preferences (Preferências de mensagens de texto)**, escolha **Edit (Editar)**.

1. Na página seguinte, expanda a seção **Registro do status da entrega**.

1. Para **taxa de amostragem de sucesso**, especifique a porcentagem de entregas de SMS bem-sucedidas para as quais o Amazon SNS gravará registros em registros CloudWatch . Por exemplo:
   + Para gravar logs somente para entregas com falha, defina esse valor como 0.
   + Para gravar logs para 10% de suas entregas bem-sucedidas, defina o valor como 10.

   Se você não especificar uma porcentagem, o Amazon SNS gravará logs para todas as entregas bem-sucedidas.

1. Para fornecer as permissões necessárias, use uma das seguintes opções:
   + Para criar um novo perfil de serviço, escolha **Criar novo perfil de serviço** e, em seguida, **Criar novos perfis**. Na página seguinte, escolha **Permitir** para que o Amazon SNS tenha acesso de gravação aos recursos de sua conta.
   + Para usar um perfil de serviço existente, escolha **Usar perfil de serviço existente** e, em seguida, cole o ARN na caixa **Perfil do IAM para entregas bem-sucedidas e com falha**.

     A perfil de serviço especificado deve permitir acesso de gravação aos recursos de sua conta. Para obter mais informações sobre a criação de funções do IAM, consulte [Como criar uma função para um AWS serviço](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) no *Guia do usuário do IAM*. 

1. Escolha **Salvar alterações**.

1. Novamente na página **Mensagens de texto para dispositivos móveis (SMS)**, acesse a seção **Logs de status de entrega** para exibir todos os logs disponíveis.
**nota**  
Dependendo da operadora do número de telefone de destino, pode demorar até 72 horas para que os logs de entrega apareçam no console do Amazon SNS. 

## Exemplo de log para entrega de SMS bem-sucedida
<a name="example-log-successful-sms-delivery"></a>

O log de status de entrega para uma entrega de SMS bem-sucedida será semelhante ao exemplo a seguir:

```
{
    "notification": {
        "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf",
        "timestamp": "2016-06-28 00:40:34.558"
    },
    "delivery": {
        "phoneCarrier": "My Phone Carrier",
        "mnc": 270,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 310,
        "providerResponse": "Message has been accepted by phone carrier",
        "dwellTimeMs": 599,
        "dwellTimeMsUntilDeviceAck": 1344
    },
    "status": "SUCCESS"
}
```

## Exemplo de log para entrega de SMS com falha
<a name="example-log-failed-sms-delivery"></a>

O log de status de entrega para uma entrega de SMS com falha será semelhante ao exemplo a seguir:

```
{
    "notification": {
        "messageId": "1077257a-92f3-5ca3-bc97-6a915b310625",
        "timestamp": "2016-06-28 00:40:34.559"
    },
    "delivery": {
        "mnc": 0,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 0,
        "providerResponse": "Unknown error attempting to reach phone",
        "dwellTimeMs": 1420,
        "dwellTimeMsUntilDeviceAck": 1692
    },
    "status": "FAILURE"
}
```

## Motivos para falha de entrega de SMS
<a name="sms_stats_delivery_fail_reasons"></a>

O motivo da falha é fornecido com o atributo `providerResponse`. As mensagens SMS podem não ser entregues pelos seguintes motivos:
+ Bloqueada como spam pela operadora de telefonia
+ O destino está em uma lista bloqueada
+ Número de telefone inválido
+ O corpo da mensagem é inválido
+ A operadora de telefonia bloqueou essa mensagem
+ A operadora de telefonia está inacessível/indisponível no momento
+ O telefone bloqueou SMS
+ O telefone está em uma lista bloqueada
+ O telefone está inacessível/indisponível no momento
+ O número de telefone solicitou o cancelamento do recebimento
+ Essa entrega excede o preço máximo
+ Erro desconhecido ao tentar entrar em contato com o telefone

# Como assinar relatórios diários de uso de SMS no Amazon SNS
<a name="sms_stats_usage"></a>

É possível monitorar suas entregas de SMS inscrevendo-se para relatórios diários de uso do Amazon SNS. Para cada dia que você enviar pelo menos uma mensagem SMS, o Amazon SNS fornecerá um relatório de uso como um arquivo CSV para o bucket do Amazon S3 especificado. Leva 24 horas para que o relatório de uso de SMS esteja disponível no bucket do Amazon S3. 

## Informações sobre relatório de uso diário
<a name="daily_usage_info"></a>

O relatório de uso inclui as seguintes informações para cada mensagem SMS que foi enviada de sua conta.

 O relatório não inclui as mensagens que são enviadas aos destinatários que recusaram a opção.
+ Hora da publicação da mensagem (em UTC)
+ ID de mensagem
+ Número de telefone de destino
+ Tipo de mensagem
+ Status da entrega
+ Preço da mensagem (em USD)
+ Número da parte (uma mensagem é dividida em várias partes se for muito longa para uma única mensagem)
+ Número total de partes

**nota**  
Se o Amazon SNS não recebeu o número da peça, definimos seu valor como zero.

## Assinar relatórios de uso diário
<a name="subscribe-to-daily-usage-reports"></a>

Para inscrever-se para relatórios de uso diário, você deve criar um bucket do Amazon S3 com as permissões apropriadas.

**Para criar um bucket do Amazon S3 para seus relatórios de uso diário**

1. Do Conta da AWS que envia mensagens SMS, faça login no console do [Amazon S3](https://console.aws.amazon.com/s3/).

1. Escolha **Criar bucket**.

1. Em **Nome do bucket**, recomendamos inserir um nome exclusivo para sua conta e organização. Por exemplo, use o padrão `<my-bucket-prefix>-<account_id>-<org-id>`. 

   Para obter informações sobre convenções e restrições de nomes de buckets, consulte [Regras de nomenclatura de buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules) no *Guia do desenvolvedor do Amazon Simple Storage Service*.

1. Escolha **Criar**.

1. Na tabela **All Buckets** (Todos os buckets), escolha o bucket.

1. Na guia **Permissions** (Permissões), escolha **Bucket policy** (Política de bucket).

1. Na janela **Bucket Policy Editor** (Editor de política de bucket), forneça uma política que permita ao principal do serviço Amazon SNS gravar no bucket. Para ver um exemplo, consulte [Exemplo de política de bucket](#example_bucket_policy).

   Se você usar a política de exemplo, lembre-se de *my-s3-bucket* substituí-la pelo nome do bucket que você escolheu na Etapa 3.

1. Escolha **Salvar**.

**Para inscrever-se para relatórios de uso diário**

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

1. No painel de navegação, escolha **Text messaging (SMS) [Mensagens de texto (SMS)]**.

1. Na página **Mensagens de texto (SMS)**, na seção **Preferências de mensagens de texto**, escolha **Editar**.  
![\[Seção de preferências de mensagens de texto no console do Amazon SNS\]](http://docs.aws.amazon.com/pt_br/sns/latest/dg/images/daily-usage-report1.png)

1. Na página **Editar preferências de mensagens de texto**, na seção **Detalhes**, especifique o **Nome do bucket do Amazon S3 para relatórios de uso**.  
![\[Seção de detalhes da página Editar preferências de mensagens de texto no console do Amazon SNS\]](http://docs.aws.amazon.com/pt_br/sns/latest/dg/images/daily-usage-report2.png)

1. Escolha **Salvar alterações**.

### Exemplo de política de bucket
<a name="example_bucket_policy"></a>

A política a seguir permite que o principal do serviço Amazon SNS execute as ações `s3:PutObject`, `s3:GetBucketLocation` e `s3:ListBucket`.

AWS fornece ferramentas para todos os serviços com diretores de serviços que receberam acesso aos recursos em sua conta. Quando o principal em uma declaração de política de bucket do Amazon S3 é um [problema de representante confuso.](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) Para limitar de qual região e conta o bucket pode receber relatórios de uso diário, use `aws:SourceArn`, como mostra o exemplo abaixo. Se não quiser limitar quais regiões podem gerar esses relatórios, use `aws:SourceAccount` para limitar com base em qual conta está gerando os relatórios. Se você não conhece o ARN do recurso, use `aws:SourceAccount`.

Use o exemplo a seguir, que inclui proteção contra representante confuso quando você cria um bucket do Amazon S3 para receber relatórios de uso diário de SMS do Amazon SNS.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObject",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowGetBucketLocation",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowListBucket",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

**nota**  
É possível publicar relatórios de uso em buckets do Amazon S3 que pertencem à Conta da AWS especificada no elemento `Condition` na política do Amazon S3. Para publicar relatórios de uso em um bucket do Amazon S3 de Conta da AWS propriedade de outra pessoa, consulte [Como posso copiar objetos do Amazon S3](https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/) de outro? Conta da AWS. 

### Exemplo de relatório de uso diário
<a name="example_report"></a>

Depois de inscrever-se nos relatórios de uso diários, a cada dia o Amazon SNS coloca um arquivo CSV com os dados de uso no seguinte local:

```
<my-s3-bucket>/SMSUsageReports/<region>/YYYY/MM/DD/00x.csv.gz
```

Cada arquivo pode conter até 50.000 registros. Se os registros de um dia excederem essa cota, o Amazon SNS adicionará vários arquivos. A seguir, um exemplo de relatório:

```
PublishTimeUTC,MessageId,DestinationPhoneNumber,MessageType,DeliveryStatus,PriceInUSD,PartNumber,TotalParts
2016-05-10T03:00:29.476Z,96a298ac-1458-4825-a7eb-7330e0720b72,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.90084,0,1
2016-05-10T03:00:29.561Z,1e29d394-d7f4-4dc9-996e-26412032c344,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.34322,0,1
2016-05-10T03:00:30.769Z,98ba941c-afc7-4c51-ba2c-56c6570a6c08,1XXX5550100,Transactional,Message has been accepted by phone carrier,0.27815,0,1
```

# Solicitar suporte para sistema de mensagens SMS do Amazon SNS
<a name="channels-sms-awssupport"></a>

**Importante**  
O Guia do desenvolvedor de SMS do Amazon SNS foi atualizado. O Amazon SNS foi integrado com [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para a entrega de mensagens SMS. Este Guia contém as informações mais recentes sobre como criar, configurar e gerenciar as mensagens SMS do Amazon SNS.

Algumas opções de SMS com o Amazon SNS não estarão disponíveis em sua conta da AWS até entrar em contato com o Suporte. Crie um caso na [AWS Support Center](https://console.aws.amazon.com/support/home#/) para solicitar qualquer um dos itens a seguir:
+ Um aumento de seu limite mensal de gastos de SMS

  Por padrão, o limite de gastos mensal é 1,00 USD. O limite de gastos determina o volume de mensagens que é possível enviar com o Amazon SNS. Você pode solicitar um limite de gastos que atenda ao volume mensal de mensagens esperado para seu caso de uso de SMS.
+ Uma migração da [sandbox de SMS](sns-sms-sandbox.md) para que você possa enviar mensagens SMS sem restrições. Para obter mais informações, consulte [Saída da sandbox do Amazon SNS SMS](sns-sms-sandbox-moving-to-production.md).
+ Um [número de origem](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) dedicado
+ Um [ID do remetente](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) dedicado. Um ID do remetente é um ID personalizado mostrado como remetente no dispositivo do destinatário. Por exemplo, é possível usar a marca de sua empresa para tornar a origem da mensagem mais fácil de reconhecer. O suporte a IDs de remetentes varia de acordo com o país ou a região. Para obter mais informações, consulte [Países e regiões compatíveis com mensagem de SMS com AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) no *Guia do usuário do AWS End User Messaging SMS*.

# Solicitar aumentos de sua cota de gastos mensais de SMS para o Amazon SNS
<a name="channels-sms-awssupport-spend-threshold"></a>

O Amazon SNS fornece cotas de gastos para ajudar você a gerenciar o custo máximo por mês incorrido pelo envio de SMS usando sua conta. A cota de gastos limita seu risco em caso de ataque malicioso e impede que sua aplicação upstream envie mais mensagens do que o esperado. Você pode configurar o Amazon SNS para parar o envio de mensagens SMS quando ele determinar que esse envio tiver um custo que ultrapassará sua cota de gastos do mês. 

Para garantir que suas operações não sejam afetadas, recomendamos solicitar uma cota de gastos alta o suficiente para suportar suas cargas de trabalho de produção. Para obter mais informações, consulte [Etapa 1: abrir um caso de SMS do Amazon SNS](#channels-sms-awssupport-spend-threshold-open). Depois de receber a cota, você pode gerenciar seu risco aplicando a cota completa ou um valor menor, conforme descrito em [Etapa 2: atualizar suas configurações de SMS](#channels-sms-awssupport-spend-threshold-settings). Ao aplicar um valor mais baixo, você pode controlar seus gastos mensais com a opção de escalar, se necessário.

**Importante**  
Como o Amazon SNS é um sistema distribuído, ele interromperá o envio de mensagens SMS minutos depois que a cota de gasto for excedida. Durante esse intervalo, se você continuar a enviar mensagens SMS, poderá gerar custos que ultrapassam sua cota.

Definimos a cota de gastos para todas as novas contas como 1,00 USD por mês. Essa cota tem como objetivo permitir testar os recursos de envio de mensagens do Amazon SNS. Para solicitar um aumento na cota de gastos com SMS da sua conta, abra um caso de aumento de cota no AWS Support Center.

**Topics**
+ [Etapa 1: abrir um caso de SMS do Amazon SNS](#channels-sms-awssupport-spend-threshold-open)
+ [Etapa 2: atualizar suas configurações de SMS no console do Amazon SNS](#channels-sms-awssupport-spend-threshold-settings)

## Etapa 1: abrir um caso de SMS do Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-open"></a>

Você pode solicitar um aumento na sua cota de gastos mensais abrindo um caso de aumento de cota no AWS Support Center.

**nota**  
Alguns campos no formulário de solicitação são marcados como "opcionais". No entanto, o Suporte exige todas as informações mencionadas nas etapas a seguir para processar sua solicitação. Se você não fornecer todas as informações necessárias, poderá haver atrasos no processamento de sua solicitação.

1. Faça login no Console de gerenciamento da AWS em [https://console.aws.amazon.com/](https://console.aws.amazon.com/).

1. No menu **Suporte**, escolha **Support Center**.

1. No painel **Seus casos de suporte**, escolha **Criar caso**.

1. Escolha o link **Procurando aumentos no limite de serviço?** e preencha o seguinte:
   + No **Tipo de limite**, escolha **Mensagens de texto do SNS**.
   + (Opcional) Em **Fornecer um link ao site ou à aplicação que enviará mensagens SMS**, forneça informações sobre o site, a aplicação ou o serviço que enviará mensagens SMS.
   + (Opcional) Em **Qual tipo de mensagem você pretende enviar**, escolha o tipo de mensagem que pretende enviar utilizando o código longo:
     + **Senhas de uso único**: mensagens que fornecem senhas que seus clientes usam para se autenticarem em seu site ou aplicação.
     + **Promocional**: mensagens não críticas que promovem o seu negócio ou serviço, como ofertas especiais ou anúncios.
     + **Transacional**: mensagens informativas importantes que oferecem suporte para transações do cliente, como confirmações de pedidos ou alertas de contas. As mensagens transacionais não devem conter conteúdo promocional nem de marketing.
   + (Opcional) Para **qual AWS região você enviará mensagens, escolha a região de** onde você enviará mensagens.
   + (Opcional) Em **Para quais países você planeja enviar mensagens**, insira o país ou a região em que deseja comprar códigos simplificados.
   + (Opcional) Em **Como seus clientes optam por receber suas mensagens**, forneça detalhes sobre seu processo de consentimento.
   + (Opcional) No campo **Forneça o modelo de mensagem que você planeja usar para enviar mensagens aos seus clientes**, inclua o modelo que será usado.

1. Em **Solicitações**, preencha as seguintes seções:
   + Para **Região**, escolha a região da qual você enviará mensagens. 
**nota**  
A região é obrigatória na seção **Solicitações**. Mesmo que você tenha fornecido essas informações na seção **Detalhes do caso**, também é necessário incluí-las aqui.
   + Em **Tipo de recurso**, escolha **Limites gerais**.
   + Em **Limite**, escolha **Aumento de limite de gasto da conta**.

1. Em “Novo valor de limite”, insira o valor máximo (em USD) que você pode gastar em SMS a cada mês.

1. Em **Descrição do caso**, em **Descrição do caso de uso**, forneça os seguintes detalhes:
   + O site ou o aplicativo da empresa ou do serviço que está enviando mensagens SMS.
   + O serviço que é fornecido pelo seu site ou aplicativo e como suas mensagens SMS contribuem para esse serviço.
   + Como os usuários se cadastram para receber voluntariamente suas mensagens SMS no seu site, aplicativo ou em outro local.

   Se a cota de gastos solicitada (o valor que você especificou em **New quota value (Novo valor de cota)**) exceder 10.000 USD, forneça os detalhes adicionais a seguir para cada país de destino do sistema de mensagens:
   + Se você estiver usando um ID do remetente ou código simplificado. Se você está usando um ID do remetente, forneça:
     + O ID do remetente.
     + Se o ID do remetente está registrado com operadoras sem fio no país.
   + O máximo esperado transactions-per-second (TPS) para suas mensagens.
   + O tamanho médio das mensagens.
   + O modelo para as mensagens que você envia para o país.
   + (Opcional) Necessidades de codificação de caracteres, se houver.

1. (Opcional) Se você quiser enviar outras solicitações, escolha **Adicionar outra solicitação**. Se você incluir várias solicitações, forneça as informações necessárias para cada uma delas. Para obter as informações necessárias, consulte as outras seções em [Solicitar suporte para sistema de mensagens SMS do Amazon SNS](channels-sms-awssupport.md).

1. Em **Opções de contato**, para **Idioma de contato preferencial**, escolha o idioma no qual você deseja receber as comunicações sobre esse caso.

1. Quando terminar, escolha **Enviar**.

A Suporte equipe fornece uma resposta inicial à sua solicitação em 24 horas.

Para evitar que nossos sistemas sejam usados para enviar conteúdo indesejado ou malicioso, consideramos cuidadosamente cada solicitação. Se for possível, atenderemos à sua solicitação dentro desse período de 24 horas. No entanto, se for necessário solicitar mais informações a você, o tempo de resolução poderá ser mais longo.

Se o seu caso de uso não estiver alinhado com nossas políticas, talvez não seja possível atender à sua solicitação.

## Etapa 2: atualizar suas configurações de SMS no console do Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-settings"></a>

Depois de receber uma notificação de que a cota de gastos mensais foi aumentada, ajuste a cota de gastos de sua conta no console do Amazon SNS.

**Importante**  
Você deve concluir as etapas a seguir para que seu limite de gastos de SMS seja aumentado.

**Como ajustar sua cota de gastos no console**

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

1. Abra o menu de navegação à esquerda, expanda **Dispositivos móveis** e escolha **Mensagens de texto (SMS)**.

1. Na página **Mobile text messaging (SMS) [Mensagens de texto (SMS) em dispositivos móveis]**, na seção **Text messaging preferences (Preferências de mensagens de texto)**, escolha **Edit (Editar)**.

1. Na página **Editar preferências de mensagens de texto**, na seção **Detalhes**, insira o novo limite de gastos de SMS no campo **Limite de gastos da conta**.
**nota**  
É possível receber um aviso de que o valor inserido é maior que o limite de gastos padrão. Pode ignorar esse erro. 

1. Escolha **Salvar alterações**.
**nota**  
Se receber um erro “Parâmetro inválido”, verifique o contato do AWS Support e confirme se o novo limite de gastos de SMS foi inserido corretamente. Se você ainda tiver algum problema, abra um caso no AWS Support Center. 

Ao criar seu caso na Suporte Center, certifique-se de incluir todas as informações necessárias referentes ao tipo de solicitação que você está enviando. Caso contrário, o Suporte deve entrar em contato com você para obter essas informações antes de prosseguir. Ao enviar um caso detalhado, você ajuda a garantir que seu caso seja realizado sem atrasos. Para ver os detalhes necessários para tipos específicos de solicitações de SMS, consulte os tópicos a seguir.

 Para obter mais informações sobre IDs de remetente, consulte a seguinte documentação no *Guia do usuário do AWS End User Messaging SMS*:


| AWS End User Messaging SMSTópico do  | Descrição | 
| --- | --- | 
|  [Solicitar um aumento de cota de gastos](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html)  |  Sua cota de gastos determina quanto você pode gastar com o envio de mensagens SMS por meio do AWS End User Messaging SMS por mês.  | 
|  [Abra um caso na central de suporte para obter um ID de remetente](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-sender-id.html)  |  Se você planeja enviar mensagens a destinatários de um país em que os IDs de remetente são necessários, é possível solicitar um ID de remetente criando um novo caso no Centro do Suporte.  | 

# Práticas recomendadas para envio de mensagens SMS no Amazon SNS
<a name="channels-sms-best-practices"></a>

**Importante**  
O Guia do desenvolvedor de SMS do Amazon SNS foi atualizado. O Amazon SNS foi integrado com [AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html) para a entrega de mensagens SMS. Este Guia contém as informações mais recentes sobre como criar, configurar e gerenciar as mensagens SMS do Amazon SNS.

Os usuários de telefone celular tendem a ter uma tolerância muito baixa com mensagens SMS não solicitadas. As taxas de resposta para campanhas SMS não solicitadas quase sempre serão baixas e, portanto, o retorno do investimento será fraco.

Além disso, as operadoras de celular continuamente fazem auditoria em remetentes de SMS em massa. Elas limitam ou bloqueiam mensagens de números que elas determinam que estão enviando mensagens não solicitadas. 

O envio de conteúdo não solicitado também é uma violação da [Política de uso aceitável da AWS](https://aws.amazon.com/aup/#No_E-Mail_or_Other_Message_Abuse). A equipe do Amazon SNS audita campanhas de SMS de maneira rotineira e poderá limitar ou bloquear a sua capacidade de enviar mensagens se você estiver enviando mensagens não solicitadas.

Por fim, em muitos países, regiões e jurisdições, há graves penalidades para o envio de mensagens SMS não solicitadas. Por exemplo, nos Estados Unidos, o Telephone Consumer Protection Act (TCPA) afirma que os consumidores podem ganhar indenizações de US\$1 500 a US\$1 1.500 (pagos pelo remetente) para cada mensagem não solicitada que recebem.

Esta seção descreve várias práticas recomendadas que podem ajudar você a melhorar seu envolvimento com os clientes e evitar multas pesadas. No entanto, observe que esta seção não contém orientação jurídica. Sempre consulte seu advogado para obter orientação jurídica.

## Cumprir as leis, os regulamentos e os requisitos da operadora
<a name="channels-sms-best-practices-understand-laws"></a>

Você pode enfrentar multas e penalidades significativas se violar as leis e os regulamentos dos lugares onde seus clientes residem. Por esse motivo, é importante compreender as leis relacionadas a mensagens SMS em cada país ou região em que você faz negócios.

A lista a seguir inclui links para as principais leis que se aplicam às comunicações SMS em mercados importantes em todo o mundo.
+ **Estados Unidos**: o Telephone Consumer Protection Act de 1991, também conhecido como TCPA, aplica-se a certos tipos de mensagens SMS. Para obter mais informações, consulte [regras e regulamentos](https://www.fcc.gov/document/telephone-consumer-protection-act-1991) no site da Federal Communications Commission.
+ **Reino Unido**: as Privacy and Electronic Communications (EC Directive) Regulations 2003, também conhecidas como PECR, aplicam-se a certos tipos de mensagens SMS. Para obter mais informações, consulte [O que são PECR?](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guide-to-pecr/what-are-pecr/) no site do Information Commissioner's Office do Reino Unido.
+ **União Europeia**: a Privacy and Electronic Communications Directive 2002, também conhecida como ePrivacy Directive, aplica-se a alguns tipos de mensagens SMS. Para obter mais informações, consulte o [texto completo da lei](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32002L0058) no site Europa.eu.
+ **Canadá**: o Fighting Internet and Wireless Spam Act, mais comumente conhecido como Anti-Spam Law ou CASL do Canadá, aplica-se a certos tipos de mensagens SMS. Para obter mais informações, consulte o [texto completo da lei](http://www.parl.ca/DocumentViewer/en/40-3/bill/C-28/first-reading) no site do Parlamento do Canadá.
+ **Japão**: o Act on Regulation of Transmission of Specific Electronic Mail pode ser aplicável a determinados tipos de mensagens SMS. Para obter mais informações, consulte [Contramedidas contra spam do Japão](https://www.japaneselawtranslation.go.jp/en/laws/view/3767/en) no site do Ministry of Internal Affairs and Communications japonês.

Como remetente, essas leis podem se aplicar a você mesmo que sua empresa ou organização não esteja sediada em um desses países. Algumas das leis nesta lista foram originalmente criadas para abordar e-mails ou telefonemas não solicitados, mas foram interpretados ou expandidos para que fossem aplicados às mensagens SMS. Outros países e regiões podem ter suas próprias leis relacionadas à transmissão de mensagens SMS. Consulte um advogado em cada país ou região em que seus clientes estão localizados para obter orientação jurídica.

Em muitos países, as operadoras locais têm autoridade para determinar que tipo de tráfego flui em suas redes. Isso significa que elas podem impor restrições ao conteúdo de SMS que exceda os requisitos mínimos das leis locais.

## Obter permissão
<a name="channels-sms-best-practices-obtain-permission"></a>

Nunca envie mensagens a destinatários que não tenham solicitado explicitamente o recebimento dos tipos específicos de mensagens que você planeja enviar. Não compartilhe listas de aceitação, mesmo entre organizações da mesma empresa. 

Se os destinatários puderem se cadastrar para receber suas mensagens usando um formulário on-line, adicione sistemas para evitar que scripts automatizados inscrevam pessoas sem o conhecimento delas. Você também deve limitar o número de vezes que um usuário pode enviar um número de telefone em uma única sessão.

Ao receber uma solicitação de aceitação de SMS, envie uma mensagem ao destinatário pedindo para confirmar que ele deseja receber mensagens de você. Não envie a esse destinatário mensagens adicionais enquanto ele não confirmar a assinatura. Uma mensagem de confirmação de inscrição pode ser parecida com o exemplo a seguir:

`Text YES to join ExampleCorp alerts. 2 msgs/month. Msg & data rates may apply. Reply HELP for help, STOP to cancel.`

Mantenha registros que incluem a data, a hora e a origem de cada solicitação de inclusão e confirmação de inscrição. Isso pode ser útil se uma operadora ou uma agência reguladora solicitar, e também pode ajudar você a realizar auditorias de rotina de sua lista de clientes.

### Fluxo de trabalho de aceitação
<a name="channels-sms-best-practices-obtain-permission-optin"></a>

Em alguns casos (como o registro de código curto ou de chamada gratuita dos EUA), as operadoras de celular exigem que você forneça modelos ou capturas de tela de todo o seu fluxo de trabalho de aceitação. Os modelos ou as capturas de tela devem ser bem semelhantes ao fluxo de trabalho de aceitação que seus destinatários concluirão. 

Seus modelos ou capturas de tela devem incluir todas as divulgações necessárias listadas abaixo para manter o mais alto nível de conformidade. 

**Divulgações obrigatórias**
+ Uma descrição do caso de uso de mensagens que você enviará por meio de seu programa.
+ A frase “Taxas de mensagens e dados podem ser aplicadas”.
+ Uma indicação da frequência com que os destinatários receberão suas mensagens. Por exemplo, um programa de mensagens recorrentes pode indicar “uma mensagem por semana”. Um caso de uso de senha de uso único ou autenticação multifator pode indicar “a frequência da mensagem varia” ou “uma única mensagem por tentativa de login”.
+ Links para seus documentos de termos e condições e política de privacidade. 

**Motivos comuns de rejeição de aceitação não compatíveis**
+ Se o nome da empresa fornecido não corresponder ao fornecido no modelo ou na captura de tela. Qualquer relação não óbvia deve ser explicada na descrição do fluxo de trabalho de aceitação.
+ Se parecer que uma mensagem será enviada ao destinatário, mas nenhum consentimento for obtido explicitamente antes disso. O consentimento explícito é um requisito de todas as mensagens.
+ Se parecer que é necessário receber uma mensagem de texto para cadastramento em um serviço. Isso não será compatível se o fluxo de trabalho não fornecer nenhuma alternativa ao recebimento de uma mensagem de aceitação em outro formato, como e-mail ou chamada de voz. 
+ Se o teor da aceitação for apresentado inteiramente nos termos de serviço. As divulgações devem sempre ser apresentadas ao destinatário no momento da aceitação, em vez de armazenadas em um documento de política vinculado. 
+ Se um cliente consentir em receber um tipo de mensagem sua e você enviar a ele outros tipos de mensagem de texto. Por exemplo, ele consente em receber senhas de uso único, mas também recebe mensagens sobre enquetes e pesquisas.
+ Se as divulgações exigidas (listadas acima) não forem apresentadas aos destinatários.

O exemplo a seguir está em conformidade com os requisitos das operadoras de celular para um caso de uso de autenticação multifator.

![\[Uma step-by-step maquete do fluxo de trabalho opcional para habilitar a autenticação multifatorial (MFA) em uma conta de usuário com. ExampleCorp O processo começa com o usuário fornecendo informações básicas da conta, como nome e e-mail. Em seguida, o usuário decide se deseja ativar o MFA para aumentar a segurança. Se a MFA estiver ativada, o usuário selecionará como deseja receber o token de MFA, com opções como mensagem de texto ou chamada telefônica. Se o usuário selecionar uma mensagem de texto, ele receberá um SMS com um código de verificação. A etapa final exige que o usuário insira o código recebido para confirmar seu número de telefone, concluindo o processo de aceitação. Esse modelo garante que todas as divulgações necessárias sejam fornecidas para conformidade com o SMS.\]](http://docs.aws.amazon.com/pt_br/sns/latest/dg/images/best-practices-usecase.png)


Ele contém texto e imagens finalizados e mostra todo o fluxo de aceitação, complementado por anotações. No fluxo de aceitação, o cliente precisa tomar medidas distintas e intencionais para fornecer seu consentimento para receber mensagens de texto e todas as divulgações necessárias estão incluídas.

### Outros tipos de fluxo de trabalho de aceitação
<a name="channels-sms-best-practices-obtain-permission-other"></a>

As operadoras de celular também aceitarão fluxos de trabalho de aceitação fora de aplicações e sites, como aceitação verbal ou por escrito, se estiverem em conformidade com o descrito acima. Um fluxo de trabalho de aceitação compatível e um script verbal ou por escrito obterão o consentimento explícito do destinatário para receber um tipo específico de mensagem. São exemplos o script verbal que um agente de suporte usa para obter consentimento antes de gravar em um banco de dados de serviços ou um número de telefone listado em um folheto promocional. Para fornecer um modelo desses tipos de fluxo de trabalho de aceitação da inscrição, você pode fornecer uma captura de tela de seu script de aceitação, material de marketing ou banco de dados onde os números são coletados. As operadoras de celular poderão ter perguntas adicionais sobre esses casos de uso se uma aceitação não estiver clara ou se o caso de uso exceder determinados volumes.

## Não enviar para listas antigas
<a name="channels-sms-best-practices-old-lists"></a>

As pessoas mudam de número de telefone com frequência. Um número de telefone pelo qual você obteve consentimento para entrar em contato há dois anos pode pertencer a outra pessoa hoje. Não use listas antigas de números de telefone para um novo programa de mensagens; se você fizer isso, é provável que algumas mensagens sejam malsucedidas porque o número não está mais funcionando e algumas pessoas optam por não aceitar as mensagens porque não se lembram de ter dado consentimento.

## Fazer auditoria em suas listas de clientes
<a name="channels-sms-best-practices-audit-lists"></a>

Se você envia campanhas de SMS recorrentes, faça uma auditoria em suas listas de cliente regularmente. Fazer uma auditoria nas listas de clientes garante que somente os clientes interessados em receber as mensagens são aqueles que as recebem. 

Ao fazer uma auditoria em sua lista, envie a cada cliente incluído uma mensagem que lembre a ele que está inscrito e ofereça informações sobre o cancelamento da inscrição. Uma mensagem de lembrete pode ser parecida com o exemplo a seguir:

`You're subscribed to ExampleCorp alerts. Msg & data rates may apply. Reply HELP for help, STOP to unsubscribe.`

## Manter registros
<a name="channels-sms-best-practices-keep-records"></a>

Mantenha registros que mostram quando cada cliente solicitou o recebimento de mensagens SMS e quais mensagens você enviou para cada cliente. Muitos países e regiões do mundo exigem remetentes de SMS para manter esses registros de uma forma que possam ser facilmente recuperados. Operadoras de celular também podem solicitar essas informações a qualquer momento. As informações exatas que você deve fornecer variam de acordo com o país ou região. Para obter mais informações sobre os requisitos para manter registros, analise os regulamentos sobre o envio de mensagens SMS comerciais em cada país ou região dos clientes.

Às vezes, uma operadora ou agência reguladora pedem para fornecermos um comprovante de que um cliente optou por receber mensagens de você. Nessas situações, entre em Suporte contato com você com uma lista das informações solicitadas pela operadora ou agência. Se você não conseguir fornecer as informações necessárias, poderemos pausar a sua capacidade de enviar outras mensagens SMS.

## Torne suas mensagens claras, sinceras e concisas
<a name="channels-sms-best-practices-appropriate-content"></a>

O SMS é um meio que tem especificidades. O character-per-message limite de 160 significa que suas mensagens precisam ser concisas. Técnicas que você pode usar em outros canais de comunicação, como e-mail, podem não se aplicar ao canal de SMS e até parecer desonestas ou enganosas quando usadas com mensagens SMS. Se o conteúdo de suas mensagens não estiver de acordo com as práticas recomendadas, os destinatários poderão ignorá-las; na pior das hipóteses, as operadoras de celular poderão identificar suas mensagens como spam e bloquear futuras mensagens de seu número de telefone.

Esta seção fornece algumas dicas e ideias para criar um corpo de mensagem SMS eficaz.

### Identificar-se como remetente
<a name="channels-sms-best-practices-appropriate-content-identify"></a>

Seus destinatários devem saber imediatamente que uma mensagem é sua. Os remetentes que seguem essa prática recomendada incluem um nome de identificação (“nome do programa”) no início de cada mensagem.

**Não elabore mensagens deste tipo:**  
`Your account has been accessed from a new device. Reply Y to confirm.`

**Em vez disso, tente:**  
`ExampleCorp Financial Alerts: You have logged in to your account from a new device. Reply Y to confirm, or STOP to opt-out.`

### Não tente fazer com que sua mensagem pareça uma person-to-person mensagem
<a name="channels-sms-best-practices-appropriate-content-p2p"></a>

Alguns profissionais de marketing ficam tentados a dar um toque pessoal às mensagens SMS fazendo com que pareçam vir de uma pessoa. No entanto, essa técnica pode fazer sua mensagem parecer uma tentativa de phishing.

**Não elabore mensagens deste tipo:**  
`Hi, this is Jane. Did you know that you can save up to 50% at Example.com? Click here for more info: https://www.example.com.`

**Em vez disso, tente:**  
`ExampleCorp Offers: Save 25-50% on sale items at Example.com. Click here to browse the sale: https://www.example.com. Text STOP to opt-out.`

### Ter cuidado ao falar sobre dinheiro
<a name="channels-sms-best-practices-appropriate-content-money"></a>

Os golpistas geralmente se aproveitam do desejo das pessoas de economizar e receber dinheiro. Evite que as ofertas pareçam muito boas para serem verdadeiras. Não use a sedução de dinheiro para enganar as pessoas. Não use símbolos monetários para indicar dinheiro.

**Não elabore mensagens deste tipo:**  
`Save big $$$ on your next car repair by going to https://www.example.com.`

**Em vez disso, tente:**  
`ExampleCorp Offers: Your ExampleCorp insurance policy gets you discounts at 2300+ repair shops nationwide. More info at https://www.example.com. Text STOP to opt-out.`

### Usar somente os caracteres necessários
<a name="channels-sms-best-practices-appropriate-content-characters"></a>

Muitas vezes, as empresas tendem a proteger suas marcas registradas incluindo símbolos como ™ ou ® nas mensagens. No entanto, esses símbolos não fazem parte do conjunto padrão de caracteres (conhecido como alfabeto GSM) que pode ser incluído em uma mensagem SMS de 160 caracteres. Quando você envia uma mensagem com esses caracteres, ela é enviada automaticamente usando um sistema de codificação de caracteres diferente, que aceita apenas 70 caracteres por parte da mensagem. Por isso, sua mensagem pode ser dividida em várias partes. Como há cobrança por cada parte da mensagem enviada, isso pode ter um custo superior ao que você espera para enviar a mensagem completa. Além disso, os destinatários podem receber várias mensagens sequenciais de você em vez de uma única mensagem. Para obter mais informações sobre a codificação de caracteres do SMS, consulte [Limites de caracteres de SMS no Amazon SNS](#channels-sms-limitations-characters).

**Não elabore mensagens deste tipo:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget® at example.com and use the promo code WIDGET.`

**Em vez disso, tente:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget(R) at example.com and use the promo code WIDGET.`

**nota**  
Os dois exemplos anteriores são quase idênticos, mas o primeiro exemplo contém um símbolo de marca registrada (®), o qual não faz parte do alfabeto GSM. Por isso, o primeiro exemplo é enviado como duas partes da mensagem, enquanto o segundo é enviado como uma parte da mensagem.

### Usar links válidos e seguros
<a name="channels-sms-best-practices-appropriate-content-links"></a>

Se a sua mensagem incluir links, confira-os para verificar se eles funcionam. Teste os links em um dispositivo fora da rede corporativa para garantir que eles sejam resolvidos corretamente. Devido ao limite de 160 caracteres das mensagens SMS, mensagens muito longas URLs podem ser divididas em várias mensagens. Você deve usar domínios de redirecionamento para fornecer abreviações. URLs No entanto, você não deve usar serviços gratuitos de encurtamento de links, como tinyurl.com ou bitly.com, porque as operadoras tendem a filtrar mensagens que incluem links nesses domínios. No entanto, você pode usar serviços pagos de encurtamento de links, desde que os links apontem para um domínio dedicado ao uso exclusivo de sua empresa ou organização. 

**Não elabore mensagens deste tipo:**  
`Go to https://tinyurl.com/4585y8mr today for a special offer!`

**Em vez disso, tente:**  
`ExampleCorp Offers: Today only, get an exclusive deal on an ExampleCorp Widget. See https://a.co/cFKmaRG for more info. Text STOP to opt-out.`

### Limitar o número de abreviações utilizadas
<a name="channels-sms-best-practices-appropriate-content-abbrev"></a>

A limitação de 160 caracteres do canal de SMS leva alguns remetentes a acreditar que precisam usar abreviações extensivamente em suas mensagens. No entanto, o uso excessivo de abreviações pode parecer pouco profissional para muitos leitores e fazer com que alguns usuários denunciem sua mensagem como spam. É plenamente possível escrever uma mensagem coerente sem usar um número excessivo de abreviações.

**Não elabore mensagens deste tipo:**  
`Get a gr8 deal on ExampleCorp widgets when u buy a 4-pack 2day.`

**Em vez disso, tente:**  
`ExampleCorp Alerts: Today only—an exclusive deal on ExampleCorp Widgets at example.com. Text STOP to opt-out.`

## Responder de maneira apropriada
<a name="channels-sms-best-practices-respond-appropriately"></a>

Quando um destinatário responde suas mensagens, responda com informações úteis. Por exemplo, quando um cliente responder a uma de suas mensagens com a palavra-chave "AJUDA", envie informações sobre o programa no qual ele está inscrito, o número de mensagens que você vai enviar por mês e as maneiras com as quais ele pode entrar em contato com você para obter mais informações. Uma resposta a uma mensagem de AJUDA pode ser parecida com o exemplo a seguir:

`HELP: ExampleCorp alerts: email help@example.com or call 425-555-0199. 2 msgs/month. Msg & data rates may apply. Reply STOP to cancel.`

Quando um cliente responder com a palavra-chave "PARAR", explique que ele não receberá mais mensagens. Uma resposta a uma mensagem de PARAR pode ser parecida com o exemplo a seguir:

`You're unsubscribed from ExampleCorp alerts. No more messages will be sent. Reply HELP, email help@example.com, or call 425-555-0199 for more info.`

## Ajustar seu envio com base no envolvimento
<a name="channels-sms-best-practices-adjust-engagement"></a>

As prioridades de seus clientes podem mudar ao longo do tempo. Se os clientes não acham mais suas mensagens úteis, eles podem querer cancelar a inscrição para suas mensagens ou até mesmo informar suas mensagens como não solicitadas. Por esses motivos, é importante que você ajuste suas práticas de envio com base no envolvimento do cliente.

Você precisa ajustar a frequência de suas mensagens para clientes que raramente interagem com elas. Por exemplo, se você envia mensagens semanais para clientes envolvidos, pode criar uma compilação mensal separada para os clientes com menos envolvimento. 

Por fim, remova das suas listas de clientes aqueles que não têm nenhum envolvimento. Essa etapa impede que os clientes fiquem frustrados com suas mensagens. Isso também gera economia e ajuda a proteger sua reputação como remetente.

## Enviar em momentos adequados
<a name="channels-sms-best-practices-appropriate-times"></a>

Somente envie mensagens durante o horário comercial normal. Se você envia mensagens na hora do jantar ou no meio da noite, há uma boa chance de que seus clientes cancelarão a inscrição de suas listas para não serem mais perturbados. Além disso, não faz sentido enviar mensagens SMS quando os clientes não podem responder a elas imediatamente. 

Se você enviar campanhas ou jornadas para públicos muito grandes, confira as taxas de throughput de seus números de originação. Divida o número de destinatários pela taxa de throughput para determinar quanto tempo levará para enviar mensagens a todos os destinatários.

## Evitar a fadiga entre canais
<a name="channels-sms-best-practices-cross-channel-fatigue"></a>

Se você usa vários canais de comunicação (como e-mail, SMS e mensagens push) em suas campanhas, não envie a mesma mensagem em cada canal. Quando você envia a mesma mensagem ao mesmo tempo em mais de um canal, seus clientes provavelmente percebem o comportamento de envio como irritante em vez de útil.

## Usar códigos curtos dedicados
<a name="channels-sms-best-practices-dedicated-short-codes"></a>

Se você usa códigos simplificados, mantenha um separado para cada marca e cada tipo de mensagem. Por exemplo, se a sua empresa tem duas marcas, use um código simplificado separado para cada uma. Da mesma forma, se você envia mensagens promocionais e transacionais, use um código simplificado separado para cada tipo de mensagem. Para saber mais sobre como solicitar códigos curtos, consulte [Solicitar códigos curtos para mensagens SMS AWS End User Messaging SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-short-code.html) no *Guia do usuário do AWS End User Messaging SMS *.

## Verificar seus números de telefone de destino
<a name="channels-sms-best-practices-verify-destination-numbers"></a>

Ao enviar mensagens SMS pelo Amazon SNS, cada parte da mensagem enviada é cobrada. O preço pago por parte da mensagem varia de acordo com o país ou a região do destinatário. Para obter mais informações sobre preços do SMS, consulte [Definição de preço do SMS da AWS mundial](https://aws.amazon.com/sns/sms-pricing).

Quando o Amazon SNS aceita uma solicitação para enviar uma mensagem SMS (como resultado de uma chamada para a [SendMessages](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#SendMessages)API ou como resultado do lançamento de uma campanha ou jornada), você é cobrado pelo envio dessa mensagem. Essa afirmação se aplica mesmo que o destinatário pretendido não receba realmente a mensagem. Por exemplo, se o número de telefone do destinatário não estiver mais funcionando ou se o número para o qual você enviou a mensagem não for um número de celular válido, mesmo assim haverá cobrança pelo envio da mensagem.

O Amazon SNS aceita solicitações válidas para enviar mensagens SMS e tenta entregá-las. Por esse motivo, você deve validar se os números de telefone para os quais você envia mensagens são números de celular válidos. Você pode usar AWS End User Messaging SMS para enviar uma mensagem de teste para determinar se um número de telefone é válido e que tipo de número é (como celular, telefone fixo ou VoIP). Para obter mais informações, consulte [Enviar uma mensagem de teste com o simulador de SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/getting-started-tutorial.html#getting-started-tutorial-step3) no *Guia do usuário do AWS End User Messaging SMS *.

## Ter a redundância em mente ao projetar
<a name="channels-sms-best-practices-redundancy"></a>

Para programas de mensagens essenciais, recomendamos que você configure o Amazon SNS em mais de uma Região da AWS. O Amazon SNS está disponível em vários. Regiões da AWS Para obter uma lista de regiões onde o Amazon SNS está disponível, consulte a [Referência geral da AWS](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

Os números de telefone que você usa para mensagens SMS, inclusive códigos curtos, códigos longos, números gratuitos e números 10DLC, não podem ser replicados entre Regiões da AWS. Por isso, para usar o Amazon SNS em várias regiões, você deve solicitar números de telefone separados em cada região em que deseja usar o Amazon SNS. Por exemplo, se você usar um código curto para enviar mensagens de texto para destinatários nos Estados Unidos da América, precisará solicitar códigos curtos separados em Região da AWS cada um dos que planeja usar.

Em alguns países, você também pode usar vários tipos de número de telefone para aumentar a redundância. Por exemplo, nos Estados Unidos, você pode solicitar códigos curtos, números 10DLC e números gratuitos. Cada um desses tipos de número de telefone segue um caminho diferente até o destinatário. Ter vários tipos de números de telefone disponíveis — no mesmo Região da AWS ou distribuídos em vários Regiões da AWS— fornece uma camada adicional de redundância, que pode ajudar a melhorar a resiliência.

## Limites e restrições de SMS
<a name="channels-sms-best-practices-limits"></a>

Para ver os limites e as restrições de SMS, consulte [Limites e restrições de SMS e MMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations.html) no *Guia do usuário do AWS End User Messaging SMS *.

## Gerenciamento de palavras-chave de cancelamento
<a name="channels-sms-best-practices-optout-keywords"></a>

Os destinatários de SMS podem usar seus dispositivos para cancelar o recebimento de mensagens respondendo com uma palavra-chave. Para obter mais informações, consulte [Cancelar recebimento de mensagens SMS](sms_manage.md#sms_manage_optout).

## CreatePool
<a name="channels-sms-best-practices-createpool"></a>

Use a ação da API `CreatePool` para criar um grupo e associar uma identidade de origem especificada ao grupo. Para obter mais informações, consulte [CreatePool](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_CreatePool.html)em *Referência AWS End User Messaging SMS da API*.

## PutKeyword
<a name="channels-sms-best-practices-putkeyword"></a>

Use a ação da API `PutKeyword` para criar ou atualizar uma configuração de uma palavra-chave em um grupo ou número de telefone de origem. Para obter mais informações, consulte [PutKeyword](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_PutKeyword.html)em *Referência AWS End User Messaging SMS da API*.

## Gerenciar configurações de números
<a name="channels-sms-best-practices-number-settings"></a>

Para gerenciar as configurações dos códigos curtos e longos dedicados que você solicitou ao AWS Support e atribuiu à sua conta, consulte [Alterar os recursos de um número de telefone com a AWS CLI](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-change-capabilitiy.html) entrada *AWS End User Messaging SMS*.

## Limites de caracteres de SMS no Amazon SNS
<a name="channels-sms-limitations-characters"></a>

Uma mensagem SMS pode ter até 140 bytes de informação. O número de caracteres que você pode incluir em uma única mensagem SMS depende do tipo de caracteres contidos na mensagem.

Se a mensagem tiver somente [caracteres do conjunto de caracteres GSM 03.38](#channels-sms-limitations-characters-gsm-alphabet), também conhecido como alfabeto GSM de 7 bits, ela poderá ter até 160 caracteres. Se a mensagem tiver caracteres que não façam parte do conjunto de caracteres GSM 03.38, ela poderá ter até 70 caracteres. Ao enviar uma mensagem SMS, o Amazon SNS determina automaticamente a codificação mais eficiente a ser usada.

Quando uma mensagem tiver mais do que o número máximo de caracteres, ela será dividida em várias partes. Quando as mensagens são divididas em várias partes, cada parte contém informações adicionais sobre a parte da mensagem que a precede. Quando o dispositivo do destinatário recebe partes da mensagem que estão separadas dessa forma, ele usa essas informações adicionais para garantir que todas as partes da mensagem sejam exibidas na ordem correta. Dependendo da operadora de celular e do dispositivo do destinatário, várias mensagens podem ser exibidas como uma única mensagem ou como uma sequência de mensagens separadas. Como resultado, o número de caracteres em cada parte da mensagem é reduzido a 153 (para mensagens que contenham somente caracteres GSM 03.38) ou 67 (para mensagens que contenham outros caracteres). É possível estimar quantas partes de mensagem sua mensagem contém antes de enviá-la usando ferramentas de calculadora de comprimento de SMS, muitas das quais estão disponíveis online. O tamanho máximo compatível para qualquer mensagem é de 1,6 mil caracteres GSM ou 630 caracteres não GSM. Para obter mais informações sobre throughput e tamanho de mensagens, consulte [Limites de caracteres de SMS no Amazon Pinpoint](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-limitations-mps.html) no *Guia do usuário do Amazon Pinpoint*.

Para exibir o número de partes da mensagem para cada mensagem enviada, primeiro é necessário habilitar as [configurações de streaming de eventos](https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-event-streams.html). Ao fazer isso, o Amazon SNS produzirá um evento `_SMS.SUCCESS` quando a mensagem for entregue à operadora de telefonia móvel do destinatário. O registro do evento `_SMS.SUCCESS` contém um atributo chamado `attributes.number_of_message_parts`. Esse atributo especifica o número de partes da mensagem que a mensagem continha.

**Importante**  
Quando enviar uma mensagem que contém mais de uma parte, você será cobrado pelo número de partes contidas na mensagem.

### Conjunto de caracteres GSM 03.38
<a name="channels-sms-limitations-characters-gsm-alphabet"></a>

A tabela a seguir indica todos os caracteres presentes no conjunto de caracteres GSM 03.38. Se você enviar uma mensagem que inclui apenas os caracteres mostrados na tabela a seguir, a mensagem poderá ter até 160 caracteres. 


| Caracteres padrão GSM 03.38 | 
| --- | 
| A | B | C | D | E | F | G | H | eu | J | K | L | M | 
| N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 
| a | b | c | d | p | f | g | h | i | j | k | l | m | 
| n | o | p | q | r | s | t | u | v | w | x | y | z | 
| à | Å | å | Ä | ä | Ç | É | é | è | ì | Ñ | ñ | ò | 
| Ø | ø | Ö | ö | ù | Ü | ü | Æ | æ | ß | 0 | 1 | 2 | 
| 3 | 4 | 5 | 6 | 7 | 8 | 9 | & | \$1 | @ | : | , | ¤ | 
| \$1 | = | \$1 | > | \$1 | - | ¡ | ¿ | ( | < | % | . | \$1 | 
| £ | ? | " | ) | § | ; | ' | / | \$1 | ¥ | Δ | Φ | Γ | 
| Λ | Ω | Π | Ψ | Σ | Θ | Ξ |  |  |  |  |  |  | 

O conjunto de caracteres GSM 03.38 inclui vários símbolos além dos mostrados na tabela anterior. No entanto, cada um desses caracteres é contado como dois caracteres, pois também inclui um caractere de escape invisível:
+ ^
+ \$1
+ \$1
+ \$1
+ [
+ ]
+ \$1
+ \$1
+ €

Por fim, o conjunto de caracteres GSM 03.38 também inclui os seguintes caracteres não impressos:
+ Um caractere de espaço.
+ Um controle de avanço de linha, que significa o fim de uma linha de texto e o início de outra.
+ Um controle de retorno de linha, que move ao início de uma linha de texto (geralmente após um caractere de avanço de linha).
+ Um controle de escape, que é adicionado automaticamente aos caracteres indicados na lista anterior.

### Exemplos de mensagens
<a name="channels-sms-limitations-characters-example-messages"></a>

Esta seção contém vários exemplos de mensagens SMS. Para cada exemplo, a seção mostra o número total de caracteres, bem como o número de partes da mensagem.

**Exemplo 1: uma mensagem longa que contém somente caracteres no alfabeto GSM 03.38**  
A mensagem a seguir contém somente caracteres que estão no alfabeto GSM 03.38.

`Hello Carlos. Your Example Corp. bill of $100 is now available. Autopay is scheduled for next Thursday, April 9. To view the details of your bill, go to https://example.com/bill1.`

A mensagem anterior contém 180 caracteres, portanto, deve ser dividida em várias partes. Quando uma mensagem é dividida em várias partes, cada parte pode conter 153 caracteres GSM 03.38. Como resultado, esta mensagem será enviada em 2 partes.

**Exemplo 2: uma mensagem que contém caracteres multibyte**  
A mensagem a seguir contém vários caracteres chineses, todos fora do alfabeto GSM 03.38. 

`亚马逊公司是一家总部位于美国西雅图的跨国电子商务企业，业务起始于线上书店，不久之后商品走向多元化。杰夫·贝佐斯于1994年7月创建了这家公司。`

A mensagem anterior contém 71 caracteres. No entanto, como quase todos os caracteres na mensagem estão fora do alfabeto GSM 03.38, ela será enviada em duas partes. Cada uma dessas partes da mensagem pode conter um máximo de 67 caracteres.

**Exemplo 3: uma mensagem que contém um único caractere que não faz parte do GSM**  
A mensagem a seguir contém um único caractere que não faz parte do alfabeto GSM 03.38. Neste exemplo, o caractere é uma aspa simples de fechamento (’), que é um caractere diferente de um apóstrofo regular ('). Aplicativos de processamento de texto, como o Microsoft Word, muitas vezes substituem automaticamente os apóstrofos por aspas simples de fechamento. Se fizer rascunhos de suas mensagens SMS no Microsoft Word e colá-las no Amazon SNS, você deverá remover esses caracteres especiais e substituí-los por apóstrofos.

`John: Your appointment with Dr. Salazar’s office is scheduled for next Thursday at 4:30pm. Reply YES to confirm, NO to reschedule.`

A mensagem anterior contém 130 caracteres. No entanto, como ela contém o caractere de aspas simples de fechamento, que não faz parte do alfabeto GSM 03.38, ela será enviada em duas partes.

Se você substituir o caractere de aspas simples de fechamento nesta mensagem por um apóstrofo (que faz parte do alfabeto GSM 03.38), a mensagem será enviada em uma única parte.

# Enviar notificações por push para dispositivos móveis com o Amazon SNS
<a name="sns-mobile-application-as-subscriber"></a>

Você pode usar o Amazon SNS para enviar mensagens de notificação por push diretamente para aplicações em dispositivos móveis. As mensagens de notificação por push enviadas para um endpoint móvel podem aparecer no aplicativo móvel como alertas de mensagem, atualizações de distintivo ou alertas com som. 

![\[Visão geral das notificações enviadas por push para dispositivos móveis do Amazon SNS\]](http://docs.aws.amazon.com/pt_br/sns/latest/dg/images/sns-mobile-push-notifications.png)


**Topics**
+ [Como funcionam as notificações ao usuário do Amazon SNS](#sns-how-user-notifications-work)
+ [Configurar notificações de push com o Amazon SNS](#sns-user-notifications-process-overview)
+ [Configurar uma aplicação móvel no Amazon SNS](mobile-push-send.md)
+ [Usar o Amazon SNS para notificações enviadas por push para dispositivos móveis](mobile-push-notifications.md)
+ [Atributos de aplicativo móvel do Amazon SNS](sns-msg-status.md)
+ [Notificações de eventos do aplicativo Amazon SNS para aplicativos móveis](application-event-notifications.md)
+ [Ações da API de push para dispositivos móveis](mobile-push-api.md)
+ [Erros comuns da API push móvel do Amazon SNS](mobile-push-api-error.md)
+ [Usar atributo de mensagem Time to Live do Amazon SNS para notificações por push para dispositivos móveis](sns-ttl.md)
+ [Regiões suportadas pelo aplicativo móvel Amazon SNS](sns-mobile-push-supported-regions.md)
+ [Práticas recomendadas para gerenciar notificações por push para dispositivos móveis do Amazon SNS](mobile-push-notifications-best-practices.md)

## Como funcionam as notificações ao usuário do Amazon SNS
<a name="sns-how-user-notifications-work"></a>

Você envia as mensagens de notificação por push para dispositivos móveis e desktops usando um dos seguintes serviços de notificação por push compatíveis: 
+ Amazon Device Messaging (ADM)
+ Serviço de notificação push da Apple (APNs) para iOS e Mac OS X
+ Baidu Cloud Push (Baidu)
+ Firebase Cloud Messaging (FCM)
+ Microsoft Push Notification Service for Windows Phone (MPNS)
+ Windows Push Notification Services (WNS)

Os serviços de notificação push, como APNs o FCM, mantêm uma conexão com cada aplicativo e dispositivo móvel associado registrado para usar o serviço. Quando uma aplicação e um dispositivo móvel são registrados, o serviço de notificação por push retorna um token de dispositivo. O Amazon SNS usa o token de dispositivo para criar um endpoint móvel, para o qual é possível enviar mensagens diretas de notificação por push. Para que o Amazon SNS se comunique com os diferentes serviços de notificação por push, você envia suas credenciais de serviço de notificação por push ao Amazon SNS para que sejam usadas em seu nome. Para obter mais informações, consulte [Configurar notificações de push com o Amazon SNS](#sns-user-notifications-process-overview). 

 Além de enviar mensagens de notificação por push diretas, você também pode usar o Amazon SNS para enviar mensagens para endpoints móveis inscritos em um tópico. O conceito é o mesmo que para inscrever outros tipos de endpoint, como Amazon SQS, HTTP/S, e-mail e SMS, em um tópico, conforme descrito em [O que é o Amazon SNS?](welcome.md). A diferença é que o Amazon SNS se comunica usando os serviços de notificação por push para que os endpoints móveis inscritos recebam mensagens de notificação por push enviadas para o tópico.

## Configurar notificações de push com o Amazon SNS
<a name="sns-user-notifications-process-overview"></a>

1. [Obtenha as credenciais e o token de dispositivo](sns-prerequisites-for-mobile-push-notifications.md) para as plataformas móveis para as quais deseja oferecer suporte.

1. Use as credenciais para criar um objeto de aplicativo da plataforma (`PlatformApplicationArn`) usando o Amazon SNS. Para obter mais informações, consulte [Criar uma aplicação da plataforma Amazon SNS](mobile-push-send-register.md).

1. Use as credenciais retornadas para solicitar um token para o dispositivo e aplicativo móvel dos serviços de notificação por push. O token que você recebe representa seu dispositivo e aplicativo móvel.

1. Use o token de dispositivo e o `PlatformApplicationArn` para criar um objeto de endpoint da plataforma (`EndpointArn`) usando o Amazon SNS. Para obter mais informações, consulte [Configurar um endpoint da plataforma Amazon SNS para notificações móveis](mobile-platform-endpoint.md).

1. Use o `EndpointArn` para [publicar uma mensagem em um aplicativo em um dispositivo móvel](mobile-push-send.md). Para obter mais informações, consulte [Mensagens diretas para dispositivos móveis do Amazon SNS](mobile-push-notifications.md#mobile-push-send-directmobile) e a API [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) na Referência da API do Amazon Simple Notification Service.

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

# Usar o Amazon SNS para notificações enviadas por push para dispositivos móveis
<a name="mobile-push-notifications"></a>

 Esta seção descreve como enviar notificações por push móveis.

## Publicar em um tópico
<a name="mobile-push-send-topicmobile"></a>

Também é possível usar o Amazon SNS para enviar mensagens para endpoints móveis inscritos em um tópico. O conceito é o mesmo que para inscrever outros tipos de endpoint, como Amazon SQS, HTTP/S, e-mail e SMS, em um tópico, conforme descrito em [O que é o Amazon SNS?](welcome.md). A diferença é que o Amazon SNS se comunica por meio de serviços de notificação como o Apple Push Notification Service (APNS) e o Google Firebase Cloud Messaging (FCM). Por meio do serviço de notificações, os endpoints móveis inscritos recebem as notificações enviadas ao tópico. 

## Mensagens diretas para dispositivos móveis do Amazon SNS
<a name="mobile-push-send-directmobile"></a>

Você pode enviar mensagens de notificação por push do Amazon SNS diretamente para um endpoint que representa uma aplicação em um dispositivo móvel. 

**Para enviar uma mensagem direta**

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

1. No painel de navegação, escolha **Push notifications** (Notificações por push).

1. Na página de **notificações push móveis**, na seção **Aplicativos da plataforma**, escolha o nome do aplicativo, por exemplo***MyApp***.

1. Na ***MyApp*** página, na seção **Endpoints**, escolha um endpoint e escolha **Publicar** mensagem.

1. Na página **Publish message to endpoint (Publicar mensagem no endpoint)**, insira a mensagem que aparecerá no aplicativo do dispositivo móvel e escolha **Publish message (Publicar mensagem)**.

   O Amazon SNS envia a mensagem de notificação para o serviço de notificação da plataforma que, por sua vez, envia a mensagem para a aplicação.

# Publicar notificações do Amazon SNS com cargas úteis específicas da plataforma
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

Você pode usar o Console de gerenciamento da AWS Amazon SNS APIs para enviar mensagens personalizadas com cargas específicas da plataforma para dispositivos móveis. Para obter informações sobre o uso do Amazon SNS APIs, consulte [Ações da API de push para dispositivos móveis](mobile-push-api.md) e o `SNSMobilePush.java` arquivo em. `[snsmobilepush.zip](samples/snsmobilepush.zip)` 

## Enviar mensagens formatadas em JSON
<a name="mobile-push-send-json"></a>

Ao enviar cargas específicas à plataforma, os dados devem estar formatados como strings de par de chave/valor JSON, com aspas em sequência de escape.

Os exemplos a seguir mostram uma mensagem personalizada para a plataforma do FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"Hello\", \"body\": \"This is a test.\"}, \"data\": {\"dataKey\": \"example\"}}}}"
}
```

## Enviar mensagens específicas à plataforma
<a name="mobile-push-send-platform"></a>

Além de enviar dados personalizados como pares de chave/valor, é possível enviar pares de chave/valor específicos à plataforma.

O exemplo a seguir mostra a inclusão dos parâmetros `time_to_live` e `collapse_key` do FCM depois dos pares de chave/valor de dados personalizados no parâmetro `data` do FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"TitleTest\", \"body\": \"Sample message for Android or iOS endpoints.\"}, \"data\":{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}}}}"
}
```

Para obter uma lista dos pares de chave/valor compatíveis em cada um dos serviços de notificação push compatíveis com o Amazon SNS, consulte o seguinte: 

**Importante**  
O Amazon SNS agora oferece suporte à API HTTP v1 do Firebase Cloud Messaging (FCM) para enviar notificações push móveis para dispositivos Android.  
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.
+ [Referência da chave de carga útil](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1) na documentação APNs 
+ [Protocolo HTTP do Firebase Cloud Messaging](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) na documentação do FCM
+ [Send a Message](https://developer.amazon.com/sdk/adm/sending-message.html) (“Enviar uma mensagem”) na documentação do ADM

## Enviar mensagens para um aplicativo em várias plataformas
<a name="mobile-push-send-multiplatform"></a>

Para enviar uma mensagem para um aplicativo instalado em dispositivos de várias plataformas, como o FCM e APNs, você deve primeiro inscrever os endpoints móveis em um tópico no Amazon SNS e depois publicar a mensagem no tópico.

O exemplo a seguir mostra uma mensagem para enviar aos endpoints móveis inscritos no FCM APNs e no ADM: 

```
{ 
  "default": "This is the default message which must be present when publishing a message to a topic. The default message will only be used if a message is not present for 
one of the notification platforms.",     
  "APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"www.amazon.com\"} }",
  "GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}",
  "ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" 
}
```

## Enviar mensagens APNs como alerta ou notificações em segundo plano
<a name="mobile-push-send-message-apns-background-notification"></a>

O Amazon SNS pode enviar mensagens para APNs as `alert` ou `background` notificações (para obter mais informações, consulte [Enviando atualizações em segundo plano para seu aplicativo na APNs documentação](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app)).
+ Uma `alert` APNs notificação informa o usuário exibindo uma mensagem de alerta, reproduzindo um som ou adicionando um selo ao ícone do seu aplicativo.
+ Uma `background` APNs notificação ativa ou instrui seu aplicativo a agir de acordo com o conteúdo da notificação, sem informar o usuário.

### Especificando valores de APNs cabeçalho personalizados
<a name="specify-custom-header-value"></a>

Recomendamos especificar valores personalizados para o [atributo de mensagem `AWS.SNS.MOBILE.APNS.PUSH_TYPE` reservada](sns-message-attributes.md#sns-attrib-mobile-reserved) usando a ação AWS SDKs da API do Amazon `Publish` SNS ou o. AWS CLI O exemplo da CLI a seguir define `content-available` como `1` e `apns-push-type` como `background` para o tópico especificado. 

```
aws sns publish \
--endpoint-url https://sns.us-east-1.amazonaws.com \
--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \
--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \
--message-attributes '{ \
  "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \
  "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"}, \
  "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"5"}}' \
--message-structure json
```

**nota**  
Certifique-se de que a estrutura JSON seja válida. Adicione uma vírgula após cada par chave-valor, exceto o último.

### Inferindo o cabeçalho do tipo APNs push a partir da carga
<a name="inferring-push-type-header-from-payload"></a>

Se você não definir o `apns-push-type` APNs cabeçalho, o Amazon SNS define o cabeçalho como `alert` ou `background` dependendo da `content-available` chave no `aps` dicionário da sua configuração de carga em formato JSON APNs .

**nota**  
O Amazon SNS é capaz de inferir somente os cabeçalhos `alert` ou `background`, embora o cabeçalho `apns-push-type` possa ser definido com outros valores.
+ `apns-push-type` é definido como `alert`
  + Se o dicionário `aps` contiver `content-available` definida como `1` e *uma ou mais chaves* que acionem interações do usuário.
  + Se o dicionário `aps` contiver `content-available` definida como `0` *ou* se a chave `content-available` estiver ausente.
  + Se o valor da chave `content-available` não for um inteiro ou um booliano.
+ `apns-push-type` é definido como `background`
  + Se o dicionário `aps` contiver *somente* `content-available` definida como `1` e *nenhuma outra chave* que acione interações com o usuário.
**Importante**  
Se o Amazon SNS enviar um objeto de configuração bruto APNs como uma notificação somente em segundo plano, você deverá incluir `content-available` set to no dicionário. `1` `aps` Embora você possa incluir chaves personalizadas, o dicionário `aps` não deve conter chaves que acionem interações do usuário (por exemplo, alertas, distintivos ou sons).

Veja a seguir um exemplo de objeto de configuração bruto.

```
{
  "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}"
}
```

Neste exemplo, o Amazon SNS define o `apns-push-type` APNs cabeçalho da mensagem como. `background` Quando o Amazon SNS detecta que o dicionário `apn` contém a chave `content-available` definida como `1` e não contém nenhuma outra chave que possa acionar interações do usuário, ele define o cabeçalho como `background`.

# Usar cargas úteis do Google Firebase Cloud Messaging v1 no Amazon SNS
<a name="sns-fcm-v1-payloads"></a>

O Amazon SNS oferece suporte ao uso da API HTTP v1 do FCM para enviar notificações para destinos Android, iOS e Webpush. Este tópico fornece exemplos da estrutura de carga útil ao publicar notificações push móveis usando a CLI ou a API do Amazon SNS.

Você pode incluir os seguintes tipos de mensagem em sua carga útil ao enviar uma notificação do FCM:
+ **Mensagem de dados**: uma mensagem de dados é gerenciada pelo seu aplicativo cliente e contém pares de valores-chave personalizados. Ao criar uma mensagem de dados, você deve incluir a chave `data` com um objeto JSON como valor e, em seguida, inserir seus pares de valores-chave personalizados.
+ **Mensagem de notificação** ou **mensagem de exibição**: uma mensagem de notificação contém um conjunto predefinido de chaves gerenciadas pelo SDK do FCM. Essas chaves variam de acordo com o tipo de dispositivo para o qual você está entregando. Para obter mais informações sobre chaves de notificação específicas da plataforma, consulte a seguir:
  + [Chaves de notificação do Android](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
  + [Chaves de notificação do APNS](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)
  + [Chaves de notificação Webpush](https://developer.mozilla.org/en-US/docs/Web/API/Notification)

Para obter mais informações sobre os tipos de mensagens do FCM, consulte [Tipos de mensagens](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages) na documentação do *Firebase* do Google.

## Usar a estrutura de carga útil do FCM v1 para enviar mensagens
<a name="sending-messages-using-v1-payload"></a>

Se você estiver criando um aplicativo FCM pela primeira vez ou quiser aproveitar os recursos do FCM v1, você pode optar por enviar uma carga útil no formato FCM v1. Para fazer isso, você deve incluir a chave `fcmV1Message` de nível superior. *Para obter mais informações sobre como criar cargas do FCM v1, consulte [Migrar do FCM legado APIs para HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) e [Personalizar uma mensagem](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing-a-message-across-platforms) em várias plataformas na documentação do Firebase do Google.*

**Exemplo de carga útil do FCM v1 enviada para o Amazon SNS:**

**nota**  
O valor da chave `GCM` usado no exemplo a seguir deve ser codificado como uma string ao publicar uma notificação usando o Amazon SNS. 

```
{
  "GCM": "{ 
    \"fcmV1Message\": { 
      \"validate_only\": false,
      \"message\": {
        \"notification\": {
          \"title\": \"string\",
          \"body\": \"string\"
        },
        \"data\": {
          \"dataGen\": \"priority message\"
        },
        \"android\": {
          \"priority\": \"high\",
          \"notification\": {
            \"body_loc_args\": [\"string\"],
            \"title_loc_args\": [\"string\"],
            \"sound\": \"string\",
            \"title_loc_key\": \"string\",
            \"title\": \"string\",
            \"body\": \"string\",
            \"click_action\": \"clicky_clacky\",
            \"body_loc_key\": \"string\"
          },
          \"data\": {
            \"dataAndroid\": \"priority message\"
          },
          \"ttl\": \"10023.32s\"
        },
        \"apns\": {
          \"payload\": {
            \"aps\": {
              \"alert\": {
                \"subtitle\": \"string\",
                \"title-loc-args\": [\"string\"],
                \"title-loc-key\": \"string\",
                \"loc-args\": [\"string\"],
                \"loc-key\": \"string\",
                \"title\": \"string\",
                \"body\": \"string\"
              },
              \"category\": \"Click\",
              \"content-available\": 0,
              \"sound\": \"string\",
              \"badge\": 5
            }
          }
        },
        \"webpush\": {
          \"notification\": {
            \"badge\": \"5\",
            \"title\": \"string\",
            \"body\": \"string\"
          },
          \"data\": {
            \"dataWeb\": \"priority message\"
          }
        }
      }
    }
  }"
}
```

Ao enviar uma carga útil JSON, não se esqueça de incluir o atributo `message-structure` em sua solicitação e configurá-lo como `json`.

**Exemplo na CLI:**

```
aws sns publish --topic $TOPIC_ARN --message '{"GCM": "{\"fcmV1Message\": {\"message\":{\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"android\":{\"priority\":\"high\",\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"data\":{\"customAndroidDataKey\":\"custom key value\"},\"ttl\":\"0s\"},\"apns\":{\"payload\":{\"aps\":{\"alert\":{\"title\":\"string\", \"body\":\"string\"},\"content-available\":1,\"badge\":5}}},\"webpush\":{\"notification\":{\"badge\":\"URL\",\"body\":\"Test\"},\"data\":{\"customWebpushDataKey\":\"priority message\"}},\"data\":{\"customGeneralDataKey\":\"priority message\"}}}}", "default": "{\"notification\": {\"title\": \"test\"}"}' --region $REGION --message-structure json
```

Para obter mais informações sobre o envio de cargas úteis no formato FCM v1, consulte o seguinte na documentação do *Firebase* do Google:
+ [Migre do FCM antigo APIs para o HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1)
+ [Sobre as mensagens do FCM](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing_a_message_across_platforms)
+ [Recurso REST: projects.messages](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)

## Usar a estrutura de carga útil legada para enviar mensagens para a API FCM v1
<a name="sns-fcm-v1-legacy-payload-structure"></a>

Ao migrar para o FCM v1, você não precisa alterar a estrutura de carga útil que estava usando para suas credenciais legadas. O Amazon SNS transforma sua carga na nova estrutura de carga útil do FCM v1 e envia para o Google.

Formato da carga útil da mensagem de entrada:

```
{
  "GCM": "{\"notification\": {\"title\": \"string\", \"body\": \"string\", \"android_channel_id\": \"string\", \"body_loc_args\": [\"string\"], \"body_loc_key\": \"string\", \"click_action\": \"string\", \"color\": \"string\", \"icon\": \"string\", \"sound\": \"string\", \"tag\": \"string\", \"title_loc_args\": [\"string\"], \"title_loc_key\": \"string\"}, \"data\": {\"message\": \"priority message\"}}"
}
```

Mensagem enviada ao Google:

```
{
  "message": {
    "token": "***",
    "notification": {
      "title": "string",
      "body": "string"
    },
    "android": {
      "priority": "high",
      "notification": {
        "body_loc_args": [
          "string"
        ],
        "title_loc_args": [
          "string"
        ],
        "color": "string",
        "sound": "string",
        "icon": "string",
        "tag": "string",
        "title_loc_key": "string",
        "title": "string",
        "body": "string",
        "click_action": "string",
        "channel_id": "string",
        "body_loc_key": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "title-loc-args": [
              "string"
            ],
            "title-loc-key": "string",
            "loc-args": [
              "string"
            ],
            "loc-key": "string",
            "title": "string",
            "body": "string"
          },
          "category": "string",
          "sound": "string"
        }
      }
    },
    "webpush": {
      "notification": {
        "icon": "string",
        "tag": "string",
        "body": "string",
        "title": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "data": {
      "message": "priority message"
    }
  }
}
```

**Riscos potenciais**
+ O mapeamento legado para v1 não é compatível com o Apple Push Notification Service (APNS) `headers` ou as chaves `fcm_options`. Se quiser usar esses campos, envie uma carga útil do FCM v1.
+ Em alguns casos, os cabeçalhos das mensagens são exigidos pelo FCM v1 para enviar notificações silenciosas aos seus dispositivos. APNs Se você estiver enviando notificações silenciosas para seus APNs dispositivos, elas não funcionarão com a abordagem antiga. Em vez disso, recomendamos usar a carga útil do FCM v1 para evitar problemas inesperados. Para encontrar uma lista de APNs cabeçalhos e para que eles são usados, consulte [Comunicação com APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) no Guia do *Desenvolvedor da Apple*.
+ Se você estiver usando o atributo `TTL` Amazon SNS ao enviar sua notificação, ela só será atualizada no campo `android`. Se você quiser definir o atributo `TTL` APNS, use a carga útil do FCM v1.
+ As chaves `android`, `apns` e `webpush` serão mapeadas e preenchidas com todas as chaves relevantes fornecidas. Por exemplo, se você fornecer o `title`, que é uma chave compartilhada entre as três plataformas, o mapeamento do FCM v1 preencherá as três plataformas com o título que você forneceu.
+ Algumas chaves compartilhadas entre plataformas esperam diferentes tipos de valor. Por exemplo, a chave `badge` passada para `apns` espera um valor inteiro, enquanto a chave `badge` passada para `webpush` espera um valor String. Nos casos em que você fornecer a chave `badge`, o mapeamento do FCM v1 preencherá somente a chave para a qual você forneceu um valor válido.

## Eventos de falha de entrega de FCM
<a name="sns-fcm-delivery-failure-events"></a>

A tabela a seguir fornece o tipo de falha do Amazon SNS que corresponde aos códigos de erro/status recebidos do Google para solicitações de notificação do FCM v1. 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 seu aplicativo](topics-attrib.md).


| Código FCM error/status  | Tipo de falha do Amazon SNS | Mensagem de falha | Causa e mitigação | 
| --- | --- | --- | --- | 
|  `UNREGISTERED`  |  `InvalidPlatformToken`  |  O token da plataforma associado ao endpoint não é válido.  |  O token do dispositivo anexado ao seu endpoint está obsoleto ou é inválido. O Amazon SNS desativou seu endpoint. Atualize o endpoint do Amazon SNS para o token de dispositivo mais novo.  | 
|  `INVALID_ARGUMENT`  |  `InvalidNotification`  |  O corpo da notificação é inválido.  |  O token do dispositivo ou a carga útil da mensagem podem ser inválidos. Verifique se a carga útil da mensagem é válida. Se a carga útil da mensagem for válida, atualize o endpoint do Amazon SNS para o token de dispositivo mais novo.  | 
|  `SENDER_ID_MISMATCH`  |  `InvalidPlatformToken`  |  O token da plataforma associado ao endpoint não é válido.  |  O aplicativo da plataforma associado ao token do dispositivo não tem permissão para enviar para o token do dispositivo. Confira se está usando as credenciais do FCM corretas no aplicativo da plataforma do Amazon SNS.  | 
|  `UNAVAILABLE`  |  `DependencyUnavailable`  |  A dependência não está disponível.  |  O FCM não pôde processar a solicitação a tempo. Todas as novas tentativas executadas pelo Amazon SNS falharam. Você pode armazenar essas mensagens em uma fila de mensagens não entregues (DLQ) e redirecioná-las posteriormente.  | 
|  `INTERNAL`  |  `UnexpectedFailure`  |  Falha inesperada; entre em contato com a Amazon. Frase de falha [Erro interno].  |  O servidor FCM encontrou um erro ao tentar processar sua solicitação. Todas as novas tentativas executadas pelo Amazon SNS falharam. Você pode armazenar essas mensagens em uma fila de mensagens não entregues (DLQ) e redirecioná-las posteriormente.  | 
|  `THIRD_PARTY_AUTH_ERROR`  |  `InvalidCredentials`  |  As credenciais do aplicativo da plataforma não são válidas.  |  Uma mensagem direcionada a um dispositivo iOS ou a um dispositivo Webpush não pôde ser enviada. Verifique se suas credenciais de desenvolvimento e produção são válidas.  | 
|  `QUOTA_EXCEEDED`  |  `Throttled`  |  Solicitação limitada por [gcm].  |  Uma cota de taxa de mensagem, cota de taxa de mensagem de dispositivo ou cota de taxa de mensagem de tópico foi excedida. Para obter informações sobre como resolver esse problema, consulte [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)a documentação do *Firebase* do Google.  | 
|  `PERMISSION_DENIED`  |  `InvalidNotification`  |  O corpo da notificação é inválido.  |  No caso de uma exceção `PERMISSION_DENIED`, o chamador (sua aplicação FCM) não tem permissão para executar a operação especificada na carga útil. Navegue até o console do FCM e verifique se suas credenciais têm as ações de API necessárias ativadas.  | 

# Atributos de aplicativo móvel do Amazon SNS
<a name="sns-msg-status"></a>

O Amazon Simple Notification Service (Amazon SNS) oferece suporte para o registro em log do status de entrega das mensagens de notificação por push. Depois de configurar os atributos do aplicativo, as entradas de registro serão enviadas ao CloudWatch Logs para mensagens enviadas do Amazon SNS para endpoints móveis. O registro de status de entrega de mensagens proporciona um melhor insight operacional, por exemplo: 
+ Saiba se uma mensagem de notificação por push foi entregue do Amazon SNS para o serviço de notificações por push.
+ Identifique a resposta enviada do serviço de notificações por push para o Amazon SNS.
+ Determinar o tempo de permanência da mensagem (o tempo entre o carimbo de data e hora da publicação e antes do envio para um serviço de notificações por push).

 Para configurar os atributos do aplicativo para o status de entrega de mensagens, você pode usar os Console de gerenciamento da AWS kits de desenvolvimento de AWS software (SDKs) ou a API de consulta. 

## Configurando atributos de status de entrega de mensagens usando o Console de gerenciamento da AWS
<a name="sns-msg-console"></a>

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

1. No painel de navegação, aponte para **Mobile** (Dispositivos móveis), em seguida escolha **Push notifications** (Notificações por push).

1. Na seção **Aplicativos da plataforma**, escolha o aplicativo que contém os endpoints para os quais você deseja receber CloudWatch registros.

1. Escolha **Application Actions (Ações do aplicativo)** e, em seguida, selecione **Delivery status (Status de entrega)**.

1. Na caixa de diálogo **Delivery Status (Status da entrega)**, escolha **Create IAM Roles (Criar funções do IAM)**.

   Você será redirecionado para o console do IAM.

1. Escolha **Permitir** para dar ao Amazon SNS acesso de gravação para usar CloudWatch os registros em seu nome.

1. Agora, de volta à caixa de diálogo **Status de entrega**, insira um número no campo **Porcentagem de sucesso na amostra (0-100)** para a porcentagem de mensagens bem-sucedidas enviadas para as quais você deseja receber CloudWatch registros.
**nota**  
Depois de configurar os atributos do aplicativo para o status de entrega de mensagens, todas as entregas de mensagens com falha geram CloudWatch registros.

1. Finalmente, escolha **Save Configuration (Salvar configuração)**. Agora você poderá visualizar e analisar os CloudWatch registros que contêm o status de entrega da mensagem. Para obter mais informações sobre o uso CloudWatch, consulte a [CloudWatchdocumentação](https://aws.amazon.com/documentation/cloudwatch).

## Exemplos de registros de status CloudWatch de entrega de mensagens do Amazon SNS
<a name="sns-msg-examples"></a>

Depois de configurar os atributos de status de entrega de mensagens para um endpoint do aplicativo, CloudWatch os registros serão gerados. Exemplos de logs, no formato JSON, são exibidos da seguinte forma:

**SUCCESS**

```
{
  "status": "SUCCESS",
  "notification": {
    "timestamp": "2015-01-26 23:07:39.54",
    "messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a"
  },
  "delivery": {
    "statusCode": 200,
    "dwellTimeMs": 65,
    "token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw",
    "attempts": 1,
    "providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd\"}]}",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/c23e42de-3699-3639-84dd-65f84474629d"
  }
}
```

**FAILURE**

```
{
  "status": "FAILURE",
  "notification": {
    "timestamp": "2015-01-26 23:29:35.678",
    "messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f"
  },
  "delivery": {
    "statusCode": 8,
    "dwellTimeMs": 1451,
    "token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73",
    "attempts": 1,
    "providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1, cause=null)",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944"
  }
}
```

Para obter uma lista de códigos de resposta do serviço de notificação por push, consulte [Códigos de resposta da plataforma](#platform-returncodes).

## Configurando atributos de status de entrega de mensagens com o AWS SDKs
<a name="sns-msg-sdk"></a>

Eles [AWS SDKs](https://aws.amazon.com/tools/)fornecem APIs em vários idiomas o uso de atributos de status de entrega de mensagens com o Amazon SNS. 

O seguinte exemplo Java mostra como usar a API `SetPlatformApplicationAttributes` para configurar atributos de aplicativo para status de entrega de mensagens para as mensagens de notificação por push. Você pode usar os seguintes atributos para o status de entrega de mensagens: `SuccessFeedbackRoleArn`, `FailureFeedbackRoleArn` e `SuccessFeedbackSampleRate`. Os `FailureFeedbackRoleArn` atributos `SuccessFeedbackRoleArn` e são usados para dar ao Amazon SNS acesso de gravação para usar CloudWatch Logs em seu nome. O atributo `SuccessFeedbackSampleRate` é para especificar a porcentagem de taxa de amostra (0-100) de mensagens bem-sucedidas. Depois de configurar o `FailureFeedbackRoleArn` atributo, todas as entregas de mensagens com falha geram CloudWatch registros. 

```
SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new SetPlatformApplicationAttributesRequest();
Map<String, String> attributes = new HashMap<>();
attributes.put("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("SuccessFeedbackSampleRate", "5");
setPlatformApplicationAttributesRequest.withAttributes(attributes);
setPlatformApplicationAttributesRequest.setPlatformApplicationArn("arn:aws:sns:us-west-2:111122223333:app/FCM/FCMPushApp");
sns.setPlatformApplicationAttributes(setPlatformApplicationAttributesRequest);
```

Para obter mais informações sobre o SDK para Java, consulte [Conceitos básicos do AWS SDK para Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html).

## Códigos de resposta da plataforma
<a name="platform-returncodes"></a>

A seguir, uma lista de links para os códigos de resposta do serviço de notificação por push:


****  

| Serviço de notificação por push | Códigos de resposta | 
| --- | --- | 
| Amazon Device Messaging (ADM) | Consulte [Response Format](https://developer.amazon.com/docs/adm/send-message.html#response-format) (“Formato de resposta”) na documentação do ADM. | 
| Serviço de notificação push da Apple (APNs) | Consulte a resposta HTTP/2 de APNs em [Comunicação com APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1) no Guia de programação de notificações locais e remotas. | 
| Firebase Cloud Messaging (FCM) | Consulte [Códigos de respostas de erros de mensagens downstream](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) na documentação do Firebase Cloud Messaging. | 
| Microsoft Push Notification Service for Windows Phone (MPNS) | Consulte [Códigos de resposta do Serviço de notificação por push para Windows Phone 8](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes) na documentação de desenvolvimento do Windows 8. | 
| Windows Push Notification Services (WNS) | Consulte "Códigos de resposta" em [Solicitação e cabeçalhos de resposta do Serviço de notificação por push (Aplicativos de tempo de execução do Windows)](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx) na documentação de desenvolvimento do Windows 8. | 

# Notificações de eventos do aplicativo Amazon SNS para aplicativos móveis
<a name="application-event-notifications"></a>

O Amazon SNS fornece suporte para acionar as notificações quando determinados eventos da aplicação ocorrem. Em seguida, você pode executar algumas ações programáticas nesse evento. Seu aplicativo deve incluir suporte para um serviço de notificação push, como Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM) e Windows Push Notification Services (WNS). Você define notificações de eventos do aplicativo usando o console do Amazon SNS ou o. AWS CLI AWS SDKs

## Eventos do aplicativo disponíveis
<a name="application-event-notifications-events"></a>

As notificações de eventos do aplicativo rastreiam quando endpoints de plataforma individuais são criados, excluídos e atualizados, bem como as falhas de entrega. A seguir estão os nomes de atributo para os eventos do aplicativo.


| Nome do atributo | Trigger para a notificação | 
| --- | --- | 
| EventEndpointCreated | Um novo endpoint de plataforma é adicionado ao seu aplicativo. | 
| EventEndpointDeleted | Qualquer endpoint de plataforma associado ao seu aplicativo é excluído. | 
| EventEndpointUpdated | Qualquer um dos atributos dos endpoints de plataforma associados ao seu aplicativo é alterado. | 
| EventDeliveryFailure | Uma entrega para qualquer um dos endpoints de plataforma associados ao seu aplicativo encontra uma falha permanente.  Para rastrear falhas de entrega no aplicativo da plataforma, inscreva-se em eventos de status de entrega de mensagens para o aplicativo. Para obter mais informações, consulte [Usar atributos de aplicativo do Amazon SNS para obter o status de entrega de mensagens](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html).  | 

Você pode associar qualquer atributo a um aplicativo que poderá então receber essas notificações de eventos. 

## Enviar notificações por push para dispositivos móveis
<a name="application-event-notifications-howto-set"></a>

Para enviar notificações de eventos do aplicativo, você especifica um tópico para receber notificações de cada tipo de evento. Como o Amazon SNS envia notificações, o tópico pode direcioná-las para endpoints que executarão ações programáticas.

**Importante**  
Aplicativos de grande volume criarão um grande número de notificações de eventos do aplicativo (por exemplo, dezenas de milhares), que sobrecarregarão os endpoints destinados ao uso humano, como endereços de e-mail, números de telefone e aplicativos móveis. Considere as seguintes diretrizes ao enviar as notificações de eventos do aplicativo para um tópico:  
Cada tópico que recebe notificações deve conter somente assinaturas de endpoints programáticos, como endpoints HTTP ou HTTPS, filas ou funções do Amazon SQS. AWS Lambda 
Para reduzir a quantidade de processamento que é acionada pelas notificações, limite as inscrições de cada tópico em um pequeno número (por exemplo, cinco ou menos).

Você pode enviar notificações de eventos do aplicativo usando o console do Amazon SNS, o AWS Command Line Interface (AWS CLI) ou o. AWS SDKs 

### Console de gerenciamento da AWS
<a name="application-event-notifications-howto-set-console"></a>

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

1. No painel de navegação, escolha **Mobile (Dispositivos móveis)**, **Push notifications (Notificações por push)**.

1. Na página **Notificações por push para dispositivos móveis**, na seção **Aplicativos de plataforma**, selecione um aplicativo e escolha **Editar**.

1. Expanda a seção **Notificações de eventos**.

1. Escolha **Ações**, **Configurar eventos**.

1. Insira ARNs os quatro tópicos a serem usados nos seguintes eventos:
   + Endpoint criado
   + Endpoint excluído
   + Endpoint atualizado
   + Falha na entrega

1. Escolha **Salvar alterações**.

### AWS CLI
<a name="awscli"></a>

Execute o comando [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html).

O exemplo a seguir define o mesmo tópico do Amazon SNS para todos os quatro eventos da aplicação:

```
aws sns set-platform-application-attributes
--platform-application-arn arn:aws:sns:us-east-1:12345EXAMPLE:app/FCM/MyFCMPlatformApplication
--attributes EventEndpointCreated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointDeleted="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointUpdated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventDeliveryFailure="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents"
```

### AWS SDKs
<a name="application-event-notifications-sdk"></a>

Defina notificações de eventos do aplicativo enviando uma `SetPlatformApplicationAttributes` solicitação com a API do Amazon SNS usando AWS um SDK.

Para obter uma lista completa dos guias do desenvolvedor do AWS SDK e exemplos de código, incluindo ajuda para começar e informações sobre versões anteriores, consulte[Usando o Amazon SNS com um SDK AWS](sdk-general-information-section.md).

# Ações da API de push para dispositivos móveis
<a name="mobile-push-api"></a>

Para usar as APIs de push para dispositivos móveis do Amazon SNS, primeiro é necessário atender aos pré-requisitos do serviço de notificações por push, como o Apple Push Notification Service (APNs) e o Firebase Cloud Messaging (FCM). Para obter mais informações sobre os pré-requisitos, consulte [Pré-requisitos para notificações ao usuário do Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md). 

 Para enviar uma mensagem de notificação por push para um dispositivo um aplicativo móvel usando as APIs, você deve primeiro usar a ação `CreatePlatformApplication`, que retorna um atributo `PlatformApplicationArn`. O atributo `PlatformApplicationArn` é, então, usado por `CreatePlatformEndpoint`, que retorna um atributo `EndpointArn`. Em seguida, você pode usar o atributo `EndpointArn` com a ação `Publish` para enviar uma mensagem de notificação para um dispositivo e aplicativo móvel, ou você pode usar o atributo `EndpointArn` com a ação `Subscribe` de inscrição em um tópico. 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).

As APIs de push para dispositivos móveis do Amazon SNS são as seguintes: 

`[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`  
Cria um objeto de aplicação da plataforma para um dos serviços de notificações por push compatíveis, como o APNs e o FCM, nos quais os dispositivos e as aplicações móveis podem se registrar. Retorna um atributo `PlatformApplicationArn`, que é usado pela ação `CreatePlatformEndpoint`.

`[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`  
Cria um endpoint para um dispositivo e aplicativo móvel em um dos serviços de notificação por push compatíveis. O `CreatePlatformEndpoint` usa o atributo `PlatformApplicationArn` retornado da ação `CreatePlatformApplication`. O atributo `EndpointArn`, que é retornado ao usar `CreatePlatformEndpoint`, é, então, usado com a ação `Publish` para enviar uma mensagem de notificação para um dispositivo e aplicativo móvel. 

`[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`  
Cria um tópico no qual as mensagens podem ser publicadas. 

`[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`  
Exclui o endpoint para um dispositivo e aplicativo móvel em um dos serviços de notificações por push compatíveis.

`[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`  
Exclui um objeto de aplicativo de plataforma.

`[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`  
Exclui um tópico e todas as suas inscrições.

`[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`  
Recupera os atributos do endpoint para um dispositivo e aplicativo móvel.

`[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`  
Recupera os atributos da plataforma de objeto de aplicativo.

`[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`  
Lista os endpoints e atributos de endpoint para dispositivos e aplicativos móveis em um serviço de notificações por push compatível.

`[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`  
Lista os objetos do aplicativo da plataforma para os serviços de notificações por push compatíveis.

`[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`  
Envia uma mensagem de notificação para todos os endpoints inscritos em um tópico.

`[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`  
Define os atributos para um endpoint para um dispositivo e aplicativo móvel.

`[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`  
Define os atributos do objeto de aplicativo de plataforma.

`[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`  
Prepara para assinar um endpoint enviando ao endpoint uma mensagem de confirmação. Para criar de fato uma inscrição, o proprietário do endpoint deve chamar a ação ConfirmSubscription com o token da mensagem de confirmação. 

`[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`  
Exclui a inscrição.

# Erros comuns da API push móvel do Amazon SNS
<a name="mobile-push-api-error"></a>

Os erros retornados pelas APIs do Amazon SNS para push para dispositivos móveis são listados na tabela a seguir. Para obter mais informações sobre as APIs do Amazon SNS para push para dispositivos móveis, consulte [Ações da API de push para dispositivos móveis](mobile-push-api.md).


| Erro | Descrição | Código de status HTTPS | Ação API | 
| --- | --- | --- | --- | 
| Nome do aplicativo é uma string nula | O nome do aplicativo necessário está definido como nulo. | 400 | `CreatePlatformApplication` | 
| Nome da plataforma é uma string nula | O nome da plataforma necessária está definido como nulo. | 400 | `CreatePlatformApplication` | 
| Nome da plataforma é inválido | Um valor inválido ou fora do intervalo foi fornecido para o nome da plataforma. | 400 | `CreatePlatformApplication` | 
| APNs: o principal não é um certificado válido | Um certificado inválido foi fornecido para o principal do APNs, que é o certificado SSL. Para obter mais informações, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) na Referência de API do Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs: o principal é um certificado válido, mas não está no formato .pem | Um certificado válido que não está no formato .pem foi fornecido para o principal do APNs, que é o certificado SSL. | 400 | `CreatePlatformApplication` | 
| APNs: o principal é um certificado expirado | Um certificado expirado foi fornecido para o principal do APNs, que é o certificado SSL. | 400 | `CreatePlatformApplication` | 
| APNs: o principal não é um certificado emitido pela Apple | Um certificado não emitido pela Apple foi fornecido para o principal do APN, que é o certificado SSL. | 400 | `CreatePlatformApplication` | 
| APNs: o principal não foi fornecido | O principal do APNs, que é o certificado SSL, não foi fornecido. | 400 | `CreatePlatformApplication` | 
| APNs: a credencial não foi fornecida | As credenciais do APNS, que é a chave privada, não foram fornecidas. Para obter mais informações, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) na Referência de API do Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| APNs: a credencial não está em um formato .pem válido | As credenciais do APNs, que são a chave privada, não estão em um formato .pem válido. | 400 | `CreatePlatformApplication` | 
| FCM: serverAPIKey não foi fornecida | As credenciais do FCM, que são a chave de API, não foram fornecidas. Para obter mais informações, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) na Referência de API do Amazon Simple Notification Service. | 400 | `CreatePlatformApplication` | 
| FCM: a serverAPIKey está vazia | As credenciais do FCM, que são a chave de API, estão vazias. | 400 | `CreatePlatformApplication` | 
| FCM: a serverAPIKey é uma string nula | As credenciais do FCM, que são a chave de API, são nulas. | 400 | `CreatePlatformApplication` | 
| FCM: a serverAPIKey é inválida | As credenciais do FCM, que são a chave de API, são inválidas. | 400 | `CreatePlatformApplication` | 
| ADM: clientsecret não foi fornecido | O segredo do cliente necessário não foi fornecido. | 400 | `CreatePlatformApplication` | 
| ADM: clientsecret é uma string nula | A string necessária para o segredo do cliente é nula. | 400 | `CreatePlatformApplication` | 
| ADM: client\$1secret é uma string vazia | A string necessária para o segredo do cliente está vazia. | 400 | `CreatePlatformApplication` | 
| ADM: client\$1secret não é válido | A string necessária para o segredo do cliente não é válida. | 400 | `CreatePlatformApplication` | 
| ADM: client\$1id é uma string vazia | A string necessária para o ID do cliente está vazia. | 400 | `CreatePlatformApplication` | 
| ADM: clientId não foi fornecido | A string necessária para o ID do cliente não foi fornecida. | 400 | `CreatePlatformApplication` | 
| ADM: clientid é uma string nula | A string necessária para o ID do cliente é nula. | 400 | `CreatePlatformApplication` | 
| ADM: client\$1id não é válido | A string necessária para o ID do cliente não é válida. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated tem um formato ARN inválido | EventEndpointCreated tem um formato ARN inválido. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted tem um formato ARN inválido | EventEndpointDeleted tem um formato ARN inválido. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated tem um formato ARN inválido | EventEndpointUpdated tem um formato ARN inválido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure tem um formato ARN inválido | EventDeliveryAttemptFailure tem um formato ARN inválido. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure tem um formato ARN inválido | EventDeliveryFailure tem um formato ARN inválido. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated não é um tópico existente | EventEndpointCreated não é um tópico existente. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted não é um tópico existente | EventEndpointDeleted não é um tópico existente. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated não é um tópico existente | EventEndpointUpdated não é um tópico existente. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure não é um tópico existente | EventDeliveryAttemptFailure não é um tópico existente. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure não é um tópico existente | EventDeliveryFailure não é um tópico existente. | 400 | `CreatePlatformApplication` | 
| O ARN da plataforma é inválido | O ARN da plataforma é inválido. | 400 | `SetPlatformAttributes` | 
| O ARN da plataforma é válido, mas não pertence ao usuário | O ARN da plataforma é válido, mas não pertence ao usuário. | 400 | `SetPlatformAttributes` | 
| APNs: o principal não é um certificado válido | Um certificado inválido foi fornecido para o principal do APNs, que é o certificado SSL. Para obter mais informações, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) na Referência de API do Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs: o principal é um certificado válido, mas não está no formato .pem | Um certificado válido que não está no formato .pem foi fornecido para o principal do APNs, que é o certificado SSL. | 400 | `SetPlatformAttributes` | 
| APNs: o principal é um certificado expirado | Um certificado expirado foi fornecido para o principal do APNs, que é o certificado SSL. | 400 | `SetPlatformAttributes` | 
| APNs: o principal não é um certificado emitido pela Apple | Um certificado não emitido pela Apple foi fornecido para o principal do APN, que é o certificado SSL. | 400 | `SetPlatformAttributes` | 
| APNs: o principal não foi fornecido | O principal do APNs, que é o certificado SSL, não foi fornecido. | 400 | `SetPlatformAttributes` | 
| APNs: a credencial não foi fornecida | As credenciais do APNS, que é a chave privada, não foram fornecidas. Para obter mais informações, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) na Referência de API do Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| APNs: a credencial não está em um formato .pem válido | As credenciais do APNs, que são a chave privada, não estão em um formato .pem válido. | 400 | `SetPlatformAttributes` | 
| FCM: serverAPIKey não foi fornecida | As credenciais do FCM, que são a chave de API, não foram fornecidas. Para obter mais informações, consulte [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html) na Referência de API do Amazon Simple Notification Service. | 400 | `SetPlatformAttributes` | 
| FCM: a serverAPIKey é uma string nula | As credenciais do FCM, que são a chave de API, são nulas. | 400 | `SetPlatformAttributes` | 
| ADM: clientId não foi fornecido | A string necessária para o ID do cliente não foi fornecida. | 400 | `SetPlatformAttributes` | 
| ADM: clientid é uma string nula | A string necessária para o ID do cliente é nula. | 400 | `SetPlatformAttributes` | 
| ADM: clientsecret não foi fornecido | O segredo do cliente necessário não foi fornecido. | 400 | `SetPlatformAttributes` | 
| ADM: clientsecret é uma string nula | A string necessária para o segredo do cliente é nula. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated tem um formato ARN inválido | EventEndpointUpdated tem um formato ARN inválido. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted tem um formato ARN inválido | EventEndpointDeleted tem um formato ARN inválido. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated tem um formato ARN inválido | EventEndpointUpdated tem um formato ARN inválido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure tem um formato ARN inválido | EventDeliveryAttemptFailure tem um formato ARN inválido. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure tem um formato ARN inválido | EventDeliveryFailure tem um formato ARN inválido. | 400 | `SetPlatformAttributes` | 
| EventEndpointCreated não é um tópico existente | EventEndpointCreated não é um tópico existente. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted não é um tópico existente | EventEndpointDeleted não é um tópico existente. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated não é um tópico existente | EventEndpointUpdated não é um tópico existente. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure não é um tópico existente | EventDeliveryAttemptFailure não é um tópico existente. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure não é um tópico existente | EventDeliveryFailure não é um tópico existente. | 400 | `SetPlatformAttributes` | 
| O ARN da plataforma é inválido | O ARN da plataforma é inválido. | 400 | `GetPlatformApplicationAttributes` | 
| O ARN da plataforma é válido, mas não pertence ao usuário | O ARN da plataforma é válido, mas não pertence ao usuário. | 403 | `GetPlatformApplicationAttributes` | 
| O token especificado é inválido | O token especificado é inválido. | 400 | `ListPlatformApplications` | 
| O ARN da plataforma é inválido | O ARN da plataforma é inválido. | 400 | `ListEndpointsByPlatformApplication` | 
| O ARN da plataforma é válido, mas não pertence ao usuário | O ARN da plataforma é válido, mas não pertence ao usuário. | 404 | `ListEndpointsByPlatformApplication` | 
| O token especificado é inválido | O token especificado é inválido. | 400 | `ListEndpointsByPlatformApplication` | 
| O ARN da plataforma é inválido | O ARN da plataforma é inválido. | 400 | `DeletePlatformApplication` | 
| O ARN da plataforma é válido, mas não pertence ao usuário | O ARN da plataforma é válido, mas não pertence ao usuário. | 403 | `DeletePlatformApplication` | 
| O ARN da plataforma é inválido | O ARN da plataforma é inválido. | 400 | `CreatePlatformEndpoint` | 
| O ARN da plataforma é válido, mas não pertence ao usuário | O ARN da plataforma é válido, mas não pertence ao usuário. | 404 | `CreatePlatformEndpoint` | 
| O token não foi especificado | O token não foi especificado. | 400 | `CreatePlatformEndpoint` | 
| O token não é do tamanho certo | O token não tem o tamanho certo. | 400 | `CreatePlatformEndpoint` | 
| Os dados do usuário do cliente são muito grandes | Os dados do usuário do cliente não podem ter mais de 2048 bytes em codificação UTF-8. | 400 | `CreatePlatformEndpoint` | 
| O ARN do endpoint é inválido | O ARN do endpoint é inválido. | 400 | `DeleteEndpoint` | 
| O ARN do endpoint é válido, mas não pertence ao usuário | O ARN do endpoint é válido, mas não pertence ao usuário. | 403 | `DeleteEndpoint` | 
| O ARN do endpoint é inválido | O ARN do endpoint é inválido. | 400 | `SetEndpointAttributes` | 
| O ARN do endpoint é válido, mas não pertence ao usuário | O ARN do endpoint é válido, mas não pertence ao usuário. | 403 | `SetEndpointAttributes` | 
| O token não foi especificado | O token não foi especificado. | 400 | `SetEndpointAttributes` | 
| O token não é do tamanho certo | O token não tem o tamanho certo. | 400 | `SetEndpointAttributes` | 
| Os dados do usuário do cliente são muito grandes | Os dados do usuário do cliente não podem ter mais de 2048 bytes em codificação UTF-8. | 400 | `SetEndpointAttributes` | 
| O ARN do endpoint é inválido | O ARN do endpoint é inválido. | 400 | `GetEndpointAttributes` | 
| O ARN do endpoint é válido, mas não pertence ao usuário | O ARN do endpoint é válido, mas não pertence ao usuário. | 403 | `GetEndpointAttributes` | 
| O ARN de destino é inválido | O ARN de destino é inválido. | 400 | `Publish` | 
| O ARN de destino é válido, mas não pertence ao usuário | O ARN de destino é válido, mas não pertence ao usuário. | 403 | `Publish` | 
| O formato da mensagem é inválido | O formato da mensagem é inválido. | 400 | `Publish` | 
| O tamanho da mensagem é maior do que o comportado pelo protocolo/serviço final | O tamanho da mensagem é maior do que o comportado pelo protocolo/serviço final. | 400 | `Publish` | 

# Usar atributo de mensagem Time to Live do Amazon SNS para notificações por push para dispositivos móveis
<a name="sns-ttl"></a>

O Amazon Simple Notification Service (Amazon SNS) oferece suporte para configurar um atributo de mensagem *Time to Live (TTL)* para mensagens de notificação por push para dispositivos móveis. Isso é uma adição ao recurso atual de configuração do TTL dentro do corpo da mensagem do Amazon SNS para os serviços de notificação por push para dispositivos móveis que oferecem suporte a isso, como o Amazon Device Messaging (ADM) e o Firebase Cloud Messaging (FCM) quando enviar para Android.

O atributo de mensagem do TTL é usado para especificar os metadados de expiração sobre uma mensagem. Isso permite que você especifique quanto tempo o serviço de notificação push, como o Apple Push Notification Service (APNs) ou o FCM, tem para entregar a mensagem ao endpoint. Se por algum motivo (por exemplo, se o dispositivo móvel foi desativado) a mensagem não for entregue no material do TTL especificado, ela será descartada e não serão feitas mais tentativas de entrega. Para especificar o TTL nos atributos da mensagem, você pode usar os Console de gerenciamento da AWS kits de desenvolvimento de AWS software (SDKs) ou a API de consulta. 

## Atributos da mensagem do TTL para serviços de notificação por push
<a name="sns-ttl-msg-attrib"></a>

Veja a seguir uma lista dos atributos de mensagem TTL para serviços de notificação push que você pode usar para definir ao usar a API AWS SDKs ou query:


****  

| Serviço de notificação por push | Atributo de mensagem do TTL | 
| --- | --- | 
| Amazon Device Messaging (ADM) | AWS.SNS.MOBILE.ADM.TTL | 
| Serviço de notificação push da Apple (APNs) | AWS.SNS.MOBILE.APNS.TTL | 
| Sandbox do serviço de notificação push da Apple (APNs\$1SANDBOX) | AWS.SNS.MOBILE.APNS\$1SANDBOX.TTL | 
| Baidu Cloud Push (Baidu) | AWS.SNS.MOBILE.BAIDU.TTL | 
| Firebase Cloud Messaging (FCM ao enviar para o Android) | AWS.SNS.MOBILE.FCM.TTL | 
| Windows Push Notification Services (WNS) | AWS.SNS.MOBILE.WNS.TTL | 

Cada um dos serviços de notificação por push processa o TTL de maneira diferente. Com o Amazon SNS você tem uma visão abstrata do TTL em todos os serviços de notificação por push, o que facilita especificar o TTL. Ao usar o Console de gerenciamento da AWS para especificar o TTL (em segundos), você só precisa inserir o valor do TTL uma vez e o Amazon SNS calculará o TTL para cada um dos serviços de notificação push selecionados ao publicar a mensagem. 

 O TTL é relativo ao momento da publicação. Antes de enviar uma mensagem de notificação por push para um serviço de notificações por push específico, o Amazon SNS calcula o tempo de permanência (o tempo entre o carimbo de data e hora da publicação e antes do envio para um serviço de notificações por push) para as notificações por push e passa o TTL restante para o serviço de notificações por push específico. Se o TTL for menor do que o tempo de permanência, o Amazon SNS não tentará publicar. 

Se você especificar um TTL para uma mensagem de notificação por push, o valor do TTL deverá ser um número inteiro positivo, a menos que o valor de `0` tenha um significado específico para o serviço de notificação por push, como com APNs e FCM (ao enviar para Android). Se o valor do TTL for definido como `0` e o serviço de notificação por push não tiver um significado específico para `0`, o Amazon SNS descartará a mensagem. Para obter mais informações sobre o parâmetro TTL definido como `0` quando usado APNs, consulte a *Tabela A-3 Identificadores de itens para notificações remotas* na documentação da API [Binary Provider](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html).

## Ordem de precedência para determinar o TTL
<a name="sns-ttl-precedence"></a>

A precedência que o Amazon SNS usa para determinar o TTL para uma mensagem de notificação por push é baseada na seguinte ordem, em que o número mais baixo tem prioridade mais alta: 

1. TTL do atributo de mensagem

1. TTL do corpo da mensagem

1. TTL do serviço de notificação por push padrão (varia por serviço)

1. TTL padrão do Amazon SNS (4 semanas)

Se você definir valores diferentes de TTL (um em atributos de mensagem e outro no corpo da mensagem) para a mesma mensagem, o Amazon SNS modificará o TTL no corpo da mensagem de acordo com o TTL especificado no atributo de mensagem.

## Especificando TTL usando o Console de gerenciamento da AWS
<a name="sns-ttl-console"></a>

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

1. No painel de navegação, escolha **Mobile (Dispositivos móveis)**, **Push notifications (Notificações por push)**.

1. Na página **Mobile push notifications (Notificações por push para dispositivos móveis)**, na seção **Platform applications (Aplicativos de plataforma)**, selecione um aplicativo.

1. Na ***MyApplication*** página, na seção **Endpoints**, escolha um endpoint do aplicativo e escolha **Publicar** mensagem.

1. Na seção **Message details Detalhes da mensagem)**, insira o TTL (o número de segundos que o serviço de notificação por push tem para entregar a mensagem ao endpoint).

1. Selecione **Publish message (Publicar mensagem)**.

# Regiões suportadas pelo aplicativo móvel Amazon SNS
<a name="sns-mobile-push-supported-regions"></a>

No momento, as aplicações móveis podem ser criadas apenas nas seguintes regiões:
+ Leste dos EUA (Ohio)
+ Leste dos EUA (Norte da Virgínia)
+ Oeste dos EUA (N. da Califórnia)
+ Oeste dos EUA (Oregon)
+ África (Cidade do Cabo)
+ Ásia-Pacífico (Hong Kong)
+ Ásia-Pacífico (Jacarta)
+ Ásia-Pacífico (Mumbai)
+ Ásia-Pacífico (Osaka)
+ Ásia-Pacífico (Seul)
+ Ásia-Pacífico (Singapura)
+ Ásia-Pacífico (Sydney)
+ Ásia-Pacífico (Tóquio)
+ Canadá (Central)
+ Europa (Frankfurt)
+ Europa (Irlanda)
+ Europa (Londres)
+ Europa (Milão)
+ Europa (Espanha)
+ Europa (Paris)
+ Europa (Estocolmo)
+ Oriente Médio (Bahrein)
+ Oriente Médio (Emirados Árabes Unidos)
+ América do Sul (São Paulo)
+ AWS GovCloud (Oeste dos EUA)

# Práticas recomendadas para gerenciar notificações por push para dispositivos móveis do Amazon SNS
<a name="mobile-push-notifications-best-practices"></a>

Esta seção descreve práticas recomendadas que podem ajudar você a melhorar seu envolvimento com os clientes.

## Gerenciamento de endpoints
<a name="channels-sms-best-practices-endpoint-management"></a>

Problemas de entrega podem ocorrer em situações em que os tokens de dispositivo mudam devido à ação de um usuário no dispositivo (por exemplo, um aplicativo é reinstalado no dispositivo) ou a [atualizações de certificado](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) que afetam os dispositivos que utilizam determinada versão do iOS. É uma prática recomendada pela Apple [registrar-se](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#:~:text=Registering%20to%20Receive%20Remote%20Notifications) APNs sempre que seu aplicativo for iniciado.

Como o token do dispositivo não muda sempre que um aplicativo é aberto por um usuário, é possível usar a API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) idempotente. No entanto, isso pode introduzir duplicações do mesmo dispositivo nos casos em que o token em si é inválido, ou se o endpoint for válido, mas desabilitado (por exemplo, uma incompatibilidade entre ambientes de produção e sandbox).

Um mecanismo de gerenciamento de tokens de dispositivo, como o contido no [pseudocódigo](mobile-platform-endpoint.md#mobile-platform-endpoint-pseudo-code) pode ser usado.

Para obter informações sobre como gerenciar e manter os tokens do dispositivo FCM v1, consulte [Gerenciamento de endpoints do Firebase Cloud Messaging pelo Amazon SNS](sns-fcm-endpoint-management.md).

## Registro em log do status de entrega
<a name="channels-sms-best-practices-delivery-logging"></a>

Para monitorar o status de entrega de notificações por push, recomendamos que você habilite o registro de status de entrega para a aplicação da plataforma Amazon SNS. Isso ajuda você a solucionar problemas de falhas de entrega porque os logs contêm [códigos de resposta](sns-msg-status.md#platform-returncodes) do provedor retornados do serviço de plataforma push. Para obter detalhes sobre como habilitar o registro de status de entrega, consulte [Como faço para acessar os logs de entrega de tópicos do Amazon SNS para notificações por push?](https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-failed-sns-deliveries/).

## Notificações de eventos
<a name="channels-sms-best-practices-event-notifications"></a>

Para gerenciar endpoints de forma orientada por eventos, você pode usar a funcionalidade [notificações de eventos](application-event-notifications.md#application-event-notifications-sdk). Isso permite que o tópico configurado do Amazon SNS faça fanout de eventos para os assinantes, como uma função do Lambda, para eventos de aplicações de plataforma de criação de endpoint, exclusão, atualizações e falhas de entrega.

# Configuração e gerenciamento de assinaturas de e-mail do Amazon SNS
<a name="sns-email-notifications"></a>

Você pode inscrever um [endereço de e-mail](#sns-email-notifications) em um tópico do Amazon SNS usando o Console de gerenciamento da AWS, AWS SDK para Java, ou. AWS SDK para .NET

**Observações**  
A personalização do corpo da mensagem de e-mail não é suportada. O recurso de entrega de e-mail destina-se a fornecer alertas internos do sistema, não mensagens de marketing.
A assinatura direta de endpoints de e-mail só é compatível com tópicos-padrão.
O throughput da entrega de e-mail apresenta controle de utilização. Para obter mais informações, consulte as [Cotas do Amazon SNS](https://docs.aws.amazon.com/general/latest/gr/sns.html#limits_sns).

**Importante**  
Para evitar que os destinatários da lista de e-mails cancelem a assinatura de todos os destinatários dos e-mails de tópicos do Amazon SNS, consulte [Configurar uma assinatura de e-mail que requer autenticação para cancelar a assinatura](https://aws.amazon.com/premiumsupport/knowledge-center/prevent-unsubscribe-all-sns-topic/) no AWS Support.
Exceder o limite de 10 mensagens por segundo (TPS) para um endpoint de e-mail ou email-json acionará uma suspensão automática da assinatura, colocando-a em um status de confirmação pendente. A assinatura permanece válida por PendingConfirmation 30 dias, após os quais será excluída automaticamente, a menos que uma ação seja tomada.
Se um endereço de e-mail inscrito resultar em uma rejeição, o endereço será suprimido de outras entregas por 7 dias. As devoluções podem ocorrer por vários motivos, incluindo endereços inválidos ou problemas com o servidor de e-mail receptor. Para remover o endereço da lista de supressão antes que o período de 7 dias expire, resolva o problema subjacente com o endereço de e-mail e entre em contato usando AWS o Support Center.

## Inscrever um endereço de e-mail em um tópico do Amazon SNS usando o Console de gerenciamento da AWS
<a name="create-subscribe-endpoint-to-topic-console"></a>

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

1. No painel de navegação à esquerda, selecione **Assinaturas**.

1. Na página **Assinaturas**, escolha **Criar assinatura**.

1. Na página **Criar assinatura**, na seção **Detalhes**, faça o seguinte:

   1. Em **Topic ARN** (ARN do tópico), escolha o nome do recurso da Amazon (ARN) de um tópico.

   1. Em **Protocolo**, escolha **E-mail**.

   1. Para **Endpoint**, insira o endereço de e-mail.

   1. (Opcional) Para configurar uma política de filtros, expanda a seção **Subscription filter policy** (Política de filtro de assinatura). Para obter mais informações, consulte [Políticas de filtro de assinatura do Amazon SNS](sns-subscription-filter-policies.md).

   1. (Opcional) Para habilitar a filtragem baseada em carga útil, configure `Filter Policy Scope` como `MessageBody`. Para obter mais informações, consulte [Escopo de política de filtro de assinaturas do Amazon SNS](sns-message-filtering-scope.md).

   1. (Opcional) Para configurar uma fila de mensagens não entregues para a assinatura, expanda a seção **Redrive policy (dead-letter queue)** (Política de redirecionamento (fila de mensagens não entregues)). Para obter mais informações, consulte [Filas de mensagens não entregues do Amazon SNS](sns-dead-letter-queues.md).

   1. Selecione **Criar assinatura**.

      O console cria a assinatura e abre a página **Details** (Detalhes) da assinatura.

Você deve confirmar a assinatura para que o endereço de e-mail comece a receber mensagens.

**Para confirmar uma assinatura**

1. Verifique sua caixa de entrada de e-mail e escolha **Confirm subscription** (Confirmar a assinatura) no e-mail do Amazon SNS.

1. O Amazon SNS abre seu navegador da Web e exibe uma confirmação de assinatura com seu ID de assinatura.

## Inscrever um endereço de e-mail em um tópico do Amazon SNS usando um SDK AWS
<a name="subscribe-email-to-topic-aws-sdks"></a>

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

Os exemplos de código a seguir mostram como usar o `Subscribe`.

------
#### [ .NET ]

**SDK para .NET**  
 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/dotnetv3/SNS#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
        /// <summary>
        /// Creates a new subscription to a topic.
        /// </summary>
        /// <param name="client">The initialized Amazon SNS client object, used
        /// to create an Amazon SNS subscription.</param>
        /// <param name="topicArn">The ARN of the topic to subscribe to.</param>
        /// <returns>A SubscribeResponse object which includes the subscription
        /// ARN for the new subscription.</returns>
        public static async Task<SubscribeResponse> TopicSubscribeAsync(
            IAmazonSimpleNotificationService client,
            string topicArn)
        {
            SubscribeRequest request = new SubscribeRequest()
            {
                TopicArn = topicArn,
                ReturnSubscriptionArn = true,
                Protocol = "email",
                Endpoint = "recipient@example.com",
            };

            var response = await client.SubscribeAsync(request);

            return response;
        }
```
Inscreva uma fila em um tópico com filtros opcionais.  

```
    /// <summary>
    /// Subscribe a queue to a topic with optional filters.
    /// </summary>
    /// <param name="topicArn">The ARN of the topic.</param>
    /// <param name="useFifoTopic">The optional filtering policy for the subscription.</param>
    /// <param name="queueArn">The ARN of the queue.</param>
    /// <returns>The ARN of the new subscription.</returns>
    public async Task<string> SubscribeTopicWithFilter(string topicArn, string? filterPolicy, string queueArn)
    {
        var subscribeRequest = new SubscribeRequest()
        {
            TopicArn = topicArn,
            Protocol = "sqs",
            Endpoint = queueArn
        };

        if (!string.IsNullOrEmpty(filterPolicy))
        {
            subscribeRequest.Attributes = new Dictionary<string, string> { { "FilterPolicy", filterPolicy } };
        }

        var subscribeResponse = await _amazonSNSClient.SubscribeAsync(subscribeRequest);
        return subscribeResponse.SubscriptionArn;
    }
```
+  Para obter detalhes da API, consulte [Subscribe](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Subscribe) na *Referência da API AWS SDK para .NET *. 

------
#### [ C\$1\$1 ]

**SDK para C\$1\$1**  
 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/cpp/example_code/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to an email address.
/*!
  \param topicARN: An SNS topic Amazon Resource Name (ARN).
  \param emailAddress: An email address.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::subscribeEmail(const Aws::String &topicARN,
                                 const Aws::String &emailAddress,
                                 const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("email");
    request.SetEndpoint(emailAddress);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Inscrever uma aplicação móvel em um tópico.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to a mobile app.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param endpointARN: The ARN for a mobile app or device endpoint.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool
AwsDoc::SNS::subscribeApp(const Aws::String &topicARN,
                          const Aws::String &endpointARN,
                          const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("application");
    request.SetEndpoint(endpointARN);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Inscrever uma função do Lambda em um tópico.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to an AWS Lambda function.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param lambdaFunctionARN: The ARN for an AWS Lambda function.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::subscribeLambda(const Aws::String &topicARN,
                                  const Aws::String &lambdaFunctionARN,
                                  const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("lambda");
    request.SetEndpoint(lambdaFunctionARN);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Assinar uma fila do SQS em um tópico.  

```
        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

    Aws::SNS::SNSClient snsClient(clientConfiguration);

            Aws::SNS::Model::SubscribeRequest request;
            request.SetTopicArn(topicARN);
            request.SetProtocol("sqs");
            request.SetEndpoint(queueARN);

            Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

            if (outcome.IsSuccess()) {
                Aws::String subscriptionARN = outcome.GetResult().GetSubscriptionArn();
                std::cout << "The queue '" << queueName
                          << "' has been subscribed to the topic '"
                          << "'" << topicName << "'" << std::endl;
                std::cout << "with the subscription ARN '" << subscriptionARN << "."
                          << std::endl;
                subscriptionARNS.push_back(subscriptionARN);
            }
            else {
                std::cerr << "Error with TopicsAndQueues::Subscribe. "
                          << outcome.GetError().GetMessage()
                          << std::endl;

                cleanUp(topicARN,
                        queueURLS,
                        subscriptionARNS,
                        snsClient,
                        sqsClient);

                return false;
            }
```
Assinar com um filtro em um tópico.  

```
        static const Aws::String TONE_ATTRIBUTE("tone");
        static const Aws::Vector<Aws::String> TONES = {"cheerful", "funny", "serious",
                                                       "sincere"};

        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

    Aws::SNS::SNSClient snsClient(clientConfiguration);

            Aws::SNS::Model::SubscribeRequest request;
            request.SetTopicArn(topicARN);
            request.SetProtocol("sqs");
            request.SetEndpoint(queueARN);
            if (isFifoTopic) {
                if (first) {
                    std::cout << "Subscriptions to a FIFO topic can have filters."
                              << std::endl;
                    std::cout
                            << "If you add a filter to this subscription, then only the filtered messages "
                            << "will be received in the queue." << std::endl;
                    std::cout << "For information about message filtering, "
                              << "see https://docs.aws.amazon.com/sns/latest/dg/sns-message-filtering.html"
                              << std::endl;
                    std::cout << "For this example, you can filter messages by a \""
                              << TONE_ATTRIBUTE << "\" attribute." << std::endl;
                }

                std::ostringstream ostringstream;
                ostringstream << "Filter messages for \"" << queueName
                              << "\"'s subscription to the topic \""
                              << topicName << "\"?  (y/n)";

                // Add filter if user answers yes.
                if (askYesNoQuestion(ostringstream.str())) {
                    Aws::String jsonPolicy = getFilterPolicyFromUser();
                    if (!jsonPolicy.empty()) {
                        filteringMessages = true;

                        std::cout << "This is the filter policy for this subscription."
                                  << std::endl;
                        std::cout << jsonPolicy << std::endl;

                        request.AddAttributes("FilterPolicy", jsonPolicy);
                    }
                    else {
                        std::cout
                                << "Because you did not select any attributes, no filter "
                                << "will be added to this subscription." << std::endl;
                    }
                }
            }  // if (isFifoTopic)
            Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

            if (outcome.IsSuccess()) {
                Aws::String subscriptionARN = outcome.GetResult().GetSubscriptionArn();
                std::cout << "The queue '" << queueName
                          << "' has been subscribed to the topic '"
                          << "'" << topicName << "'" << std::endl;
                std::cout << "with the subscription ARN '" << subscriptionARN << "."
                          << std::endl;
                subscriptionARNS.push_back(subscriptionARN);
            }
            else {
                std::cerr << "Error with TopicsAndQueues::Subscribe. "
                          << outcome.GetError().GetMessage()
                          << std::endl;

                cleanUp(topicARN,
                        queueURLS,
                        subscriptionARNS,
                        snsClient,
                        sqsClient);

                return false;
            }

//! Routine that lets the user select attributes for a subscription filter policy.
/*!
 \sa getFilterPolicyFromUser()
 \return Aws::String: The filter policy as JSON.
 */
Aws::String AwsDoc::TopicsAndQueues::getFilterPolicyFromUser() {
    std::cout
            << "You can filter messages by one or more of the following \""
            << TONE_ATTRIBUTE << "\" attributes." << std::endl;

    std::vector<Aws::String> filterSelections;
    int selection;
    do {
        for (size_t j = 0; j < TONES.size(); ++j) {
            std::cout << "  " << (j + 1) << ". " << TONES[j]
                      << std::endl;
        }
        selection = askQuestionForIntRange(
                "Enter a number (or enter zero to stop adding more). ",
                0, static_cast<int>(TONES.size()));

        if (selection != 0) {
            const Aws::String &selectedTone(TONES[selection - 1]);
            // Add the tone to the selection if it is not already added.
            if (std::find(filterSelections.begin(),
                          filterSelections.end(),
                          selectedTone)
                == filterSelections.end()) {
                filterSelections.push_back(selectedTone);
            }
        }
    } while (selection != 0);

    Aws::String result;
    if (!filterSelections.empty()) {
        std::ostringstream jsonPolicyStream;
        jsonPolicyStream << "{ \"" << TONE_ATTRIBUTE << "\": [";


        for (size_t j = 0; j < filterSelections.size(); ++j) {
            jsonPolicyStream << "\"" << filterSelections[j] << "\"";
            if (j < filterSelections.size() - 1) {
                jsonPolicyStream << ",";
            }
        }
        jsonPolicyStream << "] }";

        result = jsonPolicyStream.str();
    }

    return result;
}
```
+  Para obter detalhes da API, consulte [Subscribe](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Subscribe) na *Referência da API AWS SDK para C\$1\$1 *. 

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

**AWS CLI**  
**Para inscrever-se em um tópico**  
O comando `subscribe` a seguir inscreve um endereço de e-mail no tópico especificado.  

```
aws sns subscribe \
    --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \
    --protocol email \
    --notification-endpoint my-email@example.com
```
Saída:  

```
{
    "SubscriptionArn": "pending confirmation"
}
```
+  Consulte detalhes da API em [Subscribe](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/subscribe.html) na *Referência de comandos da AWS CLI *. 

------
#### [ Go ]

**SDK para Go V2**  
 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/gov2/workflows/topics_and_queues#code-examples). 
Inscreva uma fila em um tópico com filtros opcionais.  

```
import (
	"context"
	"encoding/json"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	"github.com/aws/aws-sdk-go-v2/service/sns/types"
)

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions
// used in the examples.
type SnsActions struct {
	SnsClient *sns.Client
}



// SubscribeQueue subscribes an Amazon Simple Queue Service (Amazon SQS) queue to an
// Amazon SNS topic. When filterMap is not nil, it is used to specify a filter policy
// so that messages are only sent to the queue when the message has the specified attributes.
func (actor SnsActions) SubscribeQueue(ctx context.Context, topicArn string, queueArn string, filterMap map[string][]string) (string, error) {
	var subscriptionArn string
	var attributes map[string]string
	if filterMap != nil {
		filterBytes, err := json.Marshal(filterMap)
		if err != nil {
			log.Printf("Couldn't create filter policy, here's why: %v\n", err)
			return "", err
		}
		attributes = map[string]string{"FilterPolicy": string(filterBytes)}
	}
	output, err := actor.SnsClient.Subscribe(ctx, &sns.SubscribeInput{
		Protocol:              aws.String("sqs"),
		TopicArn:              aws.String(topicArn),
		Attributes:            attributes,
		Endpoint:              aws.String(queueArn),
		ReturnSubscriptionArn: true,
	})
	if err != nil {
		log.Printf("Couldn't susbscribe queue %v to topic %v. Here's why: %v\n",
			queueArn, topicArn, err)
	} else {
		subscriptionArn = *output.SubscriptionArn
	}

	return subscriptionArn, err
}
```
+  Para obter detalhes da API, consulte [Subscribe](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.Subscribe) na *Referência da API do AWS SDK para Go *. 

------
#### [ 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). 
Inscrever um endereço de e-mail em um tópico.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * 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
 */
public class SubscribeEmail {
    public static void main(String[] args) {
        final String usage = """
                Usage:     <topicArn> <email>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   email - The email address to use.
                """;

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

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

        subEmail(snsClient, topicArn, email);
        snsClient.close();
    }

    public static void subEmail(SnsClient snsClient, String topicArn, String email) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("email")
                    .endpoint(email)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Inscrever um endpoint HTTP em um tópico.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * 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
 */
public class SubscribeHTTPS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicArn> <url>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   url - The HTTPS endpoint that you want to receive notifications.
                """;

        if (args.length < 2) {
            System.out.println(usage);
            System.exit(1);
        }

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

        subHTTPS(snsClient, topicArn, url);
        snsClient.close();
    }

    public static void subHTTPS(SnsClient snsClient, String topicArn, String url) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("https")
                    .endpoint(url)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN is " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Inscrever uma função do Lambda em um tópico.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * 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
 */
public class SubscribeLambda {

    public static void main(String[] args) {

        final String usage = """

                Usage:    <topicArn> <lambdaArn>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   lambdaArn - The ARN of an AWS Lambda function.
                """;

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

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

        String arnValue = subLambda(snsClient, topicArn, lambdaArn);
        System.out.println("Subscription ARN: " + arnValue);
        snsClient.close();
    }

    public static String subLambda(SnsClient snsClient, String topicArn, String lambdaArn) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("lambda")
                    .endpoint(lambdaArn)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            return result.subscriptionArn();

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
}
```
+  Para obter detalhes da API, consulte [Subscribe](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Subscribe) na *Referência da API AWS SDK for Java 2.x *. 

------
#### [ JavaScript ]

**SDK para JavaScript (v3)**  
 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/javascriptv3/example_code/sns#code-examples). 
Crie o cliente em um módulo separado e exporte-o.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importe o SDK e os módulos do cliente e chame a API.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic for which you wish to confirm a subscription.
 * @param {string} emailAddress - The email address that is subscribed to the topic.
 */
export const subscribeEmail = async (
  topicArn = "TOPIC_ARN",
  emailAddress = "usern@me.com",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "email",
      TopicArn: topicArn,
      Endpoint: emailAddress,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
};
```
Inscrever uma aplicação móvel em um tópico.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic the subscriber is subscribing to.
 * @param {string} endpoint - The Endpoint ARN of an application. This endpoint is created
 *                            when an application registers for notifications.
 */
export const subscribeApp = async (
  topicArn = "TOPIC_ARN",
  endpoint = "ENDPOINT",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "application",
      TopicArn: topicArn,
      Endpoint: endpoint,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
  return response;
};
```
Inscrever uma função do Lambda em um tópico.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic the subscriber is subscribing to.
 * @param {string} endpoint - The Endpoint ARN of and AWS Lambda function.
 */
export const subscribeLambda = async (
  topicArn = "TOPIC_ARN",
  endpoint = "ENDPOINT",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "lambda",
      TopicArn: topicArn,
      Endpoint: endpoint,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
  return response;
};
```
Assinar uma fila do SQS em um tópico.  

```
import { SubscribeCommand, SNSClient } from "@aws-sdk/client-sns";

const client = new SNSClient({});

export const subscribeQueue = async (
  topicArn = "TOPIC_ARN",
  queueArn = "QUEUE_ARN",
) => {
  const command = new SubscribeCommand({
    TopicArn: topicArn,
    Protocol: "sqs",
    Endpoint: queueArn,
  });

  const response = await client.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '931e13d9-5e2b-543f-8781-4e9e494c5ff2',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:subscribe-queue-test-430895:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
  // }
  return response;
};
```
Assinar com um filtro em um tópico.  

```
import { SubscribeCommand, SNSClient } from "@aws-sdk/client-sns";

const client = new SNSClient({});

export const subscribeQueueFiltered = async (
  topicArn = "TOPIC_ARN",
  queueArn = "QUEUE_ARN",
) => {
  const command = new SubscribeCommand({
    TopicArn: topicArn,
    Protocol: "sqs",
    Endpoint: queueArn,
    Attributes: {
      // This subscription will only receive messages with the 'event' attribute set to 'order_placed'.
      FilterPolicyScope: "MessageAttributes",
      FilterPolicy: JSON.stringify({
        event: ["order_placed"],
      }),
    },
  });

  const response = await client.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '931e13d9-5e2b-543f-8781-4e9e494c5ff2',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:subscribe-queue-test-430895:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
  // }
  return response;
};
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-subscribing-email). 
+  Para obter detalhes da API, consulte [Subscribe](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SubscribeCommand) na *Referência da API do AWS SDK para JavaScript *. 

------
#### [ Kotlin ]

**SDK para Kotlin**  
 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/kotlin/services/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
suspend fun subEmail(
    topicArnVal: String,
    email: String,
): String {
    val request =
        SubscribeRequest {
            protocol = "email"
            endpoint = email
            returnSubscriptionArn = true
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.subscribe(request)
        return result.subscriptionArn.toString()
    }
}
```
Inscrever uma função do Lambda em um tópico.  

```
suspend fun subLambda(
    topicArnVal: String?,
    lambdaArn: String?,
) {
    val request =
        SubscribeRequest {
            protocol = "lambda"
            endpoint = lambdaArn
            returnSubscriptionArn = true
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.subscribe(request)
        println(" The subscription Arn is ${result.subscriptionArn}")
    }
}
```
+  Consulte detalhes da API em [Subscribe](https://sdk.amazonaws.com/kotlin/api/latest/index.html) na *Referência da API AWS SDK para Kotlin*. 

------
#### [ PHP ]

**SDK para PHP**  
 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/php/example_code/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'email';
$endpoint = 'sample@example.com';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
Inscrever um endpoint HTTP em um tópico.  

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'https';
$endpoint = 'https://';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Para obter detalhes da API, consulte [Subscribe](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Subscribe) na *Referência da API do AWS SDK para PHP *. 

------
#### [ Python ]

**SDK para Python (Boto3)**  
 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/python/example_code/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def subscribe(topic, protocol, endpoint):
        """
        Subscribes an endpoint to the topic. Some endpoint types, such as email,
        must be confirmed before their subscriptions are active. When a subscription
        is not confirmed, its Amazon Resource Number (ARN) is set to
        'PendingConfirmation'.

        :param topic: The topic to subscribe to.
        :param protocol: The protocol of the endpoint, such as 'sms' or 'email'.
        :param endpoint: The endpoint that receives messages, such as a phone number
                         (in E.164 format) for SMS messages, or an email address for
                         email messages.
        :return: The newly added subscription.
        """
        try:
            subscription = topic.subscribe(
                Protocol=protocol, Endpoint=endpoint, ReturnSubscriptionArn=True
            )
            logger.info("Subscribed %s %s to topic %s.", protocol, endpoint, topic.arn)
        except ClientError:
            logger.exception(
                "Couldn't subscribe %s %s to topic %s.", protocol, endpoint, topic.arn
            )
            raise
        else:
            return subscription
```
Inscreva uma fila em um tópico com filtros opcionais.  

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def subscribe_queue_to_topic(
        self, 
        topic_arn: str, 
        queue_arn: str, 
        filter_policy: Optional[str] = None
    ) -> str:
        """
        Subscribe an SQS queue to an SNS topic.

        :param topic_arn: The ARN of the SNS topic.
        :param queue_arn: The ARN of the SQS queue.
        :param filter_policy: Optional JSON filter policy for message filtering.
        :return: The ARN of the subscription.
        :raises ClientError: If the subscription fails.
        """
        try:
            attributes = {}
            if filter_policy:
                attributes['FilterPolicy'] = filter_policy

            response = self.sns_client.subscribe(
                TopicArn=topic_arn,
                Protocol='sqs',
                Endpoint=queue_arn,
                Attributes=attributes
            )

            subscription_arn = response['SubscriptionArn']
            logger.info(f"Subscribed queue {queue_arn} to topic {topic_arn}")
            return subscription_arn

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            logger.error(f"Error subscribing queue to topic: {error_code} - {e}")
            raise
```
+  Consulte detalhes da API em [Subscribe](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Subscribe) na *Referência da API do AWS SDK for Python (Boto3)*. 

------
#### [ Ruby ]

**SDK para Ruby**  
 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/ruby/example_code/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
require 'aws-sdk-sns'
require 'logger'

# Represents a service for creating subscriptions in Amazon Simple Notification Service (SNS)
class SubscriptionService
  # Initializes the SubscriptionService with an SNS client
  #
  # @param sns_client [Aws::SNS::Client] The SNS client
  def initialize(sns_client)
    @sns_client = sns_client
    @logger = Logger.new($stdout)
  end

  # Attempts to create a subscription to a topic
  #
  # @param topic_arn [String] The ARN of the SNS topic
  # @param protocol [String] The subscription protocol (e.g., email)
  # @param endpoint [String] The endpoint that receives the notifications (email address)
  # @return [Boolean] true if subscription was successfully created, false otherwise
  def create_subscription(topic_arn, protocol, endpoint)
    @sns_client.subscribe(topic_arn: topic_arn, protocol: protocol, endpoint: endpoint)
    @logger.info('Subscription created successfully.')
    true
  rescue Aws::SNS::Errors::ServiceError => e
    @logger.error("Error while creating the subscription: #{e.message}")
    false
  end
end

# Main execution if the script is run directly
if $PROGRAM_NAME == __FILE__
  protocol = 'email'
  endpoint = 'EMAIL_ADDRESS' # Should be replaced with a real email address
  topic_arn = 'TOPIC_ARN'    # Should be replaced with a real topic ARN

  sns_client = Aws::SNS::Client.new
  subscription_service = SubscriptionService.new(sns_client)

  @logger.info('Creating the subscription.')
  unless subscription_service.create_subscription(topic_arn, protocol, endpoint)
    @logger.error('Subscription creation failed. Stopping program.')
    exit 1
  end
end
```
+  Para obter mais informações, consulte o [Guia do desenvolvedor do AWS SDK para Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-create-subscription.html). 
+  Para obter detalhes da API, consulte [Subscribe](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/Subscribe) na *Referência da API do AWS SDK para Ruby *. 

------
#### [ Rust ]

**SDK para Rust**  
 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/rustv1/examples/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
async fn subscribe_and_publish(
    client: &Client,
    topic_arn: &str,
    email_address: &str,
) -> Result<(), Error> {
    println!("Receiving on topic with ARN: `{}`", topic_arn);

    let rsp = client
        .subscribe()
        .topic_arn(topic_arn)
        .protocol("email")
        .endpoint(email_address)
        .send()
        .await?;

    println!("Added a subscription: {:?}", rsp);

    let rsp = client
        .publish()
        .topic_arn(topic_arn)
        .message("hello sns!")
        .send()
        .await?;

    println!("Published message: {:?}", rsp);

    Ok(())
}
```
+  Consulte detalhes da API em [Subscribe](https://docs.rs/aws-sdk-sns/latest/aws_sdk_sns/client/struct.Client.html#method.subscribe) na *Referência da API AWS SDK para Rust*. 

------
#### [ SAP ABAP ]

**SDK para SAP ABAP**  
 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/sap-abap/services/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
    TRY.
        oo_result = lo_sns->subscribe(                      "oo_result is returned for testing purposes."
                iv_topicarn = iv_topic_arn
                iv_protocol = 'email'
                iv_endpoint = iv_email_address
                iv_returnsubscriptionarn = abap_true ).
        MESSAGE 'Email address subscribed to SNS topic.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snssubscriptionlmte00.
        MESSAGE 'Unable to create subscriptions. You have reached the maximum number of subscriptions allowed.' TYPE 'E'.
    ENDTRY.
```
+  Consulte detalhes da API em [Inscrever-se](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) na *Referência da API do AWS SDK para SAP ABAP*. 

------
#### [ Swift ]

**SDK para Swift**  
 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/swift/example_code/sns#code-examples). 
Inscrever um endereço de e-mail em um tópico.  

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        let output = try await snsClient.subscribe(
            input: SubscribeInput(
                endpoint: email,
                protocol: "email",
                returnSubscriptionArn: true,
                topicArn: arn
            )
        )

        guard let subscriptionArn = output.subscriptionArn else {
            print("No subscription ARN received from Amazon SNS.")
            return
        }
        
        print("Subscription \(subscriptionArn) created.")
```
Inscrição de um número de telefone em um tópico para receber notificações por SMS.  

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        let output = try await snsClient.subscribe(
            input: SubscribeInput(
                endpoint: phone,
                protocol: "sms",
                returnSubscriptionArn: true,
                topicArn: arn
            )
        )

        guard let subscriptionArn = output.subscriptionArn else {
            print("No subscription ARN received from Amazon SNS.")
            return
        }
        
        print("Subscription \(subscriptionArn) created.")
```
+  Consulte detalhes da API em [Subscribe](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/subscribe(input:)) na *Referência de API do AWS SDK para Swift*. 

------