Tutorial: Mengirim pemberitahuan ke perangkat tertentu menggunakan Notification Hubs dan Google Firebase Cloud Messaging
Gambaran Umum
Penting
Pada Juni 2024, API warisan FCM tidak akan lagi didukung dan akan dihentikan. Untuk menghindari gangguan dalam layanan pemberitahuan push, Anda harus bermigrasi ke protokol FCM v1 sesegera mungkin.
Tutorial ini menunjukkan cara menggunakan Microsoft Azure Notification Hubs untuk menyiarkan pemberitahuan berita terkini ke aplikasi Android. Setelah selesai, Anda dapat mendaftar untuk kategori berita terkini yang Anda minati, dan hanya menerima pemberitahuan push untuk kategori tersebut. Skenario ini merupakan pola umum yang digunakan berbagai aplikasi di mana pemberitahuan harus dikirim ke grup pengguna yang sebelumnya telah menyatakan minat mereka, seperti, pembaca RSS, aplikasi untuk penggemar musik, dll.
Skenario siaran aktif dengan menyertakan satu atau beberapa tag saat membuat pendaftaran di hub pemberitahuan. Ketika pemberitahuan dikirim ke tag, semua perangkat yang terdaftar untuk tag menerima pemberitahuan. Karena tag hanya berupa untai (karakter), tag tidak harus diprovisikan terlebih dahulu. Untuk informasi selengkapnya tentang tag, lihat Perutean dan Ekspresi Tag Notification Hubs.
Dalam tutorial ini, Anda akan melakukan tindakan berikut:
- Menambahkan pilihan kategori ke aplikasi ponsel.
- Mendaftar untuk pemberitahuan dengan tag.
- Mengirim pemberitahuan dengan tag.
- Menguji aplikasi
Prasyarat
Tutorial ini dibangun pada aplikasi yang Anda buat di Tutorial: Pemberitahuan push ke perangkat Android dengan menggunakan Azure Notification Hubs dan Firebase Cloud Messaging. Sebelum memulai tutorial ini, lengkapi Tutorial: Pemberitahuan push ke perangkat Android dengan menggunakan Azure Notification Hubs dan Firebase Cloud Messaging.
Menambahkan pilihan kategori ke aplikasi
Langkah pertama adalah menambahkan elemen UI ke aktivitas utama Anda yang sudah ada yang memungkinkan pengguna untuk memilih kategori untuk mendaftar. Kategori yang dipilih oleh pengguna disimpan di perangkat. Saat aplikasi dimulai, aplikasi akan membuat pendaftaran perangkat di pemberitahuan hub Anda dengan kategori yang dipilih sebagai tag.
Buka
res/layout/activity_main.xml file
, dan ganti konten tersebut dengan berikut ini:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.breakingnews.MainActivity" android:orientation="vertical"> <CheckBox android:id="@+id/worldBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_world" /> <CheckBox android:id="@+id/politicsBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_politics" /> <CheckBox android:id="@+id/businessBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_business" /> <CheckBox android:id="@+id/technologyBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_technology" /> <CheckBox android:id="@+id/scienceBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_science" /> <CheckBox android:id="@+id/sportsBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_sports" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="subscribe" android:text="@string/button_subscribe" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:id="@+id/text_hello" /> </LinearLayout>
Buka file
res/values/strings.xml
dan tambahkan baris berikut:<string name="button_subscribe">Subscribe</string> <string name="label_world">World</string> <string name="label_politics">Politics</string> <string name="label_business">Business</string> <string name="label_technology">Technology</string> <string name="label_science">Science</string> <string name="label_sports">Sports</string>
Tata letak grafis
main_activity.xml
Anda akan terlihat seperti pada gambar berikut:Buat kelas
Notifications
dalam paket yang sama dengan kelasMainActivity
Anda.import java.util.HashSet; import java.util.Set; import java.util.concurrent.TimeUnit; import android.content.Context; import android.content.SharedPreferences; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.iid.InstanceIdResult; import com.microsoft.windowsazure.messaging.NotificationHub; public class Notifications { private static final String PREFS_NAME = "BreakingNewsCategories"; private FirebaseInstanceId fcm; private NotificationHub hub; private Context context; private String senderId; public static String FCM_token = ""; private static final String TAG = "Notifications"; public Notifications(Context context, String hubName, String listenConnectionString) { this.context = context; this.senderId = senderId; fcm = FirebaseInstanceId.getInstance(); hub = new NotificationHub(hubName, listenConnectionString, context); } public void storeCategoriesAndSubscribe(Set<String> categories) { SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); settings.edit().putStringSet("categories", categories).commit(); subscribeToCategories(categories); } public Set<String> retrieveCategories() { SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); return settings.getStringSet("categories", new HashSet<String>()); } public void subscribeToCategories(final Set<String> categories) { new AsyncTask<Object, Object, Object>() { @Override protected Object doInBackground(Object... params) { try { FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() { @Override public void onSuccess(InstanceIdResult instanceIdResult) { FCM_token = instanceIdResult.getToken(); Log.d(TAG, "FCM Registration Token: " + FCM_token); } }); TimeUnit.SECONDS.sleep(1); String templateBodyFCM = "{\"data\":{\"message\":\"$(messageParam)\"}}"; hub.registerTemplate(FCM_token,"simpleFCMTemplate", templateBodyFCM, categories.toArray(new String[categories.size()])); } catch (Exception e) { Log.e("MainActivity", "Failed to register - " + e.getMessage()); return e; } return null; } protected void onPostExecute(Object result) { String message = "Subscribed for categories: " + categories.toString(); Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } }.execute(null, null, null); } }
Kelas ini menggunakan penyimpanan lokal untuk menyimpan kategori berita yang harus diterima perangkat ini. Kelas ini juga berisi metode untuk mendaftar pada kategori ini.
Di kelas
MainActivity
Anda, tambahkan bidang untukNotifications
:private Notifications notifications;
Kemudian, perbarui metode
onCreate
seperti yang ditunjukkan dalam kode berikut. Anda mendaftar dengan Notification Hubs dalam metode subscribeToCategories dari kelas Pemberitahuan.@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainActivity = this; FirebaseService.createChannelAndHandleNotifications(getApplicationContext()); notifications = new Notifications(this, NotificationSettings.HubName, NotificationSettings.HubListenConnectionString); notifications.subscribeToCategories(notifications.retrieveCategories()); }
Pastikan bahwa nama hub dan string koneksi diatur dengan benar di kelas NotificationSettings.
Catatan
Karena info masuk yang didistribusikan dengan aplikasi klien biasanya tidak aman, sebaiknya Anda hanya mendistribusikan kunci untuk akses mendengarkan dengan aplikasi klien Anda. Akses mendengarkan memungkinkan aplikasi Anda untuk mendaftar pemberitahuan, namun pendaftaran yang sudah ada tidak dapat dimodifikasi, dan pemberitahuan tidak dapat dikirim. Kunci akses penuh digunakan dalam layanan ujung belakang yang aman untuk mengirim pemberitahuan dan mengubah pendaftaran yang sudah ada.
Kemudian, tambahkan impor berikut:
import android.widget.CheckBox; import java.util.HashSet; import java.util.Set; import android.view.View;
Tambahkan metode
subscribe
berikut untuk menangani kejadian klik tombol berlangganan:public void subscribe(View sender) { final Set<String> categories = new HashSet<String>(); CheckBox world = (CheckBox) findViewById(R.id.worldBox); if (world.isChecked()) categories.add("world"); CheckBox politics = (CheckBox) findViewById(R.id.politicsBox); if (politics.isChecked()) categories.add("politics"); CheckBox business = (CheckBox) findViewById(R.id.businessBox); if (business.isChecked()) categories.add("business"); CheckBox technology = (CheckBox) findViewById(R.id.technologyBox); if (technology.isChecked()) categories.add("technology"); CheckBox science = (CheckBox) findViewById(R.id.scienceBox); if (science.isChecked()) categories.add("science"); CheckBox sports = (CheckBox) findViewById(R.id.sportsBox); if (sports.isChecked()) categories.add("sports"); notifications.storeCategoriesAndSubscribe(categories); }
Metode ini membuat daftar kategori dan menggunakan kelas
Notifications
untuk menyimpan daftar di penyimpanan lokal dan mendaftarkan tag yang sesuai dengan hub notifikasi Anda. Ketika kategori diubah, pendaftaran dibuat ulang dengan kategori baru.
Aplikasi Anda sekarang dapat menyimpan set kategori di dalam penyimpanan lokal pada perangkat dan mendaftar dengan hub pemberitahuan setiap kali pengguna mengubah pilihan kategori.
Mendaftar untuk pemberitahuan
Langkah-langkah ini mendaftar dengan hub pemberitahuan pada saat mulai menggunakan kategori yang telah disimpan di penyimpanan lokal.
Konfirmasikan bahwa kode berikut ada di akhir metode
onCreate
di kelasMainActivity
:notifications.subscribeToCategories(notifications.retrieveCategories());
Kode ini memastikan bahwa setiap kali aplikasi dimulai, aplikasi mengambil kategori dari penyimpanan lokal dan meminta pendaftaran untuk kategori ini.
Kemudian perbarui metode
onStart()
kelasMainActivity
dengan cara sebagai berikut:@Override protected void onStart() { super.onStart(); isVisible = true; Set<String> categories = notifications.retrieveCategories(); CheckBox world = (CheckBox) findViewById(R.id.worldBox); world.setChecked(categories.contains("world")); CheckBox politics = (CheckBox) findViewById(R.id.politicsBox); politics.setChecked(categories.contains("politics")); CheckBox business = (CheckBox) findViewById(R.id.businessBox); business.setChecked(categories.contains("business")); CheckBox technology = (CheckBox) findViewById(R.id.technologyBox); technology.setChecked(categories.contains("technology")); CheckBox science = (CheckBox) findViewById(R.id.scienceBox); science.setChecked(categories.contains("science")); CheckBox sports = (CheckBox) findViewById(R.id.sportsBox); sports.setChecked(categories.contains("sports")); }
Kode ini memperbarui halaman utama berdasarkan status kategori yang disimpan sebelumnya.
Aplikasi Anda sekarang sudah lengkap dan dapat menyimpan set kategori di dalam penyimpanan lokal pada perangkat yang digunakan untuk mendaftar menggunakan hub pemberitahuan setiap kali pengguna mengubah pilihan kategori. Selanjutnya, tentukan backend yang dapat mengirim pemberitahuan kategori ke aplikasi ini.
Mengirim pemberitahuan bertag
Di bagian ini, Anda mengirim berita terbaru sebagai notifikasi templat bertag dari aplikasi konsol .NET.
Di Visual Studio, buat aplikasi konsol Visual Studio C# baru:
- Pada menu, pilih File>Baru>Proyek.
- Di Tambahkan proyek baru, pilih Aplikasi Konsol (.NET Framework) untuk C# di daftar templat, lalu pilih Berikutnya.
- Masukkan nama untuk aplikasi.
- Untuk Solusi, pilih Tambahkan ke solusi, dan pilih Buat untuk membuat proyek.
Pilih Alat>Pengelola Paket NuGet>Konsol Pengelola Paket lalu, di jendela konsol jalankan perintah berikut:
Install-Package Microsoft.Azure.NotificationHubs
Tindakan ini menambahkan referensi ke SDK Microsoft Azure Notification Hubs dengan menggunakan paket Microsoft.Azure.NotificationHubs.
Buka file program.cs, lalu tambahkan penyataan
using
berikut:using Microsoft.Azure.NotificationHubs;
Di kelas
Program
, tambahkan metode berikut atau ganti jika sudah ada:private static async void SendTemplateNotificationAsync() { // Define the notification hub. NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("<connection string with full access>", "<hub name>"); // Apple requires the apns-push-type header for all requests var headers = new Dictionary<string, string> {{"apns-push-type", "alert"}}; // Create an array of breaking news categories. var categories = new string[] { "World", "Politics", "Business", "Technology", "Science", "Sports"}; // Send the notification as a template notification. All template registrations that contain // "messageParam" and the proper tags will receive the notifications. // This includes APNS, GCM/FCM, WNS, and MPNS template registrations. Dictionary<string, string> templateParams = new Dictionary<string, string>(); foreach (var category in categories) { templateParams["messageParam"] = "Breaking " + category + " News!"; await hub.SendTemplateNotificationAsync(templateParams, category); } }
Kode ini mengirimkan pemberitahuan templat untuk masing-masing dari enam tag dalam array string. Penggunaan tag memastikan bahwa perangkat hanya menerima notifikasi untuk kategori yang terdaftar.
Di kode sebelumnya, ganti tempat penampung
<hub name>
dan<connection string with full access>
dengan nama hub notifikasi dan string koneksi untuk DefaultFullSharedAccessSignature dari dasbor hub notifikasi Anda.Dalam metode
Main()
, tambahkan baris berikut:SendTemplateNotificationAsync(); Console.ReadLine();
Membangun aplikasi konsol.
Menguji aplikasi
Di Android Studio, jalankan aplikasi di perangkat Android atau emulator Anda. UI aplikasi menyediakan serangkaian pengalih yang memungkinkan Anda untuk memilih kategori untuk berlangganan.
Aktifkan satu atau lebih pengalihan kategori, lalu klik Berlangganan. Aplikasi ini mengonversi kategori yang dipilih menjadi tag dan meminta pendaftaran perangkat baru untuk tag yang dipilih dari hub pemberitahuan. Kategori yang terdaftar dikembalikan dan ditampilkan dalam pemberitahuan toast.
Jalankan aplikasi konsol .NET, yang mengirimkan pemberitahuan untuk setiap kategori. Pemberitahuan untuk kategori yang dipilih muncul sebagai pemberitahuan toast.
Langkah berikutnya
Dalam tutorial ini, kirim pemberitahuan siaran ke perangkat Android tertentu yang telah mendaftar untuk kategori tersebut. Untuk mempelajari cara mengirim pemberitahuan push ke pengguna tertentu, lanjutkan ke tutorial berikut:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk