مشاركة عبر


البدء باستخدام محاور الإعلام باستخدام Baidu

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

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

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

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

إشعار

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

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

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

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

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. حدد كل الخدمات في القائمة اليسرى. A screenshot showing select All Services for an existing namespace.

  3. اكتب Notification Hubs في مربع النص Filter services . حدد رمز النجمة بجوار اسم الخدمة لإضافة الخدمة إلى قسم FAVORITES في القائمة اليمنى. حدد مراكز الإعلامات.

    A screenshot showing how to filter for notification hubs.

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

    A screenshot showing how to create a new notification hub.

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

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

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

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

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

      Screenshot showing notification hub details.

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

    6. اختر خيار التعافي من الكوارث: لا شيء أو منطقة استرداد مقترنة أو منطقة استرداد مرنة. إذا اخترت منطقة الاسترداد المقترنة، يتم عرض منطقة تجاوز الفشل. إذا حددت منطقة استرداد مرنة، فاستخدم القائمة المنسدلة للاختيار من قائمة مناطق الاسترداد.

      Screenshot showing availability zone details.

    7. حدد إنشاء.

  6. عند اكتمال النشر، حدد Go to resource.

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

    Azure Notification Hubs - Baidu

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

    Azure Notification Hubs - Baidu Secrets

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

دون ملاحظة عن DefaultListenSharedAccessSignature و DefaultFullSharedAccessSignature من نافذة معلومات اتصال الوصول.

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

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

    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 Build Target بشكل صحيح.

  5. ثم أضف مكتبات Azure Notification Hubs. في 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. ثم انسخ .soالملفات في src/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 عنصر النشاط، واستبدل yourprojectname (على سبيل المثال، 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 من مشروع Baidu Cloud.

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

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

    PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY,  API_KEY );
    
  12. أضف فئة جديدة تسمى MyPushMessageReceiver.java، وأضف التعليمات البرمجية التالية إليها. إنها الفئة التي تتعامل مع الإعلامات المنبثقة التي يتم تلقيها من خادمBaidu push.

    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 ");
            }
        }
    }
    

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

يمكنك اختبار تلقي الإعلامات بسرعة من مدخل Microsoft 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.

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

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

فيما يلي نهج مختلفة لإرسال الإعلامات:

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

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

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

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

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

    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، أضف الأسلوب التالي واستبدل DefaultFullSharedAccessSignatureSASConnectionString و NotificationHubName بالقيم التي لديك.

    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، انقر فوق تشغيل، ثم حدد تطبيقك: يبدأ تشغيل المحاكي ويحمل التطبيق ويشغله.

يسترد userId التطبيق و channelId من خدمة إعلامات Baidu Push ويسجل مع محاور الإعلامات.

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