Mulai menggunakan Notification Hubs menggunakan Baidu
Baidu cloud push adalah layanan cloud Tiongkok yang bisa Anda gunakan untuk mengirim notifikasi push ke perangkat seluler.
Karena Google Play dan FCM (Firebase Cloud Messaging) tidak tersedia di Cina, perlu menggunakan toko aplikasi dan layanan push yang berbeda. Baidu adalah salah satunya, dan saat ini juga digunakan oleh Notification Hub.
Prasyarat
Tutorial ini membutuhkan:
- Android SDK (kami berasumsi bahwa Anda menggunakan Android Studio), yang dapat Anda unduh dari situs Android
- Baidu Push Android SDK
Catatan
Untuk menyelesaikan tutorial ini, Anda harus memiliki akun Azure yang aktif. Jika Anda tidak memiliki akun, Anda dapat membuat akun uji coba gratis hanya dalam beberapa menit. Untuk detailnya, lihat Uji Coba Gratis Azure.
Untuk memulai, lakukan hal berikut ini:
- Buat akun Baidu.
- Buat proyek cloud push Baidu, dan catat kunci API dan kunci rahasia.
Mengonfigurasi hub pemberitahuan baru
Masuk ke portal Azure.
Pilih Semua layanan di menu sebelah kiri.
Ketik Notification Hubs di kotak teks Layanan filter. Pilih ikon bintang di samping nama layanan untuk menambahkan layanan ke bagian FAVORITE di menu sebelah kiri. Pilih Notification Hubs.
Pada halaman Notification Hubs, pilih Tambahkan pada toolbar.
Pada tab Dasar di halaman Notification Hub, lakukan langkah berikut ini:
Di Langganan, pilih nama langganan Azure yang ingin Anda gunakan, lalu pilih grup sumber daya yang sudah ada, atau buat yang baru.
Masukkan nama unik untuk namespace baru di Detail Namespace.
Namespace berisi satu atau beberapa hub pemberitahuan, jadi ketikkan nama untuk hub di Detail Hub Pemberitahuan.
Pilih nilai dari kotak daftar drop-down Lokasi. Nilai ini menentukan lokasi tempat Anda ingin membuat hub.
Tinjau opsi Zona Ketersediaan. Jika Anda memilih wilayah yang memiliki zona ketersediaan, kotak centang dipilih secara default. Zona Ketersediaan adalah fitur berbayar, sehingga biaya tambahan ditambahkan ke tingkat Anda.
Pilih opsi Pemulihan bencana: Tidak ada, wilayah pemulihan berpasangan, atau wilayah pemulihan Fleksibel. Jika Anda memilih Wilayah pemulihan berpasangan, wilayah failover akan ditampilkan. Jika Anda memilih Wilayah pemulihan fleksibel, gunakan menu drop-down untuk memilih dari daftar wilayah pemulihan.
Pilih Buat.
Saat penyebaran selesai, pilih Buka sumber daya.
6. Di hub pemberitahuan Anda, pilih Notification Services lalu Baidu (Android China).
7. Gulir ke bawah ke bagian pengaturan pemberitahuan Baidu. Masukkan kunci API dan kunci rahasia yang Anda peroleh dari konsol Baidu, di proyek cloud push Baidu. Kemudian, klik Simpan.
Hub notifikasi Anda sekarang dikonfigurasi untuk bekerja dengan Baidu. Anda juga memiliki string koneksi untuk mendaftarkan aplikasi Anda guna mengirim dan menerima notifikasi push.
Buat catatan dari DefaultListenSharedAccessSignature
dan DefaultFullSharedAccessSignature
dari jendela informasi koneksi Access.
Menyambungkan aplikasi Anda ke hub pemberitahuan
Di Android Studio, buat proyek Android baru (File > Baru > Proyek Baru).
Masukkan Nama Aplikasi dan pastikan bahwa versi SDK Minimum yang Diperlukan diatur ke API 16: Android 4.1. Pastikan juga nama paket Anda (应用包名) sama seperti di Portal Push Cloud Baidu
Klik Berikutnya dan lanjutkan mengikuti wizard hingga jendela Buat Aktivitas muncul. Pastikan Aktivitas Kosong dipilih, dan akhirnya pilih Selesai untuk membuat Aplikasi Android baru.
Pastikan Target Build Proyek diatur dengan benar.
Lalu tambahkan pustaka Microsoft Azure Notification Hubs. Di file
Build.Gradle
untuk aplikasi, tambahkan baris berikut di bagian dependensi.implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar' implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
Tambahkan repositori berikut setelah bagian dependensi.
repositories { maven { url "https://dl.bintray.com/microsoftazuremobile/SDK" } }
Untuk menghindari konflik Daftar, tambahkan kode berikut dalam file
Manifest.xml
proyek:<manifest package="YOUR.PACKAGE.NAME" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
dan dalam tag
<application/>
:<application tools:replace="android:allowBackup,icon,theme,label">
Unduh dan ekstrak Baidu Push Android SDK. Salin file
pushservice-x.y.z jar
di folder libs. Lalu salin file.so
disrc/main/jniLibs
(buat folder baru) folder aplikasi Android Anda.Di folder
libs
proyek, klik kanan pada filepushervice-x.y.z.jar
; pilih Tambahkan sebagai Pustaka untuk menyertakan pustaka ini dalam proyek.Buka file project Android
AndroidManifest.xml
lalu tambahkan izin yang diperlukan oleh Baidu SDK. GantiYOURPACKAGENAME
dengan nama paket Anda.<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" /> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> !! <uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YOURPACKAGENAME" /> !!<permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YOURPACKAGENAME" android:protectionLevel="normal" />
Tambahkan konfigurasi berikut dalam elemen aplikasi setelah elemen aktivitas
.MainActivity
, mengganti yourprojectname (misalnya,com.example.BaiduTest
):<activity android:name="com.baidu.android.pushservice.richmedia.MediaViewActivity" android:configChanges="orientation|keyboardHidden" android:label="MediaViewActivity" /> <activity android:name="com.baidu.android.pushservice.richmedia.MediaListActivity" android:configChanges="orientation|keyboardHidden" android:label="MediaListActivity" android:launchMode="singleTask" /> <!-- Push application definition message --> <receiver android:name=".MyPushMessageReceiver"> <intent-filter> <!-- receive push message--> <action android:name="com.baidu.android.pushservice.action.MESSAGE" /> <!-- receive bind,unbind,fetch,delete.. message--> <action android:name="com.baidu.android.pushservice.action.RECEIVE" /> <action android:name="com.baidu.android.pushservice.action.notification.CLICK" /> </intent-filter> </receiver> <receiver android:name="com.baidu.android.pushservice.PushServiceReceiver" android:process=":bdservice_v1"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="com.baidu.android.pushservice.action.notification.SHOW" /> <action android:name="com.baidu.android.pushservice.action.media.CLICK" /> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver> <receiver android:name="com.baidu.android.pushservice.RegistrationReceiver" android:process=":bdservice_v1"> <intent-filter> <action android:name="com.baidu.android.pushservice.action.METHOD" /> <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver> <service android:name="com.baidu.android.pushservice.PushService" android:exported="true" android:process=":bdservice_v1"> <intent-filter> <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" /> </intent-filter> </service> <service android:name="com.baidu.android.pushservice.CommandService" android:exported="true" /> <!-- Adapt the ContentProvider declaration required for the Android N system, and the write permissions include the application package name--> <provider android:name="com.baidu.android.pushservice.PushInfoProvider" android:authorities="com.baidu.push.example.bdpush" android:exported="true" android:protectionLevel="signature" android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER. yourprojectname " /> <!-- API Key of the Baidu application --> <meta-data android:name="api_key" !! android:value="api_key" /> </application>
Tambahkan kelas baru yang disebut
ConfigurationSettings.java
ke proyek.public class ConfigurationSettings { public static String API_KEY = "..."; public static String NotificationHubName = "..."; public static String NotificationHubConnectionString = "..."; }
Tetapkan nilai string
API_KEY
dengan API_KEY dari Proyek Cloud Baidu.Atur nilai
NotificationHubName
string dengan nama hub pemberitahuan Anda dari portal Azure laluNotificationHubConnectionString
denganDefaultListenSharedAccessSignature
dari portal Azure.Buka MainActivity.java, dan tambahkan yang berikut ini ke metode onCreate:
PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY, API_KEY );
Tambahkan kelas baru yang dipanggil
MyPushMessageReceiver.java
, lalu tambahkan kode berikut ke dalamnya. Ini adalah kelas yang menangani notifikasi push yang diterima dari server push Baidu.package your.package.name; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.text.TextUtils; import android.util.Log; import com.baidu.android.pushservice.PushMessageReceiver; import com.microsoft.windowsazure.messaging.NotificationHub; import org.json.JSONException; import org.json.JSONObject; import java.util.List; public class MyPushMessageReceiver extends PushMessageReceiver { public static final String TAG = MyPushMessageReceiver.class .getSimpleName(); public static NotificationHub hub = null; public static String mChannelId, mUserId; @Override public void onBind(Context context, int errorCode, String appid, String userId, String channelId, String requestId) { String responseString = "onBind errorCode=" + errorCode + " appid=" + appid + " userId=" + userId + " channelId=" + channelId + " requestId=" + requestId; Log.d(TAG, responseString); if (errorCode == 0) { // Binding successful Log.d(TAG, " Binding successful"); } try { if (hub == null) { hub = new NotificationHub( ConfigurationSettings.NotificationHubName, ConfigurationSettings.NotificationHubConnectionString, context); Log.i(TAG, "Notification hub initialized"); } } catch (Exception e) { Log.e(TAG, e.getMessage()); } mChannelId = channelId; mUserId = userId; registerWithNotificationHubs(); } private void registerWithNotificationHubs() { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { hub.registerBaidu(mUserId, mChannelId); Log.i(TAG, "Registered with Notification Hub - '" + ConfigurationSettings.NotificationHubName + "'" + " with UserId - '" + mUserId + "' and Channel Id - '" + mChannelId + "'"); } catch (Exception e) { Log.e(TAG, e.getMessage()); } return null; } }.execute(null, null, null); } @Override public void onMessage(Context context, String message, String customContentString) { String messageString = " onMessage=\"" + message + "\" customContentString=" + customContentString; Log.d(TAG, messageString); if (!TextUtils.isEmpty(customContentString)) { JSONObject customJson = null; try { customJson = new JSONObject(customContentString); String myvalue = null; if (!customJson.isNull("mykey")) { myvalue = customJson.getString("mykey"); } } catch (JSONException e) { e.printStackTrace(); } } } @Override public void onNotificationArrived(Context context, String title, String description, String customContentString) { String notifyString = " Notice Arrives onNotificationArrived title=\"" + title + "\" description=\"" + description + "\" customContent=" + customContentString; Log.d(TAG, notifyString); if (!TextUtils.isEmpty(customContentString)) { JSONObject customJson = null; try { customJson = new JSONObject(customContentString); String myvalue = null; if (!customJson.isNull("mykey")) { myvalue = customJson.getString("mykey"); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void onNotificationClicked(Context context, String title, String description, String customContentString) { String notifyString = " onNotificationClicked title=\"" + title + "\" description=\"" + description + "\" customContent=" + customContentString; Log.d(TAG, notifyString); Intent intent = new Intent(context.getApplicationContext(),MainActivity.class); intent.putExtra("title",title); intent.putExtra("description",description); intent.putExtra("isFromNotify",true); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.getApplicationContext().startActivity(intent); } @Override public void onSetTags(Context context, int errorCode, List<String> successTags, List<String> failTags, String requestId) { String responseString = "onSetTags errorCode=" + errorCode + " successTags=" + successTags + " failTags=" + failTags + " requestId=" + requestId; Log.d(TAG, responseString); } @Override public void onDelTags(Context context, int errorCode, List<String> successTags, List<String> failTags, String requestId) { String responseString = "onDelTags errorCode=" + errorCode + " successTags=" + successTags + " failTags=" + failTags + " requestId=" + requestId; Log.d(TAG, responseString); } @Override public void onListTags(Context context, int errorCode, List<String> tags, String requestId) { String responseString = "onListTags errorCode=" + errorCode + " tags=" + tags; Log.d(TAG, responseString); } @Override public void onUnbind(Context context, int errorCode, String requestId) { String responseString = "onUnbind errorCode=" + errorCode + " requestId = " + requestId; Log.d(TAG, responseString); if (errorCode == 0) { // Unbinding is successful Log.d(TAG, " Unbinding is successful "); } } }
Mengirim notifikasi ke aplikasi Anda
Anda dapat dengan cepat menguji pemberitahuan penerimaan dari portal Azure melalui tombol Kirim di layar konfigurasi hub pemberitahuan, seperti yang ditunjukkan pada layar berikut:
Notifikasi push biasanya dikirim dalam layanan back-end seperti Layanan Seluler atau ASP.NET menggunakan pustaka yang kompatibel. Jika pustaka tidak tersedia untuk back-end, Anda dapat menggunakan REST API secara langsung untuk mengirim pesan notifikasi.
Untuk kemudahan, tutorial ini menggunakan aplikasi konsol sebagai demonstrasi tentang cara mengirim notifikasi dengan .NET SDK. Namun, kami merekomendasikan tutorial Gunakan Notification Hubs untuk mendorong notifikasi ke pengguna sebagai langkah berikutnya untuk mengirim notifikasi dari ASP.NET backend.
Berikut adalah berbagai pendekatan untuk mengirim notifikasi:
- Antarmuka REST: Anda dapat mendukung pemberitahuan pada platform backend mana pun menggunakan antarmuka REST.
- Microsoft Azure Notification Hubs .NET SDK: Di Manajer Paket Nuget untuk Visual Studio, jalankan Install-Package Microsoft.Azure.NotificationHubs.
- Node.js: Cara menggunakan Notification Hubs dari Node.js.
- Aplikasi Seluler: Untuk contoh cara mengirim notifikasi dari backend Azure App Service Mobile Apps yang terintegrasi dengan Notification Hubs, lihat Menambahkan notifikasi push ke aplikasi seluler Anda.
- Java / PHP: Untuk contoh cara mengirim notifikasi dengan menggunakan API REST, lihat "Cara menggunakan Microsoft Azure Notification Hubs dari Java/PHP" (Java | PHP).
(Opsional) Kirim notifikasi dari aplikasi konsol .NET.
Di bagian ini, kami menampilkan pengiriman notifikasi menggunakan aplikasi konsol .NET.
Buat aplikasi konsol Visual C# baru:
Pada jendela Konsol Package Manager, atur Proyek default ke project aplikasi konsol baru Anda, lalu di jendela konsol, jalankan perintah berikut:
Install-Package Microsoft.Azure.NotificationHubs
Instruksi ini menambahkan referensi ke SDK Microsoft Azure Notification Hubs menggunakan paket Microsoft.Azure.Notification Hubs NuGet.
Buka file
Program.cs
dan tambahkan pernyataan penggunaan berikut ini:using Microsoft.Azure.NotificationHubs;
Di kelas
Program
Anda, tambahkan metode berikut dan gantiDefaultFullSharedAccessSignatureSASConnectionString
danNotificationHubName
dengan nilai yang Anda miliki.private static async void SendNotificationAsync() { NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("DefaultFullSharedAccessSignatureSASConnectionString", "NotificationHubName"); string message = "{\"title\":\"((Notification title))\",\"description\":\"Hello from Azure\"}"; var result = await hub.SendBaiduNativeNotificationAsync(message); }
Tambahkan baris berikut pada metode
Main
Anda:SendNotificationAsync(); Console.ReadLine();
Menguji aplikasi Anda
Untuk menguji aplikasi ini dengan ponsel yang sebenarnya, sambungkan ponsel ke komputer Anda dengan menggunakan kabel USB. Tindakan ini memuat aplikasi Anda ke ponsel yang terpasang.
Untuk menguji aplikasi ini dengan emulator, di toolbar atas Android Studio, klik Jalankan, lalu pilih aplikasi Anda: aplikasi tersebut memulai emulator, memuat, lalu eksekusi aplikasi.
Aplikasi ini mengambil userId
dan channelId
dari layanan notifikasi Baidu Push dan mendaftar dengan hub notifikasi.
Untuk mengirim notifikasi tes, Anda dapat menggunakan tab debug portal Microsoft Azure. Jika Anda membuat aplikasi konsol .NET untuk Visual Studio, cukup tekan tombol F5 di Visual Studio untuk menjalankan aplikasi. Aplikasi mengirimkan notifikasi yang muncul pada area notifikasi atas dadi perangkat atau emulator Anda.