إضافة إعلامات دفع إلى تطبيق Xamarin.Forms
نظرة عامة
في هذا البرنامج التعليمي، يمكنك إضافة إعلامات دفع إلى جميع المشاريع التي نتجت عن البدء السريع Xamarin.Forms. وهذا يعني أنه يتم إرسال إعلام دفع إلى جميع العملاء عبر الأنظمة الأساسية في كل مرة يتم فيها إدراج سجل.
إذا لم تستخدم مشروع خادم البدء السريع الذي تم تنزيله، فستحتاج إلى حزمة ملحق الإعلامات المنبثقة. لمزيد من المعلومات، راجع العمل مع SDK لخادم الواجهة الخلفية .NET لتطبيقات Azure Mobile.
المتطلبات الأساسية
بالنسبة لنظام التشغيل iOS، ستحتاج إلى عضوية برنامج مطوري Apple وجهاز iOS فعلي. لا يدعم جهاز محاكاة iOS الإعلامات المنبثقة.
تكوين مركز إعلامات
تستخدم ميزة تطبيقات الأجهزة المحمولة في Azure App Service Azure Notification Hubs لإرسال الدفعات، لذلك ستقوم بتكوين مركز إعلام لتطبيق الأجهزة المحمولة الخاص بك.
في مدخل Microsoft Azure، انتقل إلى App Services، ثم حدد النهاية الخلفية للتطبيق. ضمن Settings، حدد Push.
لإضافة مورد مركز إعلام إلى التطبيق، حدد الاتصال. يمكنك إما إنشاء مركز أو الاتصال بمركز موجود.
لقد قمت الآن بتوصيل مركز إعلام بمشروع الواجهة الخلفية لتطبيقات الأجهزة المحمولة. يمكنك لاحقا تكوين مركز الإعلام هذا للاتصال بنظام إعلام النظام الأساسي (PNS) للدفع إلى الأجهزة.
تحديث مشروع الخادم لإرسال إعلامات مؤقتة
في هذا القسم، يمكنك تحديث التعليمات البرمجية في مشروعك الخلفي الحالي ل Mobile Apps لإرسال إعلام دفع في كل مرة تتم فيها إضافة عنصر جديد. يتم تشغيل هذه العملية بواسطة ميزة القالب في Azure Notification Hubs، والتي تمكن الدفعات عبر الأنظمة الأساسية. يتم تسجيل العملاء المتنوعين للإعلامات المؤقتة باستخدام القوالب، ويمكن أن يصل دفع عالمي واحد إلى جميع الأنظمة الأساسية للعميل.
اختر أحد الإجراءات التالية التي تطابق نوع المشروع الخلفي — إما الواجهة الخلفية ل .NET أو Node.js الخلفية.
مشروع .NET الخلفي
في Visual Studio، انقر بزر الماوس الأيمن فوق مشروع الخادم. ثم حدد إدارة حزم NuGet. ابحث
Microsoft.Azure.NotificationHubs
عن ، ثم حدد تثبيت. تثبت هذه العملية مكتبة Notification Hubs لإرسال الإعلامات من النهاية الخلفية.في مشروع الخادم، افتح Controllers>TodoItemController.cs. ثم أضف عبارات الاستخدام التالية:
using System.Collections.Generic; using Microsoft.Azure.NotificationHubs; using Microsoft.Azure.Mobile.Server.Config;
في أسلوب PostTodoItem ، أضف التعليمات البرمجية التالية بعد استدعاء InsertAsync:
// Get the settings for the server project. HttpConfiguration config = this.Configuration; MobileAppSettingsDictionary settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings(); // Get the Notification Hubs credentials for the mobile app. string notificationHubName = settings.NotificationHubName; string notificationHubConnection = settings .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString; // Create a new Notification Hub client. NotificationHubClient hub = NotificationHubClient .CreateClientFromConnectionString(notificationHubConnection, notificationHubName); // Send the message so that all template registrations that contain "messageParam" // receive the notifications. This includes APNS, GCM, WNS, and MPNS template registrations. Dictionary<string,string> templateParams = new Dictionary<string,string>(); templateParams["messageParam"] = item.Text + " was added to the list."; try { // Send the push notification and log the results. var result = await hub.SendTemplateNotificationAsync(templateParams); // Write the success result to the logs. config.Services.GetTraceWriter().Info(result.State.ToString()); } catch (System.Exception ex) { // Write the failure result to the logs. config.Services.GetTraceWriter() .Error(ex.Message, null, "Push.SendAsync Error"); }
ترسل هذه العملية إعلام قالب يحتوي على العنصر. نص عند إدراج عنصر جديد.
إعادة نشر مشروع الخادم.
Node.js مشروع خلفي
إعداد مشروع الواجهة الخلفية.
استبدل التعليمات البرمجية الموجودة في todoitem.js بالتعليمات البرمجية التالية:
var azureMobileApps = require('azure-mobile-apps'), promises = require('azure-mobile-apps/src/utilities/promises'), logger = require('azure-mobile-apps/src/logger'); var table = azureMobileApps.table(); table.insert(function (context) { // For more information about the Notification Hubs JavaScript SDK, // see https://aka.ms/nodejshubs. logger.info('Running TodoItem.insert'); // Define the template payload. var payload = '{"messageParam": "' + context.item.text + '" }'; // Execute the insert. The insert returns the results as a promise. // Do the push as a post-execute action within the promise flow. return context.execute() .then(function (results) { // Only do the push if configured. if (context.push) { // Send a template notification. context.push.send(null, payload, function (error) { if (error) { logger.error('Error while sending push notification: ', error); } else { logger.info('Push notification sent successfully!'); } }); } // Don't forget to return the results from the context.execute(). return results; }) .catch(function (error) { logger.error('Error while running context.execute: ', error); }); }); module.exports = table;
ترسل هذه العملية إعلام قالب يحتوي على item.text عند إدراج عنصر جديد.
عند تحرير الملف على الكمبيوتر المحلي، أعد نشر مشروع الخادم.
تكوين وتشغيل مشروع Android (اختياري)
أكمل هذا القسم لتمكين الإعلامات المنبثقة لمشروع Xamarin.Forms Droid لنظام Android.
تمكين Firebase Cloud Messaging (FCM)
تسجيل الدخول إلىوحدة تحكم Firebase. إنشاء مشروع Firebase جديد إذا لم يكن لديك بالفعل واحد.
بعد إنشاء المشروع حدد إضافة Firebase إلى تطبيق Android.
في صفحة إضافة مشروع Firebase إلى تطبيق Android، اتخذ الخطوات التالية:
للحصول على اسم حزمة الروبوت، نسخ قيمة التطبيق الخاص بك في ملف build.gradle التطبيق الخاص بك. في هذا المثال، هو
com.fabrikam.fcmtutorial1app
.حدد Register app.
حدد تنزيل google-services.json، ثم احفظ الملف في مجلد التطبيق الخاص بالمشروع، ثم حدد التالي.
قم بإجراء تغييرات التكوين التالية على مشروعك في Android Studio.
في ملف build.gradle مستوى المشروع < (مشروع > /build.gradle)، إضافة العبارة التالية إلى قسم التبعيات.
classpath 'com.google.gms:google-services:4.0.1'
في ملف build.gradle على مستوى التطبيق (<مشروع> /< app-module> /build.gradle)، أضف العبارات التالية إلى قسم التبعيات.
implementation 'com.google.firebase:firebase-core:16.0.8' implementation 'com.google.firebase:firebase-messaging:17.3.4'
إضافة السطر التالي إلى نهاية الملف build.gradle مستوى التطبيق بعد قسم التبعيات.
apply plugin: 'com.google.gms.google-services'
حدد أيقونة المزامنة الآن في شريط الأدوات.
حدد "Next".
حدد تخطي هذه الخطوة.
في وحدة تحكم Firebase حدد ترس للمشروع الخاص بك. ثم حدد إعدادات المشروع.
إذا لم تكن قد قمت بتنزيل الملف google-services.json إلى مجلد التطبيق لمشروع Android Studio، يمكنك القيام بذلك على هذه الصفحة.
انتقل إلى علامة التبويب Cloud Messaging في الأعلى.
انسخكلمة مرور الخادم واحفظه للاستخدام لاحقًا. يمكنك استخدام هذه القيمة لتكوين لوحة الوصل الخاصة بك.
تكوين الواجهة الخلفية لتطبيقات الأجهزة المحمولة لإرسال طلبات الدفع باستخدام FCM
- في مدخل Microsoft Azure، حدد Browse All>App Services. ثم حدد الواجهة الخلفية لتطبيقات الأجهزة المحمولة.
- ضمن Settings، حدد Push. ثم حدد Configure push notification services.
- انتقل إلى Google (GCM). أدخل مفتاح الخادم القديم FCM الذي حصلت عليه من وحدة تحكم Firebase، ثم حدد حفظ.
تم الآن تكوين خدمتك للعمل مع Firebase Cloud Messaging.
إضافة إعلامات مؤقتة إلى مشروع Android
مع تكوين النهاية الخلفية باستخدام FCM، يمكنك إضافة مكونات ورموز إلى العميل للتسجيل مع FCM. يمكنك أيضا التسجيل للحصول على إعلامات مؤقتة باستخدام Azure Notification Hubs من خلال الواجهة الخلفية لتطبيقات الأجهزة المحمولة، وتلقي الإعلامات.
- في مشروع Droid ، انقر بزر الماوس الأيمن > فوق المراجع إدارة حزم NuGet ....
- في نافذة NuGet Package Manager، ابحث عن حزمة Xamarin.Firebase.Messaging وأضفها إلى المشروع.
- في خصائص المشروع لمشروع Droid ، اضبط التطبيق على التحويل البرمجي باستخدام إصدار Android 7.0 أو أعلى.
- أضف ملف google-services.json ، الذي تم تنزيله من وحدة تحكم Firebase، إلى جذر مشروع Droid وقم بتعيين إجراء البناء الخاص به إلى GoogleServicesJson. لمزيد من المعلومات، راجع إضافة ملف JSON لخدمات Google.
التسجيل في Firebase Cloud Messaging
افتح ملف AndroidManifest.xml وأدرج العناصر التالية
<receiver>
في<application>
العنصر:<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" /> <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="${applicationId}" /> </intent-filter> </receiver>
تنفيذ خدمة معرف مثيل Firebase
أضف فئة جديدة إلى مشروع Droid المسمى
FirebaseRegistrationService
، وتأكد من وجود العبارات التاليةusing
في أعلى الملف:using System.Threading.Tasks; using Android.App; using Android.Util; using Firebase.Iid; using Microsoft.WindowsAzure.MobileServices;
استبدل الفئة الفارغة
FirebaseRegistrationService
بالتعليمات البرمجية التالية:[Service] [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })] public class FirebaseRegistrationService : FirebaseInstanceIdService { const string TAG = "FirebaseRegistrationService"; public override void OnTokenRefresh() { var refreshedToken = FirebaseInstanceId.Instance.Token; Log.Debug(TAG, "Refreshed token: " + refreshedToken); SendRegistrationTokenToAzureNotificationHub(refreshedToken); } void SendRegistrationTokenToAzureNotificationHub(string token) { // Update notification hub registration Task.Run(async () => { await AzureNotificationHubService.RegisterAsync(TodoItemManager.DefaultManager.CurrentClient.GetPush(), token); }); } }
FirebaseRegistrationService
الفئة مسؤولة عن إنشاء رموز الأمان المميزة التي تخول التطبيق للوصول إلى FCM.OnTokenRefresh
يتم استدعاء الأسلوب عندما يتلقى التطبيق رمز تسجيل مميز من FCM. يسترد الأسلوب الرمز المميز من الخاصيةFirebaseInstanceId.Instance.Token
، التي يتم تحديثها بشكل غير متزامن بواسطة FCM.OnTokenRefresh
يتم استدعاء الأسلوب بشكل غير متكرر، لأنه يتم تحديث الرمز المميز فقط عند تثبيت التطبيق أو إلغاء تثبيته، أو عندما يحذف المستخدم بيانات التطبيق، أو عندما يمسح التطبيق معرف المثيل، أو عند اختراق أمان الرمز المميز. بالإضافة إلى ذلك، ستطلب خدمة معرف مثيل FCM تحديث التطبيق للرمز المميز الخاص به بشكل دوري، عادة كل 6 أشهر.OnTokenRefresh
يستدعيSendRegistrationTokenToAzureNotificationHub
الأسلوب أيضا الأسلوب ، الذي يستخدم لإقران رمز تسجيل المستخدم المميز بمركز إعلام Azure.
التسجيل في Azure Notification Hub
أضف فئة جديدة إلى مشروع Droid المسمى
AzureNotificationHubService
، وتأكد من وجود العبارات التاليةusing
في أعلى الملف:using System; using System.Threading.Tasks; using Android.Util; using Microsoft.WindowsAzure.MobileServices; using Newtonsoft.Json.Linq;
استبدل الفئة الفارغة
AzureNotificationHubService
بالتعليمات البرمجية التالية:public class AzureNotificationHubService { const string TAG = "AzureNotificationHubService"; public static async Task RegisterAsync(Push push, string token) { try { const string templateBody = "{\"data\":{\"message\":\"$(messageParam)\"}}"; JObject templates = new JObject(); templates["genericMessage"] = new JObject { {"body", templateBody} }; await push.RegisterAsync(token, templates); Log.Info("Push Installation Id: ", push.InstallationId.ToString()); } catch (Exception ex) { Log.Error(TAG, "Could not register with Notification Hub: " + ex.Message); } } }
RegisterAsync
ينشئ الأسلوب قالب رسالة إعلام بسيطا ك JSON، ويسجل لتلقي إعلامات القالب من مركز الإعلامات، باستخدام الرمز المميز لتسجيل Firebase. يضمن هذا أن أي إعلامات يتم إرسالها من Azure Notification Hub ستستهدف الجهاز الذي يمثله رمز التسجيل المميز.
عرض محتويات الإعلام المنبثق
أضف فئة جديدة إلى مشروع Droid المسمى
FirebaseNotificationService
، وتأكد من وجود العبارات التاليةusing
في أعلى الملف:using Android.App; using Android.Content; using Android.Media; using Android.Support.V7.App; using Android.Util; using Firebase.Messaging;
استبدل الفئة الفارغة
FirebaseNotificationService
بالتعليمات البرمجية التالية:[Service] [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })] public class FirebaseNotificationService : FirebaseMessagingService { const string TAG = "FirebaseNotificationService"; public override void OnMessageReceived(RemoteMessage message) { Log.Debug(TAG, "From: " + message.From); // Pull message body out of the template var messageBody = message.Data["message"]; if (string.IsNullOrWhiteSpace(messageBody)) return; Log.Debug(TAG, "Notification message body: " + messageBody); SendNotification(messageBody); } void SendNotification(string messageBody) { var intent = new Intent(this, typeof(MainActivity)); intent.AddFlags(ActivityFlags.ClearTop); //Unique request code to avoid PendingIntent collision. var requestCode = new Random().Next(); var pendingIntent = PendingIntent.GetActivity(this, requestCode, intent, PendingIntentFlags.OneShot); var notificationBuilder = new NotificationCompat.Builder(this) .SetSmallIcon(Resource.Drawable.ic_stat_ic_notification) .SetContentTitle("New Todo Item") .SetContentText(messageBody) .SetContentIntent(pendingIntent) .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification)) .SetAutoCancel(true); var notificationManager = NotificationManager.FromContext(this); notificationManager.Notify(0, notificationBuilder.Build()); } }
الأسلوب
OnMessageReceived
، الذي يتم استدعاؤه عندما يتلقى تطبيق إعلاما من FCM، يستخرج محتوى الرسالة، ويستدعيSendNotification
الأسلوب . يحول هذا الأسلوب محتوى الرسالة إلى إعلام محلي يتم تشغيله أثناء تشغيل التطبيق، مع ظهور الإعلام في منطقة الإعلام.
الآن، أنت جاهز لإشعارات دفع الاختبار في التطبيق الذي يعمل على جهاز Android أو المحاكي.
اختبار الإعلامات المنبثقة في تطبيق Android
الخطوتان الأوليان مطلوبتان فقط عند الاختبار على محاكي.
- تأكد من أنك تقوم بالتوزيع أو تصحيح الأخطاء على جهاز أو محاكي تم تكوينه باستخدام خدمات Google Play. يمكن التحقق من ذلك عن طريق التحقق من تثبيت تطبيقات Play على الجهاز أو المحاكي.
- أضف حساب Google إلى جهاز Android بالنقر فوقإعدادات>التطبيقات>إضافة حساب. ثم اتبع المطالبات لإضافة حساب Google موجود إلى الجهاز، أو لإنشاء حساب جديد.
- في Visual Studio أو Xamarin Studio، انقر بزر الماوس الأيمن فوق مشروع Droid وانقر فوق تعيين كمشروع بدء تشغيل.
- انقر فوق تشغيل لإنشاء المشروع وبدء تشغيل التطبيق على جهاز Android أو المحاكي.
- في التطبيق، اكتب مهمة، ثم انقر فوق أيقونة علامة الجمع (+).
- تحقق من تلقي إعلام عند إضافة عنصر.
تكوين وتشغيل مشروع iOS (اختياري)
هذا القسم مخصص لتشغيل مشروع Xamarin iOS لأجهزة iOS. يمكنك تخطي هذا القسم إذا كنت لا تعمل مع أجهزة iOS.
إنشاء ملف طلب توقيع الشهادة
تستخدم خدمة Apple Push Notification (APNs) شهادات لمصادقة إعلامات الدفع. اتبع هذه الإرشادات لإنشاء شهادة الدفع الضرورية لإرسال الإشعارات وتلقيها. للحصول على مزيدٍ من المعلومات عن هذه المفاهيم، راجع وثائق خدمة Apple Push Notification الرسمية.
إنشاء ملف طلب توقيع الشهادة (CSR) الذي يستخدمه Apple لإنشاء شهادة دفع موقعة.
على جهاز Mac، قم بتشغيل أداة الوصول إلى سلسلة المفاتيح. يمكن فتحه من مجلد الأدوات المساعدة، أو المجلد الآخر على لوحة التشغيل.
حدد الوصول إلى سلسلة المفاتيح، ثم قم بتوسيع مساعد الشهادة، ثم حدد طلب شهادة من مرجع مصدق.
ملاحظة
بشكل افتراضي، يحدد Keychain Access العنصر الأول في القائمة. قد تكون هذه مشكلة إذا كنت في فئة الشهادات، ولم تكن هيئة إصدار شهادات علاقات المطور في Apple Worldwide العنصر الأول في القائمة. تأكد من وجود عنصر غير مفتاح، أو تحديد مفتاح "المرجع المصدق لعلاقات المطور" في Apple Worldwide قبل إنشاء طلب توقيع الشهادة (CSR).
حدد عنوان البريد الإلكتروني للمستخدم، وأدخل قيمة الاسم الشائع، وتأكد من تحديد حفظ على القرص، ثم حدد متابعة. اترك عنوان البريد الإلكتروني CA فارغًا؛ لأنه غير مطلوب.
أدخل اسمًا لملف CSR في حفظ باسم، وحدد الموقع في مكان، ثم حدد حفظ.
يحفظ هذا الإجراء ملف CSR في الموقع المحدد. الموقع الافتراضي هو سطح المكتب. تذكر الموقع الذي تم اختياره للملف.
بعد ذلك، سجل تطبيقك مع Apple، ومكن الإشعارات الفورية، وحمّل ملف CSR المصدر لإنشاء شهادة دفع.
سجّل التطبيق للحصول على إشعارات الدفع
لإرسال إشعارات الدفع إلى تطبيق iOS، سجل طلبك مع Apple، وسجل أيضًا للحصول على الإشعارات الفورية.
إذا لم تكن قد سجلت تطبيقك بالفعل، فاستعرض مدخل توفير iOS في مركز مطوري Apple. سجّل الدخول إلى المدخل باستخدام Apple ID، وحدد المعرفات. ثم حدد + لتسجيل تطبيق جديد.
في شاشة تسجيل معرف جديد، حدد زر الاختيار معرفات التطبيق. ثم حدد متابعة.
حدِّث القيم الثلاث التالية لتطبيقك الجديد، ثم حدد متابعة:
الوصف:اكتب اسمًا وصفيًا لتطبيقك.
معرف الحزمة: أدخل معرف حزمة من نموذج معرف المؤسسة.اسم المنتج على النحو المذكور في دليل توزيع التطبيقات. يجب أن تتطابق قيم معرف المؤسسة، واسم المنتج مع معرف المؤسسة، واسم المنتج الذي تستخدمه عند إنشاء مشروع Xcode. في لقطة الشاشة التالية، يتم استخدام قيمة NotificationHubs كمعرف للمؤسسة، ويتم استخدام قيمة GetStarted كاسم المنتج. تأكد من أن قيمة معرف الحزمة تطابق القيمة في مشروع Xcode، بحيث يستخدم Xcode ملف تعريف النشر الصحيح.
دفع الإخطارات: حدد خيار Push Notifications في قسم القدرات.
ينشئ هذا الإجراء معرف التطبيق الخاص بك، ويطلب تأكيد المعلومات. حدد متابعة، ثم حدد تسجيل لتأكيد معرف التطبيق الجديد.
بعد تحديد تسجيل، يظهر معرف التطبيق الجديد كعنصر سطر في صفحة الشهادات والمعرفات وملفات التعريف.
في صفحة الشهادات والمعرفات وملفات التعريف، ضمن المعرفات،حدد موقع عنصر سطر معرف التطبيق الذي قمت بإنشائه للتو، وحدد صفه لعرض شاشة تحرير تكوين معرف التطبيق.
إنشاء شهادة لمراكز الإعلام
يلزم توافر شهادة لتمكين مركز الإعلام للعمل مع APNS. يمكن إجراء ذلك بإحدى طريقتين:
- إنشاء ملف .p12 يمكن تحميله مباشرةً إلى مركز الإعلام.
- إنشاء ملف .p8 يمكن استخدامه للمصادقة المستندة إلى الرمز المميز(الأسلوب الأحدث).
الأسلوب الأحدث له عدد من المزايا (مقارنةً باستخدام الشهادات) على النحو الموثق في المصادقة المستندة إلى الرمز المميز (HTTP/2) لـ APNS. بيد أنه تم اتخاذ خطوات لكلا النهجين.
الخيار 1: إنشاء شهادة دفع .p12 يمكن تحميلها مباشرة إلى مركز الإعلام
مرر لأسفل إلى خيار Push Notifications المحدد، ثم حدد تكوين لإنشاء الشهادة.
تعرض نافذة شهادات SSL لخدمة Apple Push Notification. حدد زر إنشاء شهادة ضمن قسم شهادة SSL للتطوير.
يتم عرض شاشة إنشاء شهادة جديدة.
ملاحظة
يستخدم هذا البرنامج التعليمي شهادة تطوير. يتم استخدام العملية نفسها عند تسجيل شهادة إنتاج. تأكد فقط من استخدام نوع الشهادة نفسها عند إرسال الإشعارات.
حدد اختيار ملف، استعرض للوصول إلى الموقع حيث قمت بحفظ ملف CSR من المهمة الأولى، ثم انقر نقرًا مزدوجًا فوق اسم الشهادة لتحميله. ثم حدد متابعة.
بعد إنشاء المدخل للشهادة، حدد زر تنزيل. احفظ الشهادة، وتذكر الموقع الذي تم حفظها فيه.
يتم تنزيل الشهادة، وحفظها على الكمبيوتر في مجلد التنزيلات.
ملاحظة
بشكل افتراضي، يتم تسمية شهادة التطوير التي تم تنزيلها aps_development.cer.
انقر نقرًا مزدوجًا فوق شهادة الدفع التي تم تنزيلها aps_development.cer. يثبِّت هذا الإجراء الشهادة الجديدة في سلسلة المفاتيح، على النحو الموضح في الصورة التالية:
ملاحظة
رغم أن الاسم في الشهادة قد يكون مختلفًا، إلا أنه سيتم تثبيت الاسم مسبقًا مع خدمات دفع iOS من Apple Development.
في Keychain Access، انقر بزر الماوس الأيمن فوق شهادة الدفع الجديدة التي قمت بإنشائها في الفئة شهادات. حدد تصدير واسم الملف، وحدد تنسيق .p12، ثم حدد حفظ.
يمكنك اختيار حماية الشهادة بكلمة مرور؛ ولكن هذا اختياري. انقر فوق موافق إذا كنت تريد تجاوز إنشاء كلمة المرور. دون ملاحظة عن اسم الملف وموقع الشهادة .p12 المصدرة. يتم استخدامها لتمكين المصادقة مع APNs.
ملاحظة
قد يختلف اسم الملف وموقع .p12 عما هو مصور في هذا البرنامج التعليمي.
الخيار 2: إنشاء شهادة .p8 التي يمكن استخدامها للمصادقة المستندة إلى الرمز المميز
دَوّن التفاصيل التالية:
- بادئة معرف التطبيق (هذا هو معرف الفريق)
- معرف الحزمة
مرة أخرى في الشهادات والمعرفات وملفات التعريف، انقر فوق المفاتيح.
ملاحظة
إذا كان لديك مفتاح مكون لـ APNS،يمكنك إعادة استخدام شهادة .p8 التي قمت بتنزيلها مباشرةً بعد إنشائها. إذا كان الأمر كذلك، يمكنك تجاهل الخطوات من 3 إلى 5.
انقر فوق زر + (أو زر إنشاء مفتاح) لإنشاء مفتاح جديد.
وفّر قيمة اسم مفتاح مناسبة، ثم تحقق من خيار خدمة Apple Push Notifications (APNs)،، ومن ثم انقر فوق متابعة، بعدها تسجيل على الشاشة التالية.
انقر فوق تحميل، ثم انقل ملف .p8 (مسبوقًا بـ AuthKey_)إلى دليل محلي آمن، ثم انقر فوق تم.
ملاحظة
تأكد من الاحتفاظ بملف .p8 في مكان آمن (وحفظ نسخة احتياطية). بعد تنزيل المفتاح الخاص بك، لا يمكن إعادة تنزيله عند إزالة نسخة الخادم.
على المفاتيح، انقر فوق المفتاح الذي قمت بإنشائه للتو (أو مفتاح موجود إذا اخترت استخدام ذلك بدلاً من ذلك).
دَوّن قيمة معرف المفتاح.
افتح شهادة .p8 في تطبيق مناسب من اختيارك مثل رمز Visual Studio، ثم دَوّن قيمة المفتاح. هذه هي القيمة بين -----BEGIN PRIVATE KEY----- و-----END PRIVATE KEY-----.
-----BEGIN PRIVATE KEY----- <key_value> -----END PRIVATE KEY-----
ملاحظة
هذه هي قيمة الرمز المميز التي سيتم استخدامها لاحقًا لتكوين مركز الإعلامات.
في نهاية هذه الخطوات يجب أن يكون لديك المعلومات التالية لاستخدامها لاحقًا في تكوين مركز الإعلامات بمعلومات APNs:
- معرف الفريق (راجع الخطوة 1)
- معرف الحزمة (راجع الخطوة 1)
- معرف المفتاح (راجع الخطوة 7)
- قيمة الرمز المميز؛ أي: قيمة المفتاح .p8 (راجع الخطوة 8)
إنشاء ملف تعريف توفير للتطبيق
راجع مدخل توفير iOS، وحدد الشهادات والمعرفات وملفات التعريف، ثم حدد ملفات التعريف من القائمة اليمنى، ثم حدد + لإنشاء ملف تعريف جديد. تظهر شاشة تسجيل ملف تعريف توفير جديد.
حدد تطوير تطبيقات iOS ضمن التطوير كنوع ملف تعريف التوفير، ثم حدد متابعة.
بعد ذلك، حدد معرف التطبيق الذي أنشأته من القائمة المنسدلة معرف التطبيق،، وحدد متابعة.
في نافذة تحديد الشهادات، حدد شهادة التطوير التي تستخدمها لتوقيع التعليمات البرمجية، وحدد متابعة. ليست هذه الشهادة شهادة الدفع التي قمت بإنشائها. إذا لم يكن أحدها موجودًا، يجب عليك إنشاؤها. إذا كانت هناك شهادة، فانتقل إلى الخطوة التالية. لإنشاء شهادة تطوير إذا لم تكن موجودة:
- إذا رأيت لا توجد شهادات متوفرة، فحدد إنشاء شهادة.
- في قسم البرامج، حدد تطوير Apple. ثم حدد متابعة.
- في شاشة إنشاء شهادة جديدة، حدد اختيار ملف.
- استعرض للوصول إلى شهادة طلب توقيع الشهادة التي قمت بإنشائها سابقًا، وحددها، ثم حدد فتح.
- حدد Continue.
- قم بتنزيل شهادة التطوير، وتذكر الموقع الذي تم حفظها فيه.
ارجع إلى صفحة الشهادات والمعرفات وملفات التعريف، وحدد ملفات التعريف من القائمة اليسرى، ثم حدد + لإنشاء ملف تعريف جديد. تظهر شاشة تسجيل ملف تعريف توفير جديد.
في نافذة تحديد الشهادات، حدد شهادة التطوير التي أنشأتها للتو. ثم حدد متابعة.
بعد ذلك، حدد الأجهزة التي تريد استخدامها للاختبار، وحدد متابعة.
وأخيرًا، اختر اسمًا لملف التعريف في تقديم اسم ملف التعريف، وحدد إنشاء.
عند إنشاء ملف تعريف التوفير الجديد، حدد تنزيل. تذكر الموقع الذي تم حفظه فيه.
استعرض للوصول إلى موقع ملف تعريف التوفير، ثم انقر نقرًا مزدوجًا فوقه لتثبيته على جهاز تطوير Xcode.
إنشاء مركز إعلامات
في هذا القسم ، يمكنك إنشاء مركز إعلام، وتكوين المصادقة مع APNs باستخدام إما شهادة الدفع .p12 أو المصادقة القائمة على الرمز المميز. إذا كنت ترغب في استخدام مركز إعلام قمت بإنشائه بالفعل، يمكنك تخطي الخطوة 5.
تسجيل الدخول إلى مدخل Azure.
حدد كافة الخدمات في القائمة اليمنى، ثم حدد لوحات وصل الإعلام في المقطع الجوال. حدد رمز النجمة بجوار اسم الخدمة لإضافة الخدمة إلى قسم FAVORITES في القائمة اليمنى. بعد إضافة مراكز الإعلام إلى المفضلة، حددها على يسار القائمة.
في صفحة لوحات الوصل إعلام، حدد إضافة على شريط الأدوات.
في صفحة مركز الإعلام، قم بإجراء الخطوات التالية:
أدخل اسمًا في مركز الإعلام.
أدخل اسمًا في إنشاء مساحة اسم جديدة. تحتوي مساحة الاسم على لوحة وصل واحدة أو أكثر.
حدد قيمة من مربع القائمة المنسدلة الموقع. تحدد هذه القيمة الموقع الذي تريد إنشاء المحور فيه.
حدد مجموعة موارد موجودة في مجموعة الموارد، أو أنشئ اسمًا لمجموعة موارد جديدة.
حدد Create.
حدد الإعلامات (رمز الجرس)، ثم حدد الانتقال إلى المورد. يمكنك أيضًا تحديث القائمة في صفحة مراكز الإعلام وتحديد لوحة الوصل.
حدد نهج الوصول من القائمة. لاحظ أن سلسلتي الاتصال متوفرتان لك. ستحتاج إليها لاحقًا للتعامل مع الإشعارات الفورية.
هام
لا يجب استخدام نهج DefaultFullSharedAccessSignature في تطبيقك. هذا مقصود أن تستخدم في الطرف الخلفي الخاص بك فقط.
تكوين مركز الإعلامات بمعلومات APNs
ضمن خدمات الإعلام، حدد Apple (APNS)، ثم اتبع الخطوات المناسبة استنادًا إلى الأسلوب الذي اخترته سابقًا في قسم إنشاء شهادة لمراكز الإعلام.
ملاحظة
استخدم "الإنتاج لوضع التطبيق " فقط إذا كنت تريد إرسال إعلامات مؤقتة إلى المستخدمين الذين اشتروا تطبيقك من المتجر.
الخيار 1: استخدام شهادة دفع.p12
حدد شهادة.
حدد أيقونة الملف.
حدد الملف .p12 الذي قمت بتصديره سابقًا، ثم حدد فتح.
إذا لزم الأمر، فحدد كلمة المرور الصحيحة.
حدد وضع بيئة الاختيار.
حدد حفظ.
الخيار 2: استخدام المصادقة المستندة إلى الرمز المميز
حدد الرمز المميز.
أدخل القيم التالية التي حصلت عليها سابقًا:
- معرف المفتاح
- معرف الحزمة
- معرّف الفريق
- الرمز المميز
اختر بيئة الاختيار
حدد حفظ.
لقد قمت الآن بتكوين مركز الإعلامات باستخدام APNs. لديك أيضًا سلاسل الاتصال لتسجيل التطبيق الخاص بك، وإرسال إشعارات الدفع.
تكوين مركز الإعلام ل APNS
- على جهاز Mac، قم بتشغيل Keychain Access. على شريط التنقل الأيسر، ضمن الفئة، افتح شهاداتي. ابحث عن شهادة SSL التي قمت بتنزيلها في القسم السابق، ثم قم بالكشف عن محتوياتها. حدد الشهادة فقط (لا تحدد المفتاح الخاص). ثم قم بتصديره.
- في مدخل Microsoft Azure، حدد Browse All>App Services. ثم حدد الواجهة الخلفية لتطبيقات الأجهزة المحمولة.
- ضمن Settings، حدد App Service Push. ثم حدد اسم مركز الإعلامات.
- انتقل إلى Apple Push Notification Services>Upload Certificate. قم بتحميل ملف .p12، مع تحديد الوضع الصحيح (اعتمادا على ما إذا كانت شهادة SSL للعميل من السابق هي الإنتاج أو بيئة الاختبار المعزولة). احفظ أي تغييرات.
تم تكوين خدمتك الآن للعمل مع الإعلامات المنبثقة على iOS.
بعد ذلك، ستقوم بتكوين إعداد مشروع iOS في Xamarin Studio أو Visual Studio.
تكوين مشروع iOS في Xamarin Studio
في Xamarin.Studio، افتح Info.plist، وقم بتحديث معرف الحزمة بمعرف المجموعة الذي قمت بإنشائه مسبقا باستخدام معرف التطبيق الجديد.
مرر لأسفل وصولا إلى أوضاع الخلفية. حدد المربع تمكين أوضاع الخلفية ومربع الإعلامات عن بعد .
انقر نقرا مزدوجا فوق مشروعك في لوحة الحلول لفتح خيارات المشروع.
ضمن إنشاء، اختر توقيع حزمة iOS، وحدد الهوية المقابلة وملف تعريف التوفير الذي قمت بإعداده للتو لهذا المشروع.
وهذا يضمن أن المشروع يستخدم ملف التعريف الجديد لتوقيع التعليمات البرمجية. للحصول على وثائق تزويد جهاز Xamarin الرسمية، راجع تزويد جهاز Xamarin.
تكوين مشروع iOS في Visual Studio
في Visual Studio، انقر بزر الماوس الأيمن فوق المشروع، ثم انقر فوق خصائص.
في صفحات الخصائص، انقر فوق علامة التبويب تطبيق iOS ، وقم بتحديث المعرف بالمعرف الذي قمت بإنشائه سابقا.
في علامة التبويب توقيع حزمة iOS ، حدد الهوية المقابلة وملف تعريف التوفير الذي قمت بإعداده للتو لهذا المشروع.
وهذا يضمن أن المشروع يستخدم ملف التعريف الجديد لتوقيع التعليمات البرمجية. للحصول على وثائق تزويد جهاز Xamarin الرسمية، راجع تزويد جهاز Xamarin.
انقر نقرا مزدوجا فوق Info.plist لفتحه، ثم قم بتمكين RemoteNotifications ضمن أوضاع الخلفية.
إضافة إعلامات مؤقتة إلى تطبيق iOS
في مشروع iOS ، افتح AppDelegate.cs وأضف العبارة التالية إلى أعلى ملف التعليمات البرمجية.
using Newtonsoft.Json.Linq;
في فئة AppDelegate ، أضف تجاوزا لحدث RegisteredForRemoteNotifications للتسجيل للحصول على الإعلامات:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}"; JObject templates = new JObject(); templates["genericMessage"] = new JObject { {"body", templateBodyAPNS} }; // Register for push with your mobile app Push push = TodoItemManager.DefaultManager.CurrentClient.GetPush(); push.RegisterAsync(deviceToken, templates); }
في AppDelegate، أضف أيضا التجاوز التالي لمعالج حدث DidReceiveRemoteNotification :
public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler) { NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary; string alert = string.Empty; if (aps.ContainsKey(new NSString("alert"))) alert = (aps[new NSString("alert")] as NSString).ToString(); //show alert if (!string.IsNullOrEmpty(alert)) { UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null); avAlert.Show(); } }
يعالج هذا الأسلوب الإعلامات الواردة أثناء تشغيل التطبيق.
في فئة AppDelegate ، أضف التعليمات البرمجية التالية إلى أسلوب FinishedLaunching :
// Register for push notifications. var settings = UIUserNotificationSettings.GetSettingsForTypes( UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, new NSSet()); UIApplication.SharedApplication.RegisterUserNotificationSettings(settings); UIApplication.SharedApplication.RegisterForRemoteNotifications();
وهذا يتيح دعم الإعلامات عن بعد والطلبات التي تدفع التسجيل.
يتم الآن تحديث تطبيقك لدعم الإعلامات المنبثقة.
اختبار الإعلامات المنبثقة في تطبيق iOS
انقر بزر الماوس الأيمن فوق مشروع iOS، وانقر فوق تعيين كمشروع بدء التشغيل.
اضغط على الزر تشغيل أو F5 في Visual Studio لإنشاء المشروع وبدء تشغيل التطبيق في جهاز iOS. ثم انقر فوق موافق لقبول الإعلامات المنبثقة.
ملاحظة
يجب عليك قبول الإعلامات المنبثقة بشكل صريح من تطبيقك. يحدث هذا الطلب فقط في المرة الأولى التي يتم فيها تشغيل التطبيق.
في التطبيق، اكتب مهمة، ثم انقر فوق أيقونة علامة الجمع (+).
تحقق من تلقي إعلام، ثم انقر فوق موافق لتجاهل الإعلام.
تكوين وتشغيل مشاريع Windows (اختياري)
هذا القسم مخصص لتشغيل مشاريع Xamarin.Forms WinApp وWinPhone81 لأجهزة Windows. تدعم هذه الخطوات أيضا مشاريع النظام الأساسي العام لـ Windows (UWP). يمكنك تخطي هذا القسم إذا كنت لا تعمل مع أجهزة Windows.
تسجيل تطبيق Windows الخاص بك للإشعارات المنبثقة باستخدام خدمة إعلامات Windows (WNS)
في Visual Studio مستكشف الحلول، انقر بزر الماوس الأيمن فوق مشروع تطبيق 'متجر Windows'. ثم حدد Store>Associate App مع Store.
في المعالج، حدد التالي. ثم سجل الدخول باستخدام حساب Microsoft الخاص بك. في حجز اسم تطبيق جديد، اكتب اسما لتطبيقك، ثم حدد حجز.
بعد إنشاء تسجيل التطبيق بنجاح، حدد اسم التطبيق الجديد. حدد التالي، ثم حدد إقران. تضيف هذه العملية معلومات تسجيل 'متجر Windows' المطلوبة إلى بيان التطبيق.
كرر الخطوين 1 و3 لمشروع تطبيق Windows Phone Store باستخدام نفس التسجيل الذي أنشأته مسبقا لتطبيق 'متجر Windows'.
انتقل إلى Windows Dev Center، ثم سجل الدخول باستخدام حساب Microsoft الخاص بك. في تطبيقاتي، حدد تسجيل التطبيق الجديد. ثم قم بتوسيعإعلامات دفعالخدمات>.
في صفحة الإعلامات المنبثقة ، ضمن Windows Push Notification Services (WNS) وMicrosoft Azure Mobile Apps، حدد موقع Live Services. دون قيم Package SID والقيمة الحالية في Application Secret.
هام
يعد كل من سر التطبيق وحزمة SID من بيانات اعتماد الأمان المهمة. لا تشارك هذه القيم مع أي شخص أو توزعها مع تطبيقك.
تكوين مركز الإعلامات ل WNS
في مدخل Microsoft Azure، حدد Browse All>App Services. ثم حدد الواجهة الخلفية لتطبيقات الأجهزة المحمولة. ضمن Settings، حدد App Service Push. ثم حدد اسم مركز الإعلامات.
انتقل إلى Windows (WNS). ثم أدخل مفتاح الأمان (سر العميل) وحزمة SID التي حصلت عليها من موقع Live Services. بعد ذلك، حدد حفظ.
تم الآن تكوين الواجهة الخلفية لاستخدام WNS لإرسال إعلامات الدفع.
إضافة إعلامات مؤقتة إلى تطبيق Windows
في Visual Studio، افتح App.xaml.cs في مشروع Windows، وأضف العبارات التالية.
using Newtonsoft.Json.Linq; using Microsoft.WindowsAzure.MobileServices; using System.Threading.Tasks; using Windows.Networking.PushNotifications; using <your_TodoItemManager_portable_class_namespace>;
استبدل
<your_TodoItemManager_portable_class_namespace>
بمساحة اسم المشروع المحمول الذي يحتوي علىTodoItemManager
الفئة .في App.xaml.cs، أضف أسلوب InitNotificationsAsync التالي:
private async Task InitNotificationsAsync() { var channel = await PushNotificationChannelManager .CreatePushNotificationChannelForApplicationAsync(); const string templateBodyWNS = "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>"; JObject headers = new JObject(); headers["X-WNS-Type"] = "wns/toast"; JObject templates = new JObject(); templates["genericMessage"] = new JObject { {"body", templateBodyWNS}, {"headers", headers} // Needed for WNS. }; await TodoItemManager.DefaultManager.CurrentClient.GetPush() .RegisterAsync(channel.Uri, templates); }
يحصل هذا الأسلوب على قناة الإعلام المؤقت، ويسجل قالب لتلقي إعلامات القالب من مركز الإعلامات. سيتم تسليم إعلام قالب يدعم messageParam إلى هذا العميل.
في App.xaml.cs، قم بتحديث تعريف أسلوب معالج الأحداث OnLaunched عن طريق إضافة
async
المعدل. ثم أضف السطر التالي من التعليمات البرمجية في نهاية الأسلوب:await InitNotificationsAsync();
وهذا يضمن إنشاء تسجيل الإعلامات المنبثقة أو تحديثه في كل مرة يتم فيها تشغيل التطبيق. من المهم القيام بذلك لضمان أن قناة دفع WNS نشطة دائما.
في مستكشف الحلول ل Visual Studio، افتح ملف Package.appxmanifest، وقم بتعيين Toast Capable إلى Yes ضمن Notifications.
أنشئ التطبيق وتحقق من عدم وجود أخطاء. يجب أن يسجل تطبيق العميل الخاص بك الآن إعلامات القالب من النهاية الخلفية لتطبيقات الأجهزة المحمولة. كرر هذا القسم لكل مشروع Windows في الحل الخاص بك.
اختبار الإعلامات المنبثقة في تطبيق Windows
- في Visual Studio، انقر بزر الماوس الأيمن فوق مشروع Windows، وانقر فوق تعيين كمشروع بدء تشغيل.
- اضغط على الزر تشغيل لإنشاء المشروع وبدء تشغيل التطبيق.
- في التطبيق، اكتب اسما ل todoitem جديد، ثم انقر فوق أيقونة علامة الجمع (+) لإضافته.
- تحقق من تلقي إعلام عند إضافة العنصر.
الخطوات التالية
يمكنك معرفة المزيد حول الإعلامات المنبثقة:
- إرسال إعلامات من تطبيقات Azure Mobile
- المراسلة السحابية لـ Firebase
- الإعلامات عن بعد باستخدام Firebase Cloud Messaging
- تشخيص مشكلات الإعلامات المنبثقة
هناك أسباب مختلفة لماذا قد يتم إسقاط الإعلامات أو لا ينتهي بها الأمر على الأجهزة. يوضح لك هذا الموضوع كيفية تحليل ومعرفة السبب الجذري لفشل الإعلامات المنبثقة.
يمكنك أيضا المتابعة إلى أحد البرامج التعليمية التالية:
- إضافة مصادقة إلى تطبيقك
تعرف على كيفية مصادقة مستخدمي تطبيقك باستخدام موفر هوية. - تمكين المزامنة دون اتصال لتطبيقك
تعرف على كيفية إضافة دعم دون اتصال لتطبيقك باستخدام واجهة خلفية لتطبيقات الأجهزة المحمولة. باستخدام المزامنة دون اتصال، يمكن للمستخدمين التفاعل مع تطبيق الأجهزة المحمولة - عرض البيانات أو إضافتها أو تعديلها - حتى عندما لا يكون هناك اتصال بالشبكة.