ملاحظة
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
Baidu cloud push هي خدمة سحابية صينية يمكنك استخدامها لإرسال إعلامات الدفع إلى الأجهزة المحمولة.
نظرا لأن Google Play وFCM (Firebase Cloud Messaging) غير متوفرين في الصين، فمن الضروري استخدام متاجر تطبيقات وخدمات دفع مختلفة. Baidu هو واحد منهم، والأخرى المستخدمة حاليا من قبل مركز الإعلامات.
المتطلبات الأساسية
يتطلب هذا البرنامج التعليمي:
- Android SDK (نفترض أنك تستخدم Android Studio)، والذي يمكنك تنزيله من موقع Android
- Baidu Push Android SDK
إشعار
لكي يتم إكمال هذا البرنامج التعليمي، يجب أن يكون لديك حساب Azure نشط. إذا لم يكن لديك حساب، يمكنك إنشاء حساب تجريبي مجاني في غضون دقيقتين فقط. لمزيد من التفاصيل، راجع Azure Free Trial.
لتبدأ، قم بما يلي:
- إنشاء حساب Baidu.
- قم بإنشاء مشروع دفع سحابة Baidu، وقم بتدوين مفتاح API والمفتاح السري.
تكوين مركز إعلامات جديد
قم بتسجيل الدخول إلى بوابة Azure.
حدد كل الخدمات في القائمة اليسرى.
اكتب Notification Hubs في مربع النص Filter services . حدد رمز النجمة بجوار اسم الخدمة لإضافة الخدمة إلى قسم FAVORITES في القائمة اليمنى. حدد مراكز الإعلامات.
في صفحة مراكز الإعلام حدد إنشاء على شريط الأدوات.
في علامة التبويب أساسيات في صفحة مركز الإعلام، بادر باتخاذ الخطوات التالية:
في الاشتراك، حدد اسم اشتراك Azure الذي تريد استخدامه، ثم حدد مجموعة موارد موجودة، أو أنشئ واحداً جديداً.
أدخل اسماً فريداً لمساحة الاسم الجديدة في تفاصيل مساحة الاسم.
تحتوي مساحة الاسم على مركز إعلام واحد أو أكثر، لذا اكتب اسم المركز في تفاصيل مركز الإعلام.
حدد قيمة من القائمة المنسدلة الموقع. تحدد هذه القيمة الموقع الذي تريد إنشاء المحور فيه.
راجع خيار مناطق التوفر. إذا اخترت منطقة تحتوي على مناطق توفر، يتم تحديد خانة الاختيار بشكل افتراضي. مناطق التوفر هي ميزة مدفوعة، لذلك تتم إضافة رسوم إضافية إلى المستوى الخاص بك.
اختر خيار التعافي من الكوارث: لا شيء أو منطقة استرداد مقترنة أو منطقة استرداد مرنة. إذا اخترت منطقة الاسترداد المقترنة، يتم عرض منطقة تجاوز الفشل. إذا حددت منطقة استرداد مرنة، فاستخدم القائمة المنسدلة للاختيار من قائمة مناطق الاسترداد.
حدد إنشاء.
عند اكتمال النشر، حدد Go to resource.
6. في مركز الإعلامات، حدد خدمات الإعلامات ثم Baidu (Android الصين).
7. قم بالتمرير لأسفل وصولا إلى قسم إعدادات إعلام Baidu. أدخل مفتاح API والمفتاح السري الذي حصلت عليه من وحدة تحكم Baidu، في مشروع Baidu cloud push. ثم انقر على حفظ.
تم الآن تكوين مركز الإعلام الخاص بك للعمل مع Baidu. لديك أيضا سلاسل الاتصال لتسجيل التطبيق الخاص بك لإرسال وتلقي إشعارات الدفع.
دون ملاحظة عن DefaultListenSharedAccessSignature
و DefaultFullSharedAccessSignature
من نافذة معلومات اتصال الوصول.
توصيل تطبيقك بمركز الإشعارات
في استوديو Android، قم بإنشاء مشروع Android جديد (ملف > مشروع جديد > ).
أدخل اسم التطبيق وتأكد من تعيين إصدار SDK المطلوب الأدنى إلى API 16: Android 4.1. يرجى أيضا التأكد من أن اسم الحزمة (应用包名) هو نفسه كما هو الحال في Baidu Cloud Push Portal
انقر فوق التالي وتابع متابعة المعالج حتى تظهر نافذة إنشاء نشاط. تأكد من تحديد نشاط فارغ، وأخيرا حدد إنهاء لإنشاء تطبيق Android جديد.
تأكد من تعيين Project Build Target بشكل صحيح.
ثم أضف مكتبات 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">
قم بتنزيل وفك ضغط Baidu Push Android SDK. انسخ
pushservice-x.y.z jar
الملف في مجلد libs. ثم انسخ.so
الملفات فيsrc/main/jniLibs
مجلدات (إنشاء مجلد جديد) لتطبيق Android الخاص بك.في مجلد المشروع
libs
، انقر بزر الماوس الأيمنpushervice-x.y.z.jar
فوق الملف؛ وحدد إضافة كمكتبة لتضمين هذه المكتبة في المشروع.افتح ملف مشروع
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" />
أضف التكوين التالي داخل عنصر التطبيق بعد
.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>
إضافة فئة جديدة تسمى
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.افتح MainActivity.java، وأضف ما يلي إلى أسلوب onCreate:
PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY, API_KEY );
أضف فئة جديدة تسمى
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 عبر الزر إرسال في شاشة تكوين مركز الإعلام، كما هو موضح في الشاشات التالية:
عادةً ما يتم إرسال الإشعارات الفورية في خدمة خلفية مثل Mobile Services أو ASP.NET من خلال استخدام مكتبة متوافقة. إذا لم تكن المكتبة متاحة للواجهة الخلفية الخاصة بك، فيمكنك أيضًا استخدام واجهة برمجة تطبيقات REST مباشرةً لإرسال رسائل التنبيه.
للتبسيط، يستخدم هذا البرنامج التعليمي تطبيق وحدة تحكم كعرض توضيحي حول كيفية إرسال إعلام باستخدام .NET SDK. ومع ذلك، نوصي باستخدام Notification Hubs لدفع الإعلامات إلى البرنامج التعليمي للمستخدمين كخطوة تالية لإرسال الإعلامات من خلفية ASP.NET.
فيما يلي نهج مختلفة لإرسال الإعلامات:
- واجهة REST: يمكنك دعم الإعلام على أي نظام أساسي للواجهة الخلفية باستخدام واجهة REST.
- Microsoft Azure Notification Hubs .NET SDK: في Nuget Package Manager for Visual Studio، قم بتشغيل Install-Package Microsoft.Azure.NotificationHubs.
- Node.js: كيفية استخدام محاور إعلام من Node.js.
- تطبيقات الجوال:للحصول على مثال عن كيفية إرسال إشعارات من خلفية تطبيقات الجوال لخدمة تطبيقات Azure التي تم دمجها مع مراكز الإشعارات، راجع إضافة إشعارات دفع إلى تطبيق الجوال الخاص بك.
- Java / PHP: للحصول على مثال حول كيفية إرسال الإعلامات باستخدام واجهات برمجة تطبيقات REST، راجع "كيفية استخدام محاور إعلام من Java/PHP" (Java | PHP).
(اختياري) إرسال إعلامات من تطبيق وحدة تحكم .NET.
في هذا القسم، نعرض إرسال إعلام باستخدام تطبيق وحدة تحكم .NET.
إنشاء تطبيق وحدة تحكم Visual C# جديد:
في نافذة Package Manager Console، قم بتعيين المشروع الافتراضي إلى مشروع تطبيق وحدة التحكم الجديد، ثم في نافذة وحدة التحكم، قم بتنفيذ الأمر التالي:
Install-Package Microsoft.Azure.NotificationHubs
يضيف هذا الإجراء مرجعاً إلى SDK مراكز إشعار Azure باستخدام حزمة Microsoft.Azure.Notification Hubs NuGet.
افتح الملف
Program.cs
ثم قم بإضافة ما يلي باستخدام العبارة:using Microsoft.Azure.NotificationHubs;
في الفئة الخاصة بك
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); }
أضف الأسطر التالية في الأسلوب الخاص بك
Main
:SendNotificationAsync(); Console.ReadLine();
اختبر تطبيقك
لاختبار هذا التطبيق باستخدام هاتف فعلي، ما عليك سوى توصيل الهاتف بالكمبيوتر باستخدام كبل USB. يقوم هذا الإجراء بتحميل تطبيقك على الهاتف المرفق.
لاختبار هذا التطبيق باستخدام المحاكي، على شريط الأدوات العلوي ل Android Studio، انقر فوق تشغيل، ثم حدد تطبيقك: يبدأ تشغيل المحاكي ويحمل التطبيق ويشغله.
يسترد userId
التطبيق و channelId
من خدمة إعلامات Baidu Push ويسجل مع محاور الإعلامات.
لإرسال إعلام اختبار، يمكنك استخدام علامة تبويب تتبع الأخطاء في مدخل Microsoft Azure. إذا قمت بإنشاء تطبيق وحدة تحكم .NET ل Visual Studio، فما عليك سوى الضغط على المفتاح F5 في Visual Studio لتشغيل التطبيق. يرسل التطبيق إعلامًا يظهر في منطقة الإعلام العلوية لجهازك أو المحاكي.