بدء استخدام مراكز الإشعارات باستخدام Baidu
Baidu cloud push هي خدمة سحابية صينية يمكنك استخدامها لإرسال إشعارات الدفع إلى الأجهزة المحمولة.
نظرا لأن Google Play و FCM (Firebase Cloud Messaging) غير متوفرين في الصين ، فمن الضروري استخدام متاجر تطبيقات مختلفة وخدمات الدفع. Baidu هي واحدة منها ، وهي المستخدمة حاليا من قبل Notification Hub.
المتطلبات الأساسية
يتطلب هذا البرنامج التعليمي:
- Android SDK (نفترض أنك تستخدم Android Studio) ، والذي يمكنك تنزيله من موقع Android
- بايدو دفع الروبوت SDK
ملاحظة
لكي يتم إكمال هذا البرنامج التعليمي، يجب أن يكون لديك حساب Azure نشط. إذا لم يكن لديك حساب، يمكنك إنشاء حساب تجريبي مجاني في غضون دقيقتين فقط. لمزيد من التفاصيل، راجع Azure Free Trial.
لتبدأ، قم بما يلي:
- إنشاء حساب بايدو.
- قم بإنشاء مشروع دفع سحابي من Baidu ، وقم بتدوين مفتاح API والمفتاح السري.
تكوين مركز إعلام جديد
تسجيل الدخول إلى مدخل Azure.
حدد كافة الخدمات في القائمة اليمنى، ثم حدد لوحات وصل الإعلام في المقطع الجوال. حدد رمز النجمة بجوار اسم الخدمة لإضافة الخدمة إلى قسم FAVORITES في القائمة اليمنى. بعد إضافة مراكز الإعلام إلى المفضلة، حددها على يسار القائمة.

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

في علامة التبويب أساسيات في صفحة مركز الإعلام، بادر باتخاذ الخطوات التالية:
في الاشتراك، حدد اسم اشتراك Azure الذي تريد استخدامه، ثم حدد مجموعة موارد موجودة، أو أنشئ واحداً جديداً.
أدخل اسماً فريداً لمساحة الاسم الجديدة في تفاصيل مساحة الاسم.
تحتوي مساحة الاسم على مركز إعلام واحد أو أكثر، لذا اكتب اسم المركز في تفاصيل مركز الإعلام. أو حدد مساحة اسم موجودة من القائمة المنسدلة.
حدد قيمة من القائمة المنسدلة الموقع. تحدد هذه القيمة الموقع الذي تريد إنشاء المحور فيه.
حدد Create.

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

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

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

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

تم الآن تكوين مركز الإشعارات للعمل مع Baidu. لديك أيضا سلاسل الاتصال لتسجيل تطبيقك لإرسال واستقبال إشعارات الدفع.
قم بتدوين DefaultListenSharedAccessSignature نافذة معلومات اتصال Access ومنها DefaultFullSharedAccessSignature .
قم بإيصال تطبيقك بمركز الإعلامات
في Android Studio ، قم بإنشاء مشروع Android جديد (ملف > جديد > Project).

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


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

تأكد من تعيين هدف إنشاء Project بشكل صحيح.
ثم أضف مكتبات مراكز إعلام 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">قم بتنزيل Baidu Push Android SDK وفك ضغطه. انسخ الملف في
pushservice-x.y.z jarالمجلد libs. ثم انسخ الملفات الموجودة.sosrc/main/jniLibsفي مجلدات (إنشاء مجلد جديد) من تطبيق Android الخاص بك.
في مجلد المشروع ، انقر بزر
libsالماوس الأيمن فوقpushervice-x.y.z.jarالملف ؛ حدد إضافة كمكتبة لتضمين هذه المكتبة في المشروع.
افتح ملف مشروع
AndroidManifest.xmlAndroid وأضف الأذونات التي تتطلبها 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" />أضف التكوين التالي داخل عنصر التطبيق بعد عنصر النشاط
.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>إضافة فئة جديدة تم استدعاؤها
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.افتح MainActivity.java ثم أضف ما يلي إلى الأسلوب onCreate:
PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY, API_KEY );إضافة فئة جديدة تسمى
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: استخدم الزر إرسال في شاشة تكوين مركز الإشعارات، كما هو موضح في الشاشات التالية:


عادة ما يتم إرسال إشعارات الدفع في خدمة خلفية مثل خدمات الجوال أو 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.
إنشاء تطبيق وحدة تحكم Visual C# جديد:

في الإطار مدير الحِزَم وحدة التحكم، قم بتعيين المشروع الافتراضي إلى مشروع تطبيق وحدة التحكم الجديدة، ثم في إطار وحدة التحكم، قم بتنفيذ الأمر التالي:
Install-Package Microsoft.Azure.NotificationHubsتضيف هذه التعليمات مرجعا إلى حزمة SDK لمراكز إعلام Azure باستخدام حزمة Microsoft.Azure.Notification Hubs NuGet.

افتح الملف
Program.csوأضف ما يلي باستخدام العبارة:using Microsoft.Azure.NotificationHubs;في صفك
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); }أضف الأسطر التالية في طريقتك
Main:SendNotificationAsync(); Console.ReadLine();
اختبار التطبيق الخاص بك
لاختبار هذا التطبيق باستخدام هاتف فعلي ، ما عليك سوى توصيل الهاتف بجهاز الكمبيوتر الخاص بك باستخدام كبل USB. يقوم هذا الإجراء بتحميل تطبيقك على الهاتف المرفق.
لاختبار هذا التطبيق باستخدام المحاكي، على شريط الأدوات العلوي في Android Studio، انقر فوق تشغيل، ثم حدد تطبيقك: يبدأ تشغيل المحاكي ويقوم بتحميله وتشغيله.
يقوم التطبيق باسترداد userIdchannelId ومن خدمة إشعارات Baidu Push ويسجل في مركز الإشعارات.
لإرسال إعلام اختبار، يمكنك استخدام علامة تبويب تصحيح الأخطاء في مدخل Azure. إذا قمت بإنشاء تطبيق وحدة تحكم .NET Visual Studio، فما عليك سوى الضغط على المفتاح F5 في Visual Studio لتشغيل التطبيق. يرسل التطبيق إشعارا يظهر في منطقة الإعلام العلوية من جهازك أو المحاكي.