AWS Mobile SDK for Xamarin sekarang disertakan dalam AWS SDK for .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)
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
Prasyarat
Anda harus menyelesaikan semua instruksi yang ada di Menyiapkan AWS Mobile SDK for .NET and Xamarin sebelum memulai tutorial ini.
Mengatur Izin untuk SNS
Ikuti Langkah 2 yang ada di Menyiapkan AWS Mobile SDK for .NET and Xamarin untuk melampirkan kebijakan yang disebutkan di bawah ini ke peran aplikasi Anda. Hal ini akan memberikan aplikasi Anda izin yang tepat untuk mengakses SNS:
-
Buka Konsol IAM
dan pilih IAM role yang akan dikonfigurasi. -
KlikLampirkan Kebijakan, pilih AmazonSNSFullAccesskebijakan dan klikLampirkan Kebijakan.
Awas
Menggunakan AmazonSNSFullAccesstidak dianjurkan dalam 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.
Aktifkan Notifikasi Push pada Google Cloud
Pertama, tambahkan proyek Google API baru:
-
Buka Konsol Developer Google
. -
Klik Buat Proyek.
-
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:
-
Di Konsol Developer Google
, proyek baru Anda seharusnya sudah dipilih. Jika tidak, pilih di drop-down yang ada di bagian atas halaman. -
Pilih API & auth dari bilah samping di sisi kiri halaman.
-
Di kotak pencarian, ketik “Google Cloud Messaging untuk Android” dan klik tautan Google Cloud Messaging untuk Android.
-
Klik Aktifkan API.
Akhirnya, dapatkan Kunci API:
-
Di Konsol Developer Google, pilih API & auth > Kredensial.
-
Di bawah Akses API Publik, klik Buat kunci baru.
-
Pada dialog Buat kunci baru, klik Kunci server.
-
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
-
Buka Konsol SNS
. -
Klik Aplikasi di sisi kiri layar.
-
Klik Buat aplikasi platform untuk membuat aplikasi platform SNS baru.
-
Masukkan Nama Aplikasi.
-
Pilih Google Cloud Messaging (GCM) untuk Platform notifikasi push.
-
Tempelkan kunci API ke dalam kotak teks berlabel Kunci API.
-
Klik Buat aplikasi platform.
-
Pilih Aplikasi Platform yang baru saja Anda buat dan salin ARN Aplikasi-nya.
TambahkanNuGetPaket SNS untuk Proyek Anda
Ikuti Langkah 4 dari petunjuk diMenyiapkan AWS Mobile SDK for .NET and Xamarinuntuk menambahkan Amazon Simple Notification ServiceNuGetpaket untuk proyek Anda.
Buat klien SNS
var snsClient = new AmazonSimpleNotificationServiceClient(credentials, region);
Daftarkan Aplikasi Anda untuk Notifikasi Jarak Jauh
Untuk mendaftar notifikasi jarak jauh di Android, Anda harus membuatBroadcastReceiveryang 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); } }
Berikut adalah layanan yang menerima notifikasi push dariBroadcastReceiverdan menampilkan notifikasi pada bar 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
-
Buka Konsol SNS > Aplikasi
. -
Pilih aplikasi platform Anda, pilih titik akhir, dan klik Publikasikan ke titik akhir.
-
Ketik pesan teks di kotak teks dan klik Publikasikan pesan untuk mempublikasikan pesan.