بدء استخدام مراكز الإشعارات باستخدام Baidu

Baidu cloud push هي خدمة سحابية صينية يمكنك استخدامها لإرسال إشعارات الدفع إلى الأجهزة المحمولة.

نظرا لأن Google Play و FCM (Firebase Cloud Messaging) غير متوفرين في الصين ، فمن الضروري استخدام متاجر تطبيقات مختلفة وخدمات الدفع. Baidu هي واحدة منها ، وهي المستخدمة حاليا من قبل Notification Hub.

المتطلبات الأساسية

يتطلب هذا البرنامج التعليمي:

ملاحظة

لكي يتم إكمال هذا البرنامج التعليمي، يجب أن يكون لديك حساب Azure نشط. إذا لم يكن لديك حساب، يمكنك إنشاء حساب تجريبي مجاني في غضون دقيقتين فقط. لمزيد من التفاصيل، راجع Azure Free Trial.

لتبدأ، قم بما يلي:

  1. إنشاء حساب بايدو.
  2. قم بإنشاء مشروع دفع سحابي من Baidu ، وقم بتدوين مفتاح API والمفتاح السري.

تكوين مركز إعلام جديد

  1. تسجيل الدخول إلى ⁧⁩مدخل Azure⁧⁩.

  2. حدد كافة الخدمات في القائمة اليمنى، ثم حدد لوحات وصل الإعلام في المقطع الجوال. حدد رمز النجمة بجوار اسم الخدمة لإضافة الخدمة إلى قسم FAVORITES في القائمة اليمنى. بعد إضافة مراكز الإعلام إلى المفضلة، حددها على يسار القائمة.

    Azure portal - select Notification Hubs

  3. في صفحة مراكز الإعلام حدد إنشاء على شريط الأدوات.

    Notification Hubs - Add toolbar button

  4. في علامة التبويب أساسيات في صفحة مركز الإعلام، بادر باتخاذ الخطوات التالية:

    1. في الاشتراك، حدد اسم اشتراك Azure الذي تريد استخدامه، ثم حدد مجموعة موارد موجودة، أو أنشئ واحداً جديداً.

    2. أدخل اسماً فريداً لمساحة الاسم الجديدة في تفاصيل مساحة الاسم.

    3. تحتوي مساحة الاسم على مركز إعلام واحد أو أكثر، لذا اكتب اسم المركز في تفاصيل مركز الإعلام. أو حدد مساحة اسم موجودة من القائمة المنسدلة.

    4. حدد قيمة من القائمة المنسدلة الموقع. تحدد هذه القيمة الموقع الذي تريد إنشاء المحور فيه.

    5. حدد Create.

      Azure portal - set notification hub properties

  5. حدد الإعلامات (رمز الجرس)، ثم حدد الانتقال إلى المورد. يمكنك أيضًا تحديث القائمة في صفحة مراكز الإعلام وتحديد لوحة الوصل.

    Azure portal - go to resource

  6. حدد نهج الوصول من القائمة. لاحظ أن سلسلتي الاتصال متوفرتان لك. ستحتاج إليها لاحقًا للتعامل مع الإشعارات الفورية.

    هام

    لا يجب استخدام نهج DefaultFullSharedAccessSignature في تطبيقك. هذا مقصود أن تستخدم في الطرف الخلفي الخاص بك فقط.

    Azure portal - notification hub connection strings

  6. في مركز الإشعارات الخاص بك ، حدد خدمات الإشعارات ثم Baidu (Android China).

    Azure Notification Hubs - Baidu

  7. مرر لأسفل إلى قسم إعدادات إشعارات بايدو. أدخل مفتاح واجهة برمجة التطبيقات والمفتاح السري الذي حصلت عليه من وحدة تحكم Baidu، في مشروع دفع سحابة Baidu. ثم انقر على Save.

    Azure Notification Hubs - Baidu Secrets

تم الآن تكوين مركز الإشعارات للعمل مع Baidu. لديك أيضا سلاسل الاتصال لتسجيل تطبيقك لإرسال واستقبال إشعارات الدفع.

