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.

  1. v Azure Portalklikněte na App Servicesa pak vyberte back-end aplikace. v části Nastavenívyberte možnost Push.

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

    Configure a hub

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í

Konfigurace Azure pro odesílání nabízených oznámení

  1. 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.
  2. v Azure Portalvyberte procházet všechny>App Services. Pak vyberte back-end Mobile Apps.
  3. v části Nastavenívyberte App Service Push. Pak vyberte název centra oznámení.
  4. 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#):

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

  2. 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;
    
  3. 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);
    }
    
  4. Publikujte projekt serveru znovu.

Back-end Node.js:

  1. Nastavte svůj back-end projekt.

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

  1. V QSAppDelegate. mimportujte sadu SDK pro iOS a QSTodoService. h:

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

  1. 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%")
    }
    
  2. V ToDoTableViewController. SWIFTnahraďte let client řádek, který inicializuje MSClient tuto čáru:

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