Leküldéses értesítések hozzáadása iOS-alkalmazáshoz
Áttekintés
Ebben az oktatóanyagban leküldéses értesítéseket ad hozzá az iOS gyorsindítási projekthez, hogy a rendszer minden rekord beszúrásakor leküldéses értesítést küldjön az eszközre.
Ha nem a letöltött gyorsindítási kiszolgálóprojektet használja, szüksége lesz a leküldéses értesítési bővítménycsomagra. További információ: Az Azure Mobile Appshez készült .NET háttérkiszolgálói SDK használata útmutató.
Az iOS-szimulátor nem támogatja a leküldéses értesítéseket. Fizikai iOS-eszközre és Apple Developer Program-tagságra van szükség.
A Notification Hub konfigurálása
A Azure App Service Mobile Apps funkciója az Azure Notification Hubs használatával küld leküldéseket, ezért egy értesítési központot fog konfigurálni a mobilalkalmazáshoz.
A Azure Portal nyissa meg az App Servicest, majd válassza ki az alkalmazás háttérrendszerét. A Beállítások területen válassza a Leküldés lehetőséget.
Ha értesítési központ-erőforrást szeretne hozzáadni az alkalmazáshoz, válassza a Csatlakozás lehetőséget. Létrehozhat egy központot, vagy csatlakozhat egy meglévőhöz.
Most már csatlakoztatott egy értesítési központot a Mobile Apps háttérprojektjéhez. Később úgy konfigurálja ezt az értesítési központot, hogy egy platformértesítési rendszerhez (PNS) csatlakozzon az eszközökre való leküldéshez.
Alkalmazás regisztrálása leküldéses értesítésekhez
- Alkalmazásazonosító regisztrálása az alkalmazáshoz. Hozzon létre explicit alkalmazásazonosítót (nem helyettesítő alkalmazásazonosítót), és a csomagazonosítóhoz használja az Xcode gyorsindítási projektben található pontos csomagazonosítót. Az is fontos, hogy a Leküldéses értesítések lehetőséget válassza.
- Ezután a leküldéses értesítések konfigurálásának előkészítéséhez hozzon létre egy "Fejlesztés" vagy "Disztribúció" SSL-tanúsítványt.
Az Azure konfigurálása leküldéses értesítések küldésére
- Mac gépén indítsa el a Kulcskarika-hozzáférést. A bal oldali navigációs sáv Kategória területén nyissa meg a Saját tanúsítványok elemet. Keresse meg az előző szakaszban letöltött SSL-tanúsítványt, majd tegye közzé a tartalmát. Csak a tanúsítványt válassza ki (ne válassza ki a titkos kulcsot). Ezután exportálja.
- A Azure Portal válassza az Összes >App Servicestallózásalehetőséget. Ezután válassza ki a Mobile Apps háttérrendszerét.
- A Beállítások területen válassza a App Service Leküldés lehetőséget. Ezután válassza ki az értesítési központ nevét.
- Lépjen az Apple Push Notification Services Upload Certificate (Apple Push Notification Services>feltöltési tanúsítványa) szakaszra. Töltse fel a .p12 fájlt, és válassza ki a megfelelő módot (attól függően, hogy a korábbi ügyfél SSL-tanúsítványa éles vagy tesztkörnyezet). Mentse a módosításokat.
A szolgáltatás most már úgy van konfigurálva, hogy leküldéses értesítéseket használjon iOS rendszeren.
Háttérrendszer frissítése leküldéses értesítések küldéséhez
.NET-háttérrendszer (C#)::
A Visual Studióban kattintson a jobb gombbal a kiszolgálóprojektre, és válassza a Manage NuGet Packages (NuGet-csomagok kezelése) parancsot, keresse meg
Microsoft.Azure.NotificationHubs
, majd kattintson a Telepítés parancsra. Ezzel telepíti a Notification Hubs-kódtárat, amely értesítéseket küld a háttérrendszerből.A háttérrendszer Visual Studio-projektjében nyissa meg a Controllers>TodoItemController.cs fájlt. A fájl tetején adja hozzá a következő
using
utasítást:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;
Cserélje le az
PostTodoItem
metódust az alábbi kódra: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); }
Tegye közzé újra a kiszolgálóprojektet.
Node.js háttérrendszer:
Állítsa be a háttérprojektet.
Cserélje le a todoitem.js táblaszkriptet a következő kódra:
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;
Amikor a helyi számítógépen szerkeszti a fájlt, tegye közzé újra a kiszolgálóprojektet.
Leküldéses értesítések hozzáadása az alkalmazáshoz
Objective-C:
A QSAppDelegate.m fájlban importálja az iOS SDK-t és a QSTodoService.h-t:
#import <MicrosoftAzureMobile/MicrosoftAzureMobile.h> #import "QSTodoService.h"
A
didFinishLaunchingWithOptions
QSAppDelegate.m fájlban szúrja be a következő sorokat közvetlenül a következő eléreturn YES;
:UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; [[UIApplication sharedApplication] registerForRemoteNotifications];
A QSAppDelegate.m fájlban adja hozzá a következő kezelőmeteneket. Az alkalmazás most már frissül, hogy támogassa a leküldéses értesítéseket.
// 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:
Adja hozzá a ClientManager.swift fájlt a következő tartalommal. Cserélje le az %AppUrl% elemet az Azure-mobilalkalmazás háttérrendszerének URL-címére.
class ClientManager { static let sharedClient = MSClient(applicationURLString: "%AppUrl%") }
A ToDoTableViewController.swift fájlban cserélje le az
let client
adottMSClient
sort inicializáló sort a következő sorra:let client = ClientManager.sharedClient
Az AppDelegate.swift fájlban cserélje le a következő szövegtörzset
func application
:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.registerUserNotificationSettings( UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) application.registerForRemoteNotifications() return true }
Az AppDelegate.swift fájlban adja hozzá a következő kezelőmeteneket. Az alkalmazás most már frissül, hogy támogassa a leküldéses értesítéseket.
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) {} }
Leküldéses értesítések tesztelése
- Az Xcode-ban nyomja le a Run billentyűt , és indítsa el az alkalmazást egy iOS-eszközön (vegye figyelembe, hogy a leküldés nem fog működni a szimulátorokon). Az OK gombra kattintva fogadja el a leküldéses értesítéseket; ez a kérés az alkalmazás első futtatásakor fordul elő.
- Az alkalmazásban adjon hozzá egy új elemet, és kattintson +a gombra.
- Ellenőrizze, hogy érkezett-e értesítés, majd kattintson az OK gombra az értesítés elvetéséhez. Ezzel sikeresen elvégezte ezt az oktatóanyagot.
Kibontás
- A sablonok rugalmasan küldhetnek platformfüggetlen leküldéseket és honosított leküldéseket. Az iOS-ügyfélkódtár használata az Azure Mobile Appshez bemutatja, hogyan regisztrálhat sablonokat.