Přidání nabízených oznámení do aplikace pro iOS
Přehled
V tomto kurzu přidáte nabízená oznámení do projektu rychlý Start pro iOS , takže se do zařízení pošle nabízené oznámení pokaždé, když se do něj vloží záznam.
Pokud nepoužíváte stažený projekt serveru pro rychlý Start, budete potřebovat balíček rozšíření nabízených oznámení. Další informace najdete v tématu práce se sadou SDK back-end serveru .NET pro Azure Mobile Apps Guide.
Simulátor iOS nepodporuje nabízená oznámení. Potřebujete fyzické zařízení se systémem iOS a členství v programu Apple Developer.
Konfigurace centra oznámení
funkce Mobile Apps v Azure App Service používá Azure Notification Hubs k odesílání nabízených oznámení, takže budete konfigurovat centrum oznámení pro mobilní aplikaci.
v Azure Portalklikněte na App Servicesa pak vyberte back-end aplikace. v části Nastavenívyberte možnost Push.
pokud chcete do aplikace přidat prostředek centra oznámení, vyberte Připojení. Můžete buď vytvořit centrum, nebo se připojit k existujícímu.
Nyní jste připojili centrum oznámení k vašemu Mobile Apps back-end projektu. Později nakonfigurujete toto centrum oznámení pro připojení k systému oznámení platformy (PNS), které se bude nabízet do zařízení.
Registrovat aplikaci pro nabízená oznámení
- Zaregistrujte ID aplikace v aplikaci. Vytvořte explicitní ID aplikace (nejedná se o zástupné číslo ID aplikace) a pro ID sadypoužijte přesné ID sady prostředků, které je v projektu pro rychlý Start Xcode. Je také důležité, abyste vybrali možnost nabízená oznámení .
- Dále pro přípravu pro konfiguraci nabízených oznámenívytvořte certifikát SSL pro vývoj nebo distribuci.
Konfigurace Azure pro odesílání nabízených oznámení
- Na Macu spusťte přístup k řetězci klíčů. V levém navigačním panelu v části kategorieotevřete Moje certifikáty. Vyhledejte certifikát SSL, který jste si stáhli v předchozí části, a pak obsah zastavte. Vyberte pouze certifikát (nevybírejte privátní klíč). Pak ji exportujte.
- v Azure Portalvyberte procházet všechny>App Services. Pak vyberte back-end Mobile Apps.
- v části Nastavenívyberte App Service Push. Pak vyberte název centra oznámení.
- přejít na službu Apple Push Notification Services>Upload certifikát. Upload soubor. p12, výběr správného režimu (v závislosti na tom, jestli je certifikát SSL klienta z dřívější verze nebo izolovaný prostor). Uložte všechny změny.
Vaše služba je teď nakonfigurovaná tak, aby fungovala s nabízenými oznámeními v iOS.
Aktualizace back-endu pro odesílání nabízených oznámení
Back-end .NET (C#):
v Visual Studio klikněte pravým tlačítkem myši na serverový projekt a klikněte na spravovat NuGet balíčky, vyhledejte
Microsoft.Azure.NotificationHubs
a pak klikněte na nainstalovat. Tím se nainstaluje knihovna Notification Hubs pro odesílání oznámení z back-endu.v projektu Visual Studio back-endu otevřete controllers>TodoItemController. cs. V horní části souboru přidejte následující
using
příkaz:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;
Nahraďte metodu
PostTodoItem
následujícím kódem: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); }
Publikujte projekt serveru znovu.
Back-end Node.js:
Nastavte svůj back-end projekt.
Skript todoitem.js tabulky nahraďte následujícím kódem:
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;
Při úpravách souboru na místním počítači znovu publikujte projekt serveru.
Přidání nabízených oznámení do aplikace
Cíl-C:
V QSAppDelegate. mimportujte sadu SDK pro iOS a QSTodoService. h:
#import <MicrosoftAzureMobile/MicrosoftAzureMobile.h> #import "QSTodoService.h"
Do
didFinishLaunchingWithOptions
v QSAppDelegate. mvložte následující řádky, které jsou správnéreturn YES;
:UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; [[UIApplication sharedApplication] registerForRemoteNotifications];
V QSAppDelegate. mpřidejte následující metody obslužné rutiny. Vaše aplikace se teď aktualizovala tak, aby podporovala nabízená oznámení.
// 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:
Přidejte soubor ClientManager. SWIFT s následujícím obsahem. Nahraďte % AppUrl% adresou URL back-endu mobilní aplikace Azure.
class ClientManager { static let sharedClient = MSClient(applicationURLString: "%AppUrl%") }
V ToDoTableViewController. SWIFTnahraďte
let client
řádek, který inicializujeMSClient
tuto čáru:let client = ClientManager.sharedClient
V AppDelegate. SWIFTnahraďte text
func application
následujícím způsobem:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.registerUserNotificationSettings( UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) application.registerForRemoteNotifications() return true }
V AppDelegate. SWIFTpřidejte následující metody obslužné rutiny. Vaše aplikace se teď aktualizovala tak, aby podporovala nabízená oznámení.
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) {} }
Test nabízených oznámení
- V Xcode stiskněte Spustit a spusťte aplikaci na zařízení se systémem iOS (Všimněte si, že nabízení nebude fungovat na simulátorech). Pro příjem nabízených oznámení klikněte na OK . k tomuto požadavku dojde při prvním spuštění aplikace.
- V aplikaci přidejte novou položku a klikněte + .
- Ověřte, zda bylo přijato oznámení, a pak kliknutím na tlačítko OK zavřete oznámení. Tento kurz jste teď úspěšně dokončili.
Víc
- Šablony vám poskytnou flexibilitu při odesílání nabízených oznámení mezi platformami a lokalizovaných nabízených oznámení. Jak používat klientskou knihovnu iOS pro Azure Mobile Apps ukazuje, jak registrovat šablony.