قم بتدوين DefaultListenSharedAccessSignature نافذة معلومات اتصال Access ومنها DefaultFullSharedAccessSignature .

قم بإيصال تطبيقك بمركز الإعلامات

  1. في Android Studio ، قم بإنشاء مشروع Android جديد (ملف > جديد > Project).

    Azure Notification Hubs - Baidu New Project

  2. أدخل اسم تطبيق وتأكد من تعيين الحد الأدنى المطلوب لإصدار SDK إلى API 16: Android 4.1. يرجى أيضا التأكد من أن اسم الحزمة الخاص بك (应用包名) هو نفسه كما هو الحال في بوابة Baidu Cloud Push Portal

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

  3. انقر فوق التالي وتابع اتباع المعالج حتى تظهر نافذة إنشاء نشاط. تأكد من تحديد النشاط الفارغ، وأخيرا حدد إنهاء لإنشاء تطبيق Android جديد.

    Azure Notification Hubs - Baidu Add Activity

  4. تأكد من تعيين هدف إنشاء Project بشكل صحيح.

  5. ثم أضف مكتبات مراكز إعلام Azure. في Build.Gradle ملف التطبيق، أضف الأسطر التالية في قسم التبعيات.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
    

    إضافة المستودع التالي بعد قسم التبعيات.

    repositories {
        maven {
            url "https://dl.bintray.com/microsoftazuremobile/SDK"
        }
    }
    

    لتجنب تعارض القائمة، قم بإضافة التعليمة البرمجية التالية في ملف المشروع Manifest.xml :

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

    وفي العلامة <application/> :

    <application
        tools:replace="android:allowBackup,icon,theme,label">
    
  6. قم بتنزيل Baidu Push Android SDK وفك ضغطه. انسخ الملف في pushservice-x.y.z jar المجلد libs. ثم انسخ الملفات الموجودة .sosrc/main/jniLibs في مجلدات (إنشاء مجلد جديد) من تطبيق Android الخاص بك.

    Azure Notification Hubs - Baidu SDK Libs

  7. في مجلد المشروع ، انقر بزر libs الماوس الأيمن فوق pushervice-x.y.z.jar الملف ؛ حدد إضافة كمكتبة لتضمين هذه المكتبة في المشروع.

    Azure Notification Hubs - Baidu Add As A Library

  8. افتح ملف مشروع AndroidManifest.xml Android وأضف الأذونات التي تتطلبها Baidu SDK. استبدل باسم الحزمة YOURPACKAGENAME الخاصة بك.

    <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. أضف التكوين التالي داخل عنصر التطبيق بعد عنصر النشاط .MainActivity ، ليحل محل اسم المشروع الخاص بك (على سبيل المثال، 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. إضافة فئة جديدة تم استدعاؤها ConfigurationSettings.java إلى المشروع.

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

    قم بتعيين قيمة API_KEY السلسلة باستخدام API_KEY من Project Baidu Cloud.

    قم بتعيين قيمة NotificationHubName السلسلة باسم مركز الإعلام الخاص بك من مدخل Azure؛ ثم NotificationHubConnectionString باستخدام DefaultListenSharedAccessSignature من مدخل Azure.

  11. افتح MainActivity.java ثم أضف ما يلي إلى الأسلوب onCreate:

    PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY,  API_KEY );
    
  12. إضافة فئة جديدة تسمى MyPushMessageReceiver.java، وإضافة التعليمة البرمجية التالية إليها. إنها الفئة التي تتعامل مع إشعارات الدفع التي يتم تلقيها من خادم الدفع 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 ");
            }
        }
    }
    

إرسال إشعارات إلى تطبيقك

يمكنك اختبار تلقي الإعلامات بسرعة من مدخل Azure: استخدم الزر إرسال في شاشة تكوين مركز الإشعارات، كما هو موضح في الشاشات التالية:

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.

