

Das AWS Mobile SDK für Xamarin ist jetzt in der enthalten. AWS SDK für .NET Dieses Handbuch bezieht sich auf die archivierte Version des Mobile SDK für Xamarin.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Empfangen von Push-Benachrichtigungen mit SNS (Xamarin Android)
<a name="getting-started-sns-android"></a>

Das Tutorial erklärt, wie Sie mithilfe von Amazon Simple Notification Service (SNS) und dem AWS Mobile SDK für .NET und Xamarin Push-Benachrichtigungen an eine Xamarin-Android-Anwendung senden.

## Projekteinrichtung
<a name="project-setup"></a>

### Voraussetzungen
<a name="prerequisites"></a>

Befolgen Sie alle Anweisungen unter [Einrichten von AWS Mobile SDK for .NET and Xamarin](setup.md), bevor Sie mit diesem Tutorial beginnen.

### Festlegen von Berechtigungen für SNS
<a name="set-permissions-for-sns"></a>

Befolgen Sie Schritt 2 in [Einrichten von AWS Mobile SDK for .NET and Xamarin](setup.md), um die unten angegebene Richtlinie an die Rollen der Anwendung anzuhängen. Die Anwendung erhält so die erforderlichen Berechtigungen für den Zugriff auf SNS:

1. Navigieren Sie zur [IAM-Konsole](https://console.aws.amazon.com/iam/home) und wählen Sie die zu konfigurierende IAM-Rolle.

1. Klicken Sie auf **Richtlinie anhängen**, wählen Sie die Amazon SNSFull Access-Richtlinie aus und klicken Sie auf **Richtlinie anhängen**.

**Warnung**  
Die Verwendung von Amazon SNSFull Access in einer Produktionsumgebung wird nicht empfohlen. Wir verwenden die Richtlinie hier, damit Sie schnell mit der Arbeit beginnen können. Weitere Informationen über das Festlegen von Berechtigungen für eine IAM-Rolle erhalten Sie unter [Overview of IAM Role Permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_permissions.html).

### Aktivieren von Push-Benachrichtigungen in der Google Cloud
<a name="enable-push-notifications-on-google-cloud"></a>

Fügen Sie zunächst ein neues Google-API-Projekt hinzu:

1. Navigieren Sie zur [Google Developers-Konsole](https://console.developers.google.com).

1. Klicken Sie auf **Create Project (Projekt erstellen)**.

1. Geben Sie einen Projektnamen in das Feld **New Project (Neues Projekt)** ein. Notieren Sie sich die (später benötigte) Projekt-ID und klicken Sie auf **Create (Erstellen)**.

Aktivieren Sie nun den Service Google Cloud Messaging (GCM) für das Projekt:

1. In der [Google Developers-Konsole](https://console.developers.google.com) sollte das neue Projekt bereits ausgewählt sein. Wählen Sie es andernfalls im Dropdown-Menü oben auf der Seite aus.

1. Wählen Sie in der Seitenleiste links auf der Seite die Option **APIs & auth** aus.

1. Geben Sie in das Suchfeld „Google Cloud Messaging for Android“ ein und klicken Sie auf den Link **Google Cloud Messaging for Android**.

1. Klicken Sie auf **Enable API**.

Rufen Sie schließlich einen API-Schlüssel ab:

1. **Wählen Sie in der Google Developers Console **APIs & auth** > Credentials aus.**

1. Klicken Sie unter **Public API access** auf **Create new key**.

1. Klicken Sie im Dialogfeld **Create a new key** auf **Server key**.

1. Klicken Sie im resultierenden Dialogfeld auf **Create** und kopieren Sie den angezeigten API-Schlüssel. Sie werden diesen API-Schlüssel später zur Authentifizierung verwenden.

### Verwenden der Projekt-ID zum Erstellen eines Plattform-ARN in der SNS-Konsole
<a name="use-project-id-to-create-a-platform-arn-in-sns-console"></a>

1. Rufen Sie die [SNS-Konsole](https://console.aws.amazon.com/sns/v2/home) auf.

1. Klicken Sie auf der linken Seite des Bildschirms auf **Applications (Anwendungen)**.

1. Klicken Sie auf **Create platform application**, um eine Anwendung für die SNS-Plattform zu erstellen.

1. Geben Sie einen **Application Name** ein.

1. Wählen Sie **Google Cloud Messaging (GCM)** für **Push notification platform (Push-Benachrichtigungsplattform)**.

1. Fügen Sie den API-Schlüssel in das Textfeld **API key** ein.

1. Klicken Sie auf **Create platform application**.

1. Wählen Sie die soeben erstellte Plattformanwendung und kopieren Sie den ARN der Anwendung.

### NuGet Package für SNS zu Ihrem Projekt hinzufügen
<a name="add-nuget-package-for-sns-to-your-project"></a>

Folgen Sie Schritt 4 der Anweisungen unter [Einrichten des AWS Mobile SDK for .NET and Xamarin](setup.md), um das Amazon Simple Notification NuGet Service-Paket zu Ihrem Projekt hinzuzufügen.

## Erstellen eines SNS-Clients
<a name="create-an-sns-client"></a>

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

## Registrieren der Anwendung für Remote-Benachrichtigungen
<a name="register-your-application-for-remote-notifications"></a>

Um sich für Fernbenachrichtigungen auf Android zu registrieren, müssen Sie eine erstellen, BroadcastReceiver die Google Cloud-Nachrichten empfangen kann. Ändern Sie den Paketnamen unten, wenn Sie dazu aufgefordert werden:

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

Im Folgenden finden Sie den Dienst, der die Push-Benachrichtigung von empfängt BroadcastReceiver und die Benachrichtigung in der Benachrichtigungsleiste des Geräts anzeigt:

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

## Senden einer Nachricht mit der SNS-Konsole an den Endpunkt
<a name="send-a-message-from-the-sns-console-to-your-endpoint"></a>

1. Navigieren Sie zu [SNS Console (SNS-Konsole) > Applications (Anwendungen)](https://console.aws.amazon.com/sns/v2/home).

1. Wählen Sie die Plattformanwendung, dann einen Endpunkt und klicken Sie schließlich auf **Publish to endpoint (In Endpunkt veröffentlichen)**.

1. Geben Sie eine Textnachricht in das Textfeld ein und klicken Sie auf **Publish message (Nachricht veröffentlichen)**, um eine Nachricht zu veröffentlichen.