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:

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:

  1. Buat akun Baidu.
  2. Buat proyek cloud push Baidu, dan catat kunci API dan kunci rahasia.

Mengonfigurasi hub pemberitahuan baru

  1. Masuk ke portal Azure.

  2. Pilih Semua layanan di menu sebelah kiri. A screenshot showing select All Services for an existing namespace.

  3. 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.

    A screenshot showing how to filter for notification hubs.

  4. Pada halaman Notification Hubs, pilih Tambahkan pada toolbar.

    A screenshot showing how to create a new notification hub.

  5. Pada tab Dasar di halaman Notification Hub, lakukan langkah berikut ini:

    1. Di Langganan, pilih nama langganan Azure yang ingin Anda gunakan, lalu pilih grup sumber daya yang sudah ada, atau buat yang baru.

    2. Masukkan nama unik untuk namespace baru di Detail Namespace.

    3. Namespace berisi satu atau beberapa hub pemberitahuan, jadi ketikkan nama untuk hub di Detail Hub Pemberitahuan.

    4. Pilih nilai dari kotak daftar drop-down Lokasi. Nilai ini menentukan lokasi tempat Anda ingin membuat hub.

      Screenshot showing notification hub details.

    5. 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.

    6. 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.

      Screenshot showing availability zone details.

    7. Pilih Buat.

  6. Saat penyebaran selesai, pilih Buka sumber daya.

  6. Di hub pemberitahuan Anda, pilih Notification Services lalu Baidu (Android China).

    Azure Notification Hubs - Baidu

  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.

    Azure Notification Hubs - Baidu Secrets

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

  1. Di Android Studio, buat proyek Android baru (File > Baru > Proyek Baru).

    Azure Notification Hubs - Baidu New Project

  2. 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

    Azure Notification Hubs - Baidu Min SDK1Azure Notification Hubs - Baidu Min SDK2

  3. Klik Berikutnya dan lanjutkan mengikuti wizard hingga jendela Buat Aktivitas muncul. Pastikan Aktivitas Kosong dipilih, dan akhirnya pilih Selesai untuk membuat Aplikasi Android baru.

    Azure Notification Hubs - Baidu Add Activity

  4. Pastikan Target Build Proyek diatur dengan benar.

  5. 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">
    
  6. Unduh dan ekstrak Baidu Push Android SDK. Salin file pushservice-x.y.z jar di folder libs. Lalu salin file .so di src/main/jniLibs (buat folder baru) folder aplikasi Android Anda.

    Azure Notification Hubs - Baidu SDK Libs

  7. Di folder libs proyek, klik kanan pada filepushervice-x.y.z.jar; pilih Tambahkan sebagai Pustaka untuk menyertakan pustaka ini dalam proyek.

    Azure Notification Hubs - Baidu Add As A Library

  8. Buka file project Android AndroidManifest.xml lalu tambahkan izin yang diperlukan oleh Baidu SDK. Ganti YOURPACKAGENAME 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" />
    
    
  9. 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>
    
  10. 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 lalu NotificationHubConnectionString dengan DefaultListenSharedAccessSignature dari portal Azure.

  11. Buka MainActivity.java, dan tambahkan yang berikut ini ke metode onCreate:

    PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY,  API_KEY );
    
  12. 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:

Screenshot of the Azure Portal with the Test Send option outlined in red and a red arrow pointing to it.Screenshot to the Baidu Test Send page in the Azure portal.

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:

(Opsional) Kirim notifikasi dari aplikasi konsol .NET.

Di bagian ini, kami menampilkan pengiriman notifikasi menggunakan aplikasi konsol .NET.

  1. Buat aplikasi konsol Visual C# baru:

    Screenshot of the New Project dialog box with the Console Application Visual C# option highlighted.

  2. 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.

    Screenshot of the Package Manager Console dialog box with the Send To Notification Hub option circled in red.

  3. Buka file Program.cs dan tambahkan pernyataan penggunaan berikut ini:

    using Microsoft.Azure.NotificationHubs;
    
  4. Di kelas Program Anda, tambahkan metode berikut dan ganti DefaultFullSharedAccessSignatureSASConnectionString dan NotificationHubName 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);
    }
    
  5. 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.