

O SDK AWS móvel para Xamarin agora está incluído no. AWS SDK para .NET Este guia faz referência à versão arquivada do Mobile SDK para Xamarin.

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

# Receba notificações por push usando o SNS (Xamarin Android)
<a name="getting-started-sns-android"></a>

O tutorial explica como enviar notificações por push a um aplicativo Xamarin Android usando o Amazon Simple Notification Service (SNS) e o AWS Mobile SDK para .NET e Xamarin.

## Configuração do projeto
<a name="project-setup"></a>

### Pré-requisitos
<a name="prerequisites"></a>

É necessário concluir todas as instruções na [Configuração do AWS Mobile SDK para .NET e Xamarin](setup.md) antes de iniciar este tutorial.

### Definir permissões para o SNS
<a name="set-permissions-for-sns"></a>

Siga a etapa 2 em [Configuração do AWS Mobile SDK para .NET e Xamarin](setup.md) para associar a política mencionada abaixo aos perfis do aplicativo. Isso concederá aplicativo as permissões adequadas para acessar o SNS:

1. Acesse o [console do IAM](https://console.aws.amazon.com/iam/home) e selecione a função do IAM a ser configurada.

1. Clique em **Anexar política**, selecione a política Amazon SNSFull Access e clique em **Anexar política**.

**Atenção**  
O uso do Amazon SNSFull Access não é recomendado em um ambiente de produção. Nós o utilizamos aqui para que você possa avançar rapidamente. Para obter mais informações sobre como especificar permissões para uma perfil do IAM, consulte [Visão geral das permissões de perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_permissions.html).

### Habilitar notificações por push no Google Cloud
<a name="enable-push-notifications-on-google-cloud"></a>

Primeiro, adicione um novo projeto do Google API:

1. Acesse o [console do Google Developers](https://console.developers.google.com).

1. Clique em **Create Project (Criar projeto)**.

1. Na caixa **New Project (Novo projeto)**, insira um nome de projeto, anote o ID do projeto (você precisará dele mais tarde) e clique em **Create (Criar)**.

Em seguida, habilite o serviço Google Cloud Messaging (GCM) do seu projeto:

1. No [console do Google Developers](https://console.developers.google.com), o novo projeto já estará selecionado. Se não estiver, selecione-o no menu suspenso na parte superior da página.

1. Selecione **APIs e auth** na barra lateral no lado esquerdo da página.

1. Na caixa de pesquisa, digite "Google Cloud Messaging para Android" e clique no link **Google Cloud Messaging for Android (Google Cloud Messaging para Android)**.

1. Clique em **Enable API (Permitir API)**.

Por fim, obtenha uma chave de API:

1. No Google Developers Console, selecione **APIs & auth** > **Credenciais**.

1. Em **Public API access (Acesso à API pública)**, clique em **Create new key (Criar nova chave)**.

1. Na caixa de diálogo **Create a new key (Criar uma nova chave)**, clique em **Server key (Chave do servidor)**.

1. Na caixa de diálogo resultante, clique em **Create (Criar)** e copie a chave da API exibida. Você a usará para realizar a autenticação posteriormente.

### Uso do ID do projeto para criar um Nome de região da Amazon (ARN) de plataforma console do SNS
<a name="use-project-id-to-create-a-platform-arn-in-sns-console"></a>

1. Acesse o [console do SNS](https://console.aws.amazon.com/sns/v2/home).

1. Clique em **Applications (Aplicativos)** no lado esquerdo da tela.

1. Clique em **Create platform application (Criar aplicativo de plataforma)** para criar um novo aplicativo para a plataforma SNS.

1. Insira um **Application Name (Nome de aplicativo)**.

1. Selecione **Google Cloud Messaging (GCM)** em **Push notification platform (Plataforma de notificação por push)**.

1. Cole a chave da API na caixa de texto intitulada **API key (Chave da API)**.

1. Clique em **Create platform application (Criar aplicativo de plataforma)**.

1. Selecione o aplicativo de plataforma que você acabou de criar e copie o Nome de região da Amazon (ARN) do aplicativo.

### Adicione o NuGet Package for SNS ao seu projeto
<a name="add-nuget-package-for-sns-to-your-project"></a>

Siga a Etapa 4 das instruções em [Configurar o AWS Mobile SDK para .NET e Xamarin para](setup.md) adicionar o pacote NuGet Amazon Simple Notification Service ao seu projeto.

## Criação de um cliente SNS
<a name="create-an-sns-client"></a>

```
var snsClient = new AmazonSimpleNotificationServiceClient(credentials, region);
```

## Registro do aplicativo para notificações remotas
<a name="register-your-application-for-remote-notifications"></a>

Para se registrar para receber notificações remotas no Android, você precisará criar uma BroadcastReceiver que possa receber mensagens do Google Cloud. Altere o nome do pacote abaixo quando solicitado:

```
[BroadcastReceiver(Permission = "com.google.android.c2dm.permission.SEND")]
[IntentFilter(new string[] {
      "com.google.android.c2dm.intent.RECEIVE"
}, Categories = new string[] {
      "com.amazonaws.sns" /* change to match your package */
})]
[IntentFilter(new string[] {
      "com.google.android.c2dm.intent.REGISTRATION"
}, Categories = new string[] {
      "com.amazonaws.sns" /* change to match your package */
})]
[IntentFilter(new string[] {
      "com.google.android.gcm.intent.RETRY"
}, Categories = new string[] {
      "com.amazonaws.sns" /* change to match your package */
})]
public class GCMBroadcastReceiver: BroadcastReceiver {
      const string TAG = "PushHandlerBroadcastReceiver";
      public override void OnReceive(Context context, Intent intent) {
              GCMIntentService.RunIntentInService(context, intent);
              SetResult(Result.Ok, null, null);
      }
}

[BroadcastReceiver]
[IntentFilter(new[] {
      Android.Content.Intent.ActionBootCompleted
})]
public class GCMBootReceiver: BroadcastReceiver {
      public override void OnReceive(Context context, Intent intent) {
              GCMIntentService.RunIntentInService(context, intent);
              SetResult(Result.Ok, null, null);
      }
}
```

Abaixo está o serviço que recebe a notificação push do BroadcastReceiver e exibe a notificação na barra de notificação do dispositivo:

```
[Service]
 public class GCMIntentService: IntentService {
  static PowerManager.WakeLock sWakeLock;
  static object LOCK = new object();

  public static void RunIntentInService(Context context, Intent intent) {
    lock(LOCK) {
      if (sWakeLock == null) {
        // This is called from BroadcastReceiver, there is no init.
        var pm = PowerManager.FromContext(context);
        sWakeLock = pm.NewWakeLock(
        WakeLockFlags.Partial, "My WakeLock Tag");
      }
    }

    sWakeLock.Acquire();
    intent.SetClass(context, typeof(GCMIntentService));
    context.StartService(intent);
  }

  protected override void OnHandleIntent(Intent intent) {
    try {
      Context context = this.ApplicationContext;
      string action = intent.Action;

      if (action.Equals("com.google.android.c2dm.intent.REGISTRATION")) {
        HandleRegistration(intent);
      } else if (action.Equals("com.google.android.c2dm.intent.RECEIVE")) {
        HandleMessage(intent);
      }
    } finally {
      lock(LOCK) {
        //Sanity check for null as this is a public method
        if (sWakeLock != null) sWakeLock.Release();
      }
    }
  }

  private void HandleRegistration(Intent intent) {
    string registrationId = intent.GetStringExtra("registration_id");
    string error = intent.GetStringExtra("error");
    string unregistration = intent.GetStringExtra("unregistered");

    if (string.IsNullOrEmpty(error)) {
      var response = await SnsClient.CreatePlatformEndpointAsync(new CreatePlatformEndpointRequest {
        Token = registrationId,
        PlatformApplicationArn = "YourPlatformArn" /* insert your platform application ARN here */
      });
    }
  }

  private void HandleMessage(Intent intent) {
    string message = string.Empty;
    Bundle extras = intent.Extras;
    if (!string.IsNullOrEmpty(extras.GetString("message"))) {
      message = extras.GetString("message");
    } else {
      message = extras.GetString("default");
    }

    Log.Info("Messages", "message received = " + message);
    ShowNotification(this, "SNS Push", message);
    //show the message

  }

  public void ShowNotification(string contentTitle,
  string contentText) {
    // Intent
    Notification.Builder builder = new Notification.Builder(this)
      .SetContentTitle(contentTitle)
      .SetContentText(contentText)
      .SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate)
      .SetSmallIcon(Resource.Drawable.Icon)
      .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification));

    // Get the notification manager:
    NotificationManager notificationManager = this.GetSystemService(Context.NotificationService) as NotificationManager;

    notificationManager.Notify(1001, builder.Build());
  }
}
```

## Envio de uma mensagem do console do SNS para o endpoint
<a name="send-a-message-from-the-sns-console-to-your-endpoint"></a>

1. Acesse [SNS Console (Console do SNS) > Applications (Aplicativos)](https://console.aws.amazon.com/sns/v2/home).

1. Selecione o aplicativo de plataforma, selecione um endpoint e clique em **Publish to endpoint (Publicar no endpoint)**.

1. Digite uma mensagem de texto na caixa de texto e clique em **Publish message (Publicar mensagem)** para publicar uma mensagem.