عادة ما يتم إرسال إشعارات الدفع في خدمة خلفية مثل خدمات الجوال أو ASP.NET باستخدام مكتبة متوافقة. إذا لم تكن المكتبة متوفرة للواجهة الخلفية، فيمكنك استخدام واجهة برمجة تطبيقات REST مباشرة لإرسال رسائل إعلام.

للبساطة ، يستخدم هذا البرنامج التعليمي تطبيق وحدة تحكم كعرض توضيحي حول كيفية إرسال إشعار باستخدام .NET SDK. ومع ذلك ، نوصي باستخدام مراكز الإشعارات لدفع الإشعارات إلى المستخدمين البرنامج التعليمي كخطوة تالية لإرسال الإشعارات من الواجهة الخلفية ASP.NET.

فيما يلي طرق مختلفة لإرسال الإشعارات:

  • واجهة REST: يمكنك دعم الإشعار على أي نظام أساسي خلفي باستخدام واجهة REST.
  • Microsoft Azure Notification Hubs .NET SDK: في مدير الحِزَم Nuget Visual Studio، قم بتشغيل Install-Package Microsoft.Azure.NotificationHubs.
  • Node.js: كيفية استخدام مراكز الإشعارات من Node.js.
  • تطبيقات الجوال: للحصول على مثال حول كيفية إرسال إشعارات من الواجهة الخلفية لتطبيقات الجوال لخدمة تطبيقات تطبيقات Azure App المدمجة مع مراكز الإشعارات، راجع إضافة إشعارات فورية إلى تطبيق الجوال.
  • Java / PHP: للحصول على مثال على كيفية إرسال الإشعارات باستخدام واجهات برمجة تطبيقات REST ، راجع "كيفية استخدام مراكز الإشعارات من Java / PHP" (JavaPHP | ).

(اختياري) إرسال إعلامات من تطبيق وحدة تحكم .NET.

في هذا القسم، نعرض إرسال إشعار باستخدام تطبيق وحدة تحكم .NET.

  1. إنشاء تطبيق وحدة تحكم Visual C# جديد:

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

  2. في الإطار مدير الحِزَم وحدة التحكم، قم بتعيين المشروع الافتراضي إلى مشروع تطبيق وحدة التحكم الجديدة، ثم في إطار وحدة التحكم، قم بتنفيذ الأمر التالي:

    Install-Package Microsoft.Azure.NotificationHubs
    

    تضيف هذه التعليمات مرجعا إلى حزمة SDK لمراكز إعلام Azure باستخدام حزمة Microsoft.Azure.Notification Hubs NuGet.

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

  3. افتح الملف Program.cs وأضف ما يلي باستخدام العبارة:

    using Microsoft.Azure.NotificationHubs;
    
  4. في صفك Program ، أضف الطريقة التالية واستبدل DefaultFullSharedAccessSignatureSASConnectionStringNotificationHubName بالقيم التي لديك.

    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. أضف الأسطر التالية في طريقتك Main :

    SendNotificationAsync();
    Console.ReadLine();
    

اختبار التطبيق الخاص بك

لاختبار هذا التطبيق باستخدام هاتف فعلي ، ما عليك سوى توصيل الهاتف بجهاز الكمبيوتر الخاص بك باستخدام كبل USB. يقوم هذا الإجراء بتحميل تطبيقك على الهاتف المرفق.

لاختبار هذا التطبيق باستخدام المحاكي، على شريط الأدوات العلوي في Android Studio، انقر فوق تشغيل، ثم حدد تطبيقك: يبدأ تشغيل المحاكي ويقوم بتحميله وتشغيله.

يقوم التطبيق باسترداد userIdchannelId ومن خدمة إشعارات Baidu Push ويسجل في مركز الإشعارات.

لإرسال إعلام اختبار، يمكنك استخدام علامة تبويب تصحيح الأخطاء في مدخل Azure. إذا قمت بإنشاء تطبيق وحدة تحكم .NET Visual Studio، فما عليك سوى الضغط على المفتاح F5 في Visual Studio لتشغيل التطبيق. يرسل التطبيق إشعارا يظهر في منطقة الإعلام العلوية من جهازك أو المحاكي.