

 AWS Mobile SDK untuk Xamarin sekarang termasuk dalam. AWS SDK untuk .NET Panduan ini menjadi referensi versi yang diarsipkan dari Mobile SDK for Xamarin.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menerima Notifikasi Push menggunakan SNS (Xamarin Android)
<a name="getting-started-sns-android"></a>

Tutorial ini menjelaskan cara mengirim notifikasi push ke aplikasi Android Xamarin menggunakan Amazon Simple Notification Service (SNS) dan AWS Mobile SDK for .NET and Xamarin.

## Penyiapan Proyek
<a name="project-setup"></a>

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

Anda harus menyelesaikan semua instruksi yang ada di [Menyiapkan AWS Mobile SDK for .NET and Xamarin](setup.md) sebelum memulai tutorial ini.

### Mengatur Izin untuk SNS
<a name="set-permissions-for-sns"></a>

Ikuti Langkah 2 yang ada di [Menyiapkan AWS Mobile SDK for .NET and Xamarin](setup.md) untuk melampirkan kebijakan yang disebutkan di bawah ini ke peran aplikasi Anda. Hal ini akan memberikan aplikasi Anda izin yang tepat untuk mengakses SNS:

1. Buka [Konsol IAM](https://console.aws.amazon.com/iam/home) dan pilih IAM role yang akan dikonfigurasi.

1. Klik **Lampirkan Kebijakan**, pilih kebijakan SNSFull Akses Amazon dan klik **Lampirkan Kebijakan**.

**Awas**  
Menggunakan Amazon SNSFull Access tidak disarankan di lingkungan produksi. Kami menggunakannya di sini untuk memungkinkan Anda untuk bangun dan berjalan dengan cepat. Untuk informasi selengkapnya tentang bagaimana menentukan izin untuk IAM role, lihat [Gambaran Umum Izin IAM Role](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_permissions.html).

### Aktifkan Notifikasi Push pada Google Cloud
<a name="enable-push-notifications-on-google-cloud"></a>

Pertama, tambahkan proyek Google API baru:

1. Buka [Konsol Developer Google](https://console.developers.google.com).

1. Klik **Buat Proyek**.

1. Di kotak **Proyek Baru**, masukkan nama proyek, catat ID proyek (Anda akan membutuhkannya nanti) dan klik **Buat**.

Selanjutnya, aktifkan layanan Google Cloud Messaging (GCM) untuk proyek Anda:

1. Di [Konsol Developer Google](https://console.developers.google.com), proyek baru Anda seharusnya sudah dipilih. Jika tidak, pilih di drop-down yang ada di bagian atas halaman.

1. Pilih **APIs & auth** dari bilah samping di sisi kiri halaman.

1. Di kotak pencarian, ketik “Google Cloud Messaging untuk Android” dan klik tautan **Google Cloud Messaging untuk Android**.

1. Klik **Aktifkan API**.

Akhirnya, dapatkan Kunci API:

1. Di Google Developers Console, pilih **APIs & auth** > **Credentials**.

1. Di bawah **Akses API Publik**, klik **Buat kunci baru**.

1. Pada dialog **Buat kunci baru**, klik **Kunci server**.

1. Dalam dialog yang dihasilkan, klik **Buat** dan salin kunci API yang ditampilkan. Anda akan menggunakan kunci API ini untuk melakukan autentikasi nanti.

### Menggunakan ID Proyek untuk Membuat ARN Platform di Konsol SNS
<a name="use-project-id-to-create-a-platform-arn-in-sns-console"></a>

1. Buka [Konsol SNS](https://console.aws.amazon.com/sns/v2/home).

1. Klik **Aplikasi** di sisi kiri layar.

1. Klik **Buat aplikasi platform** untuk membuat aplikasi platform SNS baru.

1. Masukkan **Nama Aplikasi**.

1. Pilih **Google Cloud Messaging (GCM)** untuk **Platform notifikasi push**.

1. Tempelkan kunci API ke dalam kotak teks berlabel **Kunci API**.

1. Klik **Buat aplikasi platform**.

1. Pilih Aplikasi Platform yang baru saja Anda buat dan salin ARN Aplikasi-nya.

### Tambahkan NuGet Package untuk SNS ke Proyek Anda
<a name="add-nuget-package-for-sns-to-your-project"></a>

Ikuti Langkah 4 petunjuk dalam [Menyiapkan AWS Mobile SDK untuk.NET dan Xamarin untuk](setup.md) menambahkan paket NuGet Amazon Simple Notification Service ke project Anda.

## Buat klien SNS
<a name="create-an-sns-client"></a>

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

## Daftarkan Aplikasi Anda untuk Notifikasi Jarak Jauh
<a name="register-your-application-for-remote-notifications"></a>

Untuk mendaftar notifikasi jarak jauh di Android, Anda harus membuat BroadcastReceiver yang dapat menerima pesan Google Cloud. Ubah nama paket di bawah ini saat diminta untuk melakukannya:

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

Di bawah ini adalah layanan yang menerima pemberitahuan push dari BroadcastReceiver dan menampilkan notifikasi di bilah notifikasi perangkat:

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

## Mengirim Pesan dari Konsol SNS untuk Titik Akhir Anda
<a name="send-a-message-from-the-sns-console-to-your-endpoint"></a>

1. Buka [Konsol SNS > Aplikasi](https://console.aws.amazon.com/sns/v2/home).

1. Pilih aplikasi platform Anda, pilih titik akhir, dan klik **Publikasikan ke titik akhir**.

1. Ketik pesan teks di kotak teks dan klik **Publikasikan pesan** untuk mempublikasikan pesan.