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.

  1. 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.

  2. 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.

    Központ konfigurálása

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

Az Azure konfigurálása leküldéses értesítések küldésére

  1. 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.
  2. 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.
  3. 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.
  4. 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#)::

  1. 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.

  2. 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;
    
  3. 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);
    }
    
  4. Tegye közzé újra a kiszolgálóprojektet.

Node.js háttérrendszer:

  1. Állítsa be a háttérprojektet.

  2. 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;
    
  3. 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:

  1. A QSAppDelegate.m fájlban importálja az iOS SDK-t és a QSTodoService.h-t:

    #import <MicrosoftAzureMobile/MicrosoftAzureMobile.h>
    #import "QSTodoService.h"
    
  2. A didFinishLaunchingWithOptionsQSAppDelegate.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];
    
  3. 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:

  1. 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%")
    }
    
  2. A ToDoTableViewController.swift fájlban cserélje le az let client adott MSClient sort inicializáló sort a következő sorra:

    let client = ClientManager.sharedClient
    
  3. 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
    }
    
  4. 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