Bagikan melalui


Mulai menggunakan Notification Hubs menggunakan Baidu

Layanan cloud Baidu adalah layanan cloud Tiongkok yang dapat Anda gunakan untuk mengirim notifikasi push ke perangkat seluler.

Karena Google Play dan FCM (Firebase Cloud Messaging) tidak tersedia di Tiongkok, Anda perlu menggunakan penyimpanan aplikasi dan layanan push yang berbeda. Baidu adalah salah satunya, dan yang saat ini digunakan oleh Notification Hub.

Prasyarat

Tutorial ini memerlukan:

Nota

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 pendorongan cloud 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. Cuplikan layar memperlihatkan pilih Semua Layanan untuk namespace yang sudah ada.

  3. Ketik Notification Hubs di kotak teks Filter services. Pilih ikon bintang di samping nama layanan untuk menambahkan layanan ke bagian FAVORITE di menu sebelah kiri. Pilih Notification Hubs.

    Cuplikan layar memperlihatkan cara memfilter hub pemberitahuan.

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

    Cuplikan layar memperlihatkan cara membuat hub pemberitahuan baru.

  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.

      Cuplikan layar memperlihatkan detail hub pemberitahuan.

    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 yang berpasangan, wilayah failover akan ditampilkan. Jika Anda memilih Wilayah pemulihan fleksibel, gunakan menu drop-down untuk memilih dari daftar wilayah pemulihan.

      Cuplikan layar memperlihatkan detail zona ketersediaan.

    7. Pilih Buat.

  6. Saat penyebaran selesai, pilih Masuk ke sumber daya.

  6. Di hub pemberitahuan Anda, pilih Layanan Pemberitahuan lalu Baidu (Android Tiongkok).

     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 Baidu Cloud Push. Lalu klik Simpan.

     Azure Notification Hubs - Rahasia Baidu

Hub pemberitahuan Anda sekarang dikonfigurasi untuk bekerja dengan Baidu. Anda juga memiliki string koneksi untuk mendaftarkan aplikasi Anda agar dapat mengirim dan menerima pemberitahuan push.

Make a note of the DefaultListenSharedAccessSignature and DefaultFullSharedAccessSignature from the Access connection information window.

Menyambungkan aplikasi Anda ke hub pemberitahuan

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

    Azure Notification Hubs - Proyek Baru Baidu

  2. Masukkan Nama Aplikasi dan pastikan bahwa versi Minimum Required SDK diatur ke API 16: Android 4.1. Pastikan juga nama paket Anda (应用包名) sama seperti di Portal Push Cloud Baidu

    Azure Notification Hubs - Baidu Min SDK1 Azure Notification Hubs - Baidu Min SDK2

  3. Klik Berikutnya dan lanjutkan mengikuti panduan 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. Make sure that the Project Build Target is set correctly.

  5. Then add Azure Notification Hubs libraries. Build.Gradle Dalam file 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 proyek Manifest.xml :

    <manifest package="YOUR.PACKAGE.NAME"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    

    and in the <application/> tag:

    <application
        tools:replace="android:allowBackup,icon,theme,label">
    
  6. Unduh dan buka zip Baidu Push Android SDK. Copy the pushservice-x.y.z jar file in the libs folder. Kemudian salin .so file di src/main/jniLibs folder (buat folder baru) aplikasi Android Anda.

    Azure Notification Hubs - Baidu SDK Libs

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

    Azure Notification Hubs - Baidu Add As A Library

  8. Buka file proyek AndroidManifest.xml Android dan 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 .MainActivity elemen aktivitas, ganti nama proyek Anda (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 dipanggil ConfigurationSettings.java ke proyek.

    public class ConfigurationSettings {
        public static String API_KEY = "...";
        public static String NotificationHubName = "...";
        public static String NotificationHubConnectionString = "...";
    }
    

    Atur nilai API_KEY string dengan API_KEY dari Baidu Cloud Project.

    Atur nilai NotificationHubName string dengan nama hub pemberitahuan Anda dari portal Microsoft Azure lalu NotificationHubConnectionString dengan DefaultListenSharedAccessSignature dari portal Microsoft 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 disebut MyPushMessageReceiver.java, dan tambahkan kode berikut ke dalamnya. Ini adalah kelas yang menangani pemberitahuan 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 pemberitahuan ke aplikasi Anda

Anda dapat dengan cepat menguji pemberitahuan penerimaan dari portal Microsoft Azure melalui tombol Kirim di layar konfigurasi hub pemberitahuan, seperti yang ditunjukkan pada layar berikut:

Cuplikan layar Portal Azure dengan opsi Uji Kirim dilingkari warna merah dan panah merah menunjuk ke opsi tersebut. Cuplikan layar ke halaman Uji Kirim Baidu di portal Azure.

Pemberitahuan 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, Anda dapat menggunakan REST API secara langsung untuk mengirim pesan pemberitahuan.

Untuk kesederhanaan, tutorial ini menggunakan aplikasi konsol sebagai demonstrasi tentang cara mengirim pemberitahuan dengan .NET SDK. Namun, kami merekomendasikan tutorial Menggunakan Notification Hubs untuk mendorong pemberitahuan kepada pengguna sebagai langkah berikutnya untuk mengirim pemberitahuan dari backend ASP.NET.

Berikut adalah pendekatan yang berbeda untuk mengirim pemberitahuan:

(Opsional) Kirim pemberitahuan dari aplikasi konsol .NET.

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

  1. Buat aplikasi konsol Visual C# baru:

    Cuplikan layar kotak dialog Proyek Baru dengan opsi Visual C# Aplikasi Konsol disorot.

  2. Di jendela Package Manager Console, atur proyek Default ke proyek aplikasi konsol baru Anda, lalu di jendela konsol, jalankan perintah berikut:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Instruksi ini menambahkan referensi ke Azure Notification Hubs SDK menggunakan paket NuGet Microsoft.Azure.Notification Hubs.

    Cuplikan layar kotak dialog Konsol Manajer Paket dengan opsi Kirim Ke Notification Hub dilingkari dengan warna merah.

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

    using Microsoft.Azure.NotificationHubs;
    
  4. Di kelas Anda Program , 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 dalam metode Anda Main :

    SendNotificationAsync();
    Console.ReadLine();
    

Menguji aplikasi Anda

Untuk menguji aplikasi ini dengan ponsel aktual, cukup sambungkan ponsel ke komputer Anda dengan menggunakan kabel USB. Tindakan ini memuat aplikasi Anda ke ponsel yang terpasang.

Untuk menguji aplikasi ini dengan emulator, pada toolbar teratas Android Studio, klik Jalankan, lalu pilih aplikasi Anda: aplikasi memulai emulator, memuat, dan menjalankan aplikasi.

Aplikasi ini mengambil userId dan channelId dari layanan pemberitahuan Baidu Push dan mendaftar dengan hub pemberitahuan.

Untuk mengirim pemberitahuan pengujian, 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 pemberitahuan yang muncul di area pemberitahuan teratas perangkat atau emulator Anda.