

El SDK AWS móvil para Xamarin ahora está incluido en. AWS SDK para .NET Esta guía hace referencia a la versión archivada del SDK para móviles para Xamarin.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Recepción de notificaciones de inserción con SNS (Xamarin Android)
<a name="getting-started-sns-android"></a>

En este tutorial se explica cómo enviar notificaciones de inserción a una aplicación de Xamarin Android con Amazon Simple Notification Service (SNS) y AWS Mobile SDK para .NET y Xamarin.

## Configuración del proyecto
<a name="project-setup"></a>

### Requisitos previos
<a name="prerequisites"></a>

Debe seguir las instrucciones en [Setting Up the AWS Mobile SDK for .NET and Xamarin](setup.md) antes de comenzar este tutorial.

### Establecer permisos de SNS
<a name="set-permissions-for-sns"></a>

Siga el paso 2 de [Setting Up the AWS Mobile SDK for .NET and Xamarin](setup.md) para adjuntar la política que se menciona a continuación a los roles de su aplicación. Esto otorgará a su aplicación los permisos correctos para obtener acceso a SNS:

1. Vaya a la [consola de IAM](https://console.aws.amazon.com/iam/home) y seleccione el rol de IAM que desea configurar.

1. Haz clic en **Adjuntar política**, selecciona la política de Amazon SNSFull Access y haz clic en **Adjuntar política**.

**aviso**  
No se recomienda utilizar Amazon SNSFull Access en un entorno de producción. Aquí lo utilizamos para que pueda comenzar a trabajar rápidamente. Para obtener más información acerca de la especificación de los permisos de un rol de IAM, consulte la [información general sobre los permisos de los roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_permissions.html).

### Habilitar notificaciones de inserción en Google Cloud
<a name="enable-push-notifications-on-google-cloud"></a>

En primer lugar, añada un nuevo proyecto de API de Google:

1. Vaya a la [Consola para desarrolladores de Google](https://console.developers.google.com).

1. Haga clic en **Create Project (Crear proyecto)**.

1. En el cuadro **New Project (Nuevo proyecto)**, escriba un nombre de proyecto, tome nota del ID de proyecto (lo necesitará más adelante) y haga clic en **Create (Crear)**.

A continuación, habilite el servicio Google Cloud Messaging (GCM) para el proyecto:

1. En la [consola para desarrolladores de Google](https://console.developers.google.com), el nuevo proyecto ya debería estar seleccionado. En caso contrario, selecciónela en el menú desplegable situado en la parte superior de la página.

1. Selecciona **APIs & auth** en la barra lateral de la parte izquierda de la página.

1. En el cuadro de búsqueda, escriba "Google Cloud Messaging for Android" y haga clic en el enlace **Google Cloud Messaging for Android (Google Cloud Messaging para Android)**.

1. Haga clic en **Enable API (Habilitar API)**.

Por último, obtenga una clave de API:

1. **En la consola de desarrolladores de Google, selecciona **APIs & auth** > Credenciales.**

1. En **Public API access (Acceso a API pública)**, haga clic en **Create new key (Crear nueva clave)**.

1. En el cuadro de diálogo **Create a new key (Crear nueva clave)**, haga clic en **Server key (Clave de servidor)**.

1. En el cuadro de diálogo resultante, haga clic en **Create (Crear)** y copie la clave de API que se muestra. Utilizará esta clave de API para realizar la autenticación más adelante.

### Uso del ID de proyecto para crear un ARN de plataforma en la consola de SNS
<a name="use-project-id-to-create-a-platform-arn-in-sns-console"></a>

1. Vaya a la [consola de SNS](https://console.aws.amazon.com/sns/v2/home).

1. Haga clic en **Applications (Aplicaciones)** en la parte izquierda de la pantalla.

1. Haga clic en **Create platform application (Crear aplicación de plataforma)** para crear una nueva aplicación de plataforma de SNS.

1. Introduzca un nombre de aplicación en **Application Name (Nombre de aplicación)**.

1. Seleccione **Google Cloud Messaging (GCM)** en **Push notification platform (Plataforma de notificación de inserción)**.

1. Pegue la clave de API en el cuadro de texto **API key (Clave de API)**.

1. Haga clic en **Create platform application (Crear aplicación de plataforma)**.

1. Seleccione la aplicación de plataforma que acaba de crear y copie el ARN de la aplicación.

### Agregue NuGet Package for SNS a su proyecto
<a name="add-nuget-package-for-sns-to-your-project"></a>

Siga el paso 4 de las instrucciones de [Configuración del AWS Mobile SDK para.NET and Xamarin para](setup.md) añadir el paquete Amazon Simple Notification NuGet Service a su proyecto.

## Creación de un cliente de SNS
<a name="create-an-sns-client"></a>

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

## Registro de una aplicación para recibir notificaciones remotas
<a name="register-your-application-for-remote-notifications"></a>

Para registrarse para recibir notificaciones remotas en Android, tendrá que crear uno BroadcastReceiver que pueda recibir los mensajes de Google Cloud. Cambie el nombre del paquete cuando se le pida a continuación:

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

A continuación se muestra el servicio que recibe la notificación automática del dispositivo BroadcastReceiver y la muestra en la barra de notificaciones del 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());
  }
}
```

## Envío de un mensaje desde la consola de SNS a un punto de enlace
<a name="send-a-message-from-the-sns-console-to-your-endpoint"></a>

1. Vaya a la [consola de SNS y haga clic en Applications (Aplicaciones)](https://console.aws.amazon.com/sns/v2/home).

1. Seleccione su aplicación de plataforma, seleccione un punto de enlace y haga clic en **Publish to endpoint (Publicar en punto de enlace)**.

1. Escriba un mensaje en el cuadro de texto y haga clic en **Publish message (Publicar mensaje)** para publicarlo.