إضافة الإعلامات المنبثقة إلى تطبيق iOS
نظرة عامة
في هذا البرنامج التعليمي، يمكنك إضافة إعلامات الدفع إلى مشروع التشغيل السريع لنظام التشغيل iOS بحيث يتم إرسال إشعار دفع إلى الجهاز في كل مرة يتم فيها إدراج سجل.
إذا لم تستخدم مشروع خادم التشغيل السريع الذي تم تنزيله، فستحتاج إلى حزمة ملحق الإعلام. لمزيد من المعلومات، راجع دليل SDK لخادم .NET الخلفي لتطبيقات الأجهزة المحمولة Azure .
لا يدعم جهاز محاكاة iOS الإعلامات المنبثقة. تحتاج إلى جهاز iOS فعلي وعضوية برنامج مطوري Apple.
تكوين مركز الإعلامات
تستخدم ميزة تطبيقات الأجهزة المحمولة في Azure App Service Azure Notification Hubs لإرسال الدفعات، لذلك ستقوم بتكوين مركز إعلام لتطبيق الأجهزة المحمولة.
في مدخل Microsoft Azure، انتقل إلى App Services، ثم حدد النهاية الخلفية للتطبيق. ضمن الإعدادات، حدد دفع.
لإضافة مورد مركز إعلام إلى التطبيق، حدد اتصال. يمكنك إما إنشاء مركز أو الاتصال بمركز موجود.
لقد قمت الآن بتوصيل مركز إعلام بمشروع الخلفية لتطبيقات الأجهزة المحمولة. يمكنك لاحقا تكوين مركز الإعلامات هذا للاتصال بنظام إعلام النظام الأساسي (PNS) للدفع إلى الأجهزة.
تسجيل التطبيق للإعلامات المؤقتة
- تسجيل معرف تطبيق لتطبيقك. قم بإنشاء معرف تطبيق صريح (وليس معرف تطبيق أحرف البدل)، وبالنسبة لمعرف المجموعة، استخدم معرف المجموعة الدقيق الموجود في مشروع التشغيل السريع ل Xcode. من المهم أيضا تحديد خيار Push Notifications .
- بعد ذلك، للتحضير لتكوين الإعلامات المنبثقة، قم بإنشاء شهادة SSL "تطوير" أو "توزيع".
تكوين Azure لإرسال إعلامات الدفع
- على جهاز Mac، قم بتشغيل Keychain Access. على شريط التنقل الأيسر، ضمن Category، افتح My Certificates. ابحث عن شهادة SSL التي قمت بتنزيلها في القسم السابق، ثم قم بالكشف عن محتوياتها. حدد الشهادة فقط (لا تحدد المفتاح الخاص). ثم قم بتصديره.
- في مدخل Microsoft Azure، حدد Browse All>App Services. ثم حدد النهاية الخلفية لتطبيقات الأجهزة المحمولة.
- ضمن Settings، حدد App Service Push. ثم حدد اسم مركز الإعلامات.
- انتقل إلى Apple Push Notification Services>Upload Certificate. قم بتحميل ملف .p12، مع تحديد الوضع الصحيح (اعتمادا على ما إذا كانت شهادة SSL للعميل من السابق هي الإنتاج أو بيئة الاختبار المعزولة). احفظ أي تغييرات.
تم تكوين خدمتك الآن للعمل مع الإعلامات المؤقتة على iOS.
تحديث الخلفية لإرسال إعلامات الدفع
الواجهة الخلفية ل .NET (C#):
في Visual Studio، انقر بزر الماوس الأيمن فوق مشروع الخادم وانقر فوق إدارة حزم NuGet، وابحث عن
Microsoft.Azure.NotificationHubs
، ثم انقر فوق تثبيت. يؤدي ذلك إلى تثبيت مكتبة مراكز الإعلامات لإرسال الإعلامات من الواجهة الخلفية.في مشروع Visual Studio للواجهة الخلفية، افتح Controllers>TodoItemController.cs. في أعلى الملف، أضف العبارة التالية
using
:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;
استبدل الأسلوب
PostTodoItem
بالتعليمات البرمجية التالية:public async Task<IHttpActionResult> PostTodoItem(TodoItem item) { TodoItem current = await InsertAsync(item); // 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); // iOS payload var appleNotificationPayload = "{\"aps\":{\"alert\":\"" + item.Text + "\"}}"; try { // Send the push notification and log the results. var result = await hub.SendAppleNativeNotificationAsync(appleNotificationPayload); // 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"); } return CreatedAtRoute("Tables", new { id = current.Id }, current); }
إعادة نشر مشروع الخادم.
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(); // When adding record, send a push notification via APNS table.insert(function (context) { // For details of the Notification Hubs JavaScript SDK, // see https://aka.ms/nodejshubs logger.info('Running TodoItem.insert'); // Create a payload that contains the new item Text. var payload = "{\"aps\":{\"alert\":\"" + context.item.text + "\"}}"; // Execute the insert; Push as a post-execute action when results are returned as a Promise. return context.execute() .then(function (results) { // Only do the push if configured if (context.push) { context.push.apns.send(null, payload, function (error) { if (error) { logger.error('Error while sending push notification: ', error); } else { logger.info('Push notification sent successfully!'); } }); } return results; }) .catch(function (error) { logger.error('Error while running context.execute: ', error); }); }); module.exports = table;
عند تحرير الملف على الكمبيوتر المحلي، أعد نشر مشروع الخادم.
إضافة الإعلامات المنبثقة إلى التطبيق
Objective-C:
في QSAppDelegate.m، قم باستيراد iOS SDK وQSTodoService.h:
#import <MicrosoftAzureMobile/MicrosoftAzureMobile.h> #import "QSTodoService.h"
في
didFinishLaunchingWithOptions
QSAppDelegate.m، قم بإدراج الأسطر التالية مباشرة قبلreturn YES;
:UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; [[UIApplication sharedApplication] registerForRemoteNotifications];
في QSAppDelegate.m، أضف أساليب المعالج التالية. تم الآن تحديث تطبيقك لدعم الإعلامات المنبثقة.
// Registration with APNs is successful - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { QSTodoService *todoService = [QSTodoService defaultService]; MSClient *client = todoService.client; [client.push registerDeviceToken:deviceToken completion:^(NSError *error) { if (error != nil) { NSLog(@"Error registering for notifications: %@", error); } }]; } // Handle any failure to register - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError: (NSError *)error { NSLog(@"Failed to register for remote notifications: %@", error); } // Use userInfo in the payload to display an alert. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"%@", userInfo); NSDictionary *apsPayload = userInfo[@"aps"]; NSString *alertString = apsPayload[@"alert"]; // Create alert with notification content. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Notification" message:alertString preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"Cancel"); }]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { NSLog(@"OK"); }]; [alertController addAction:cancelAction]; [alertController addAction:okAction]; // Get current view controller. UIViewController *currentViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; while (currentViewController.presentedViewController) { currentViewController = currentViewController.presentedViewController; } // Display alert. [currentViewController presentViewController:alertController animated:YES completion:nil]; }
Swift:
أضف ملف ClientManager.swift بالمحتويات التالية. استبدل ٪AppUrl٪ بعنوان URL الخاص بالواجهة الخلفية لتطبيق Azure Mobile.
class ClientManager { static let sharedClient = MSClient(applicationURLString: "%AppUrl%") }
في ToDoTableViewController.swift، استبدل
let client
السطر الذي يقوم بتهيئةMSClient
مع هذا السطر:let client = ClientManager.sharedClient
في AppDelegate.swift، استبدل نص
func application
كما يلي:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.registerUserNotificationSettings( UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) application.registerForRemoteNotifications() return true }
في AppDelegate.swift، أضف أساليب المعالج التالية. تم الآن تحديث تطبيقك لدعم الإعلامات المنبثقة.
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { ClientManager.sharedClient.push?.registerDeviceToken(deviceToken) { error in print("Error registering for notifications: ", error?.description) } } func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { print("Failed to register for remote notifications: ", error.description) } func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject: AnyObject]) { print(userInfo) let apsNotification = userInfo["aps"] as? NSDictionary let apsString = apsNotification?["alert"] as? String let alert = UIAlertController(title: "Alert", message: apsString, preferredStyle: .Alert) let okAction = UIAlertAction(title: "OK", style: .Default) { _ in print("OK") } let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { _ in print("Cancel") } alert.addAction(okAction) alert.addAction(cancelAction) var currentViewController = self.window?.rootViewController while currentViewController?.presentedViewController != nil { currentViewController = currentViewController?.presentedViewController } currentViewController?.presentViewController(alert, animated: true) {} }
اختبار الإعلامات المنبثقة
- في Xcode، اضغط على تشغيل وبدء تشغيل التطبيق على جهاز iOS (لاحظ أن الدفع لن يعمل على المحاكيات). انقر فوق موافق لقبول الإعلامات المنبثقة؛ يحدث هذا الطلب في المرة الأولى التي يتم فيها تشغيل التطبيق.
- في التطبيق، أضف عنصرا جديدا وانقر فوق +.
- تحقق من تلقي إعلام، ثم انقر فوق موافق لتجاهل الإعلام. لقد أكملت الآن هذا البرنامج التعليمي بنجاح.
المزيد
- تمنحك القوالب المرونة لإرسال الدفعات عبر الأنظمة الأساسية والدفعات المترجمة. توضح لك كيفية استخدام مكتبة عميل iOS لتطبيقات Azure Mobile كيفية تسجيل القوالب.