Přidání nabízených oznámení do aplikace Xamarin.iOS

Přehled

V tomto kurzu přidáte nabízená oznámení do projektu rychlého startu Xamarin.iOS tak, aby se nabízené oznámení odesílalo do zařízení při každém vložení záznamu.

Pokud stažený serverový projekt pro rychlý start nepotřebujete, budete potřebovat balíček rozšíření nabízených oznámení. Další informace najdete v tématu Práce se sadou SDK back-endového serveru .NET Mobile Apps Azure.

Požadavky

Registrace aplikace pro nabízená oznámení na portálu pro vývojáře Apple

  • Zaregistrujte PRO svou aplikaci ID aplikace. Vytvořte explicitní ID aplikace (nikoli ID aplikace se zástupnými znaky) a pro ID sady prostředků použijte přesné ID sady prostředků, které je ve vašem projektu Xcode pro rychlý start. Je také důležité vybrat možnost Nabízená oznámení.
  • Dále vytvořte certifikát SSL Vývoj nebo Distribuce, abyste se připravili na konfiguraci nabízených oznámení.

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

  1. Na Macu spusťte Keychain Access. V levém navigačním panelu v části Kategorie otevřete Moje certifikáty. Vyhledejte certifikát SSL, který jste stáhli v předchozí části, a pak prozradit jeho obsah. Vyberte pouze certifikát (nevyberte privátní klíč). Pak ho exportujte.
  2. V Azure Portal vyberte Procházet vše>App Services. Pak vyberte váš Mobile Apps back-end.
  3. V Nastavení vyberte App Service push. Pak vyberte název centra oznámení.
  4. Přejděte na Apple Push Notification Services>Upload Certificate. Upload souboru .p12 vyberte správný režim (v závislosti na tom, jestli je váš klientský certifikát SSL z dřívější verze produkční nebo sandboxový). Uložte všechny změny.

Vaše služba je teď nakonfigurovaná tak, aby fungovala s nabízenými oznámeními v iOSu.

Aktualizace projektu serveru tak, aby odesílal nabízená oznámení

V této části aktualizujete kód ve stávajícím projektu Mobile Apps back-end tak, aby při každém přidání nové položky odesílal nabízené oznámení. Tento proces využívá funkci šablony služby Azure Notification Hubs, která umožňuje nabízení napříč platformami. Various clients are registered for push notifications using templates, and a single universal push can get to all client platforms.

Zvolte jeden z následujících postupů, který odpovídá typu back-endového projektu – buď back-endu .NET , neboNode.js back-endu.

Back-endový projekt .NET

  1. V Visual Studio klikněte pravým tlačítkem na projekt serveru. Pak vyberte Spravovat NuGet balíčky. Vyhledejte Microsoft.Azure.NotificationHubsa pak vyberte Nainstalovat. Tento proces nainstaluje knihovnu Notification Hubs pro odesílání oznámení z back-endu.

  2. V projektu serveru otevřete souborControllersTodoItemController.cs>. Pak přidejte následující příkazy using:

    using System.Collections.Generic;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Azure.Mobile.Server.Config;
    
  3. Do metody PostTodoItem přidejte za volání metody InsertAsync následující kód:

    // 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);
    
    // Send the message so that all template registrations that contain "messageParam"
    // receive the notifications. This includes APNS, GCM, WNS, and MPNS template registrations.
    Dictionary<string,string> templateParams = new Dictionary<string,string>();
    templateParams["messageParam"] = item.Text + " was added to the list.";
    
    try
    {
        // Send the push notification and log the results.
        var result = await hub.SendTemplateNotificationAsync(templateParams);
    
        // 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");
    }
    

    Tento proces odešle oznámení šablony, které obsahuje položku. Text při vložení nové položky.

  4. Znovu publikujte projekt serveru.

Node.js back-endového projektu

  1. Nastavte back-endový projekt.

  2. Nahraďte existující kód v todoitem.js 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();
    
    table.insert(function (context) {
    // For more information about the Notification Hubs JavaScript SDK,
    // see https://aka.ms/nodejshubs.
    logger.info('Running TodoItem.insert');
    
    // Define the template payload.
    var payload = '{"messageParam": "' + context.item.text + '" }';  
    
    // Execute the insert. The insert returns the results as a promise.
    // Do the push as a post-execute action within the promise flow.
    return context.execute()
        .then(function (results) {
            // Only do the push if configured.
            if (context.push) {
                // Send a template notification.
                context.push.send(null, payload, function (error) {
                    if (error) {
                        logger.error('Error while sending push notification: ', error);
                    } else {
                        logger.info('Push notification sent successfully!');
                    }
                });
            }
            // Don't forget to return the results from the context.execute().
            return results;
        })
        .catch(function (error) {
            logger.error('Error while running context.execute: ', error);
        });
    });
    
    module.exports = table;  
    

    Tento proces odešle oznámení šablony, které obsahuje item.text při vložení nové položky.

  3. Když upravíte soubor na místním počítači, znovu publikujte projekt serveru.

Konfigurace projektu Xamarin.iOS

Konfigurace projektu pro iOS v Xamarin Studio

  1. V Xamarin.Studiu otevřete soubor Info.plist a aktualizujte identifikátor sady prostředků pomocí ID sady prostředků, které jste vytvořili dříve, s novým ID aplikace.

  2. Posuňte se dolů na Režimy pozadí. Zaškrtněte políčko Povolit režimy pozadí a pole Vzdálená oznámení.

  3. Poklikejte na projekt na panelu řešení a otevřete tak Project možnosti.

  4. V části Build (Sestavení ) zvolte iOS Bundle Signing (Podepisování sady prostředků iOS) a vyberte odpovídající identitu a zřizovací profil, který jste právě nastavili pro tento projekt.

    Tím se zajistí, že projekt použije nový profil pro podepisování kódu. Oficiální dokumentaci ke zřizování zařízení Xamarin najdete v tématu Zřizování zařízení Xamarin.

Konfigurace projektu pro iOS v Visual Studio

  1. V Visual Studio klikněte pravým tlačítkem na projekt a pak klikněte na Vlastnosti.

  2. Na stránkách vlastností klikněte na kartu Aplikace pro iOS a aktualizujte identifikátor pomocí ID , které jste vytvořili dříve.

  3. Na kartě Podepisování sady prostředků iOS vyberte odpovídající identitu a zřizovací profil, které jste právě nastavili pro tento projekt.

    Tím se zajistí, že projekt použije nový profil pro podepisování kódu. Oficiální dokumentaci ke zřizování zařízení Xamarin najdete v tématu Zřizování zařízení Xamarin.

  4. Poklikejte na soubor Info.plist, aby se otevřel, a potom v části Režimy pozadí povolte RemoteNotifications.

Přidání nabízených oznámení do aplikace

  1. V QSTodoService přidejte následující vlastnost, aby AppDelegate mohl získat mobilního klienta:

    public MobileServiceClient GetClient {
        get
        {
            return client;
        }
        private set
        {
            client = value;
        }
    }
    
  2. Na začátek souboru usingAppDelegate.cs přidejte následující příkaz.

    using Microsoft.WindowsAzure.MobileServices;
    using Newtonsoft.Json.Linq;
    
  3. V AppDelegate přepište událost FinishedLaunching :

     public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
     {
         // registers for push for iOS8
         var settings = UIUserNotificationSettings.GetSettingsForTypes(
             UIUserNotificationType.Alert
             | UIUserNotificationType.Badge
             | UIUserNotificationType.Sound,
             new NSSet());
    
         UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
         UIApplication.SharedApplication.RegisterForRemoteNotifications();
    
         return true;
     }
    
  4. Ve stejném souboru přepište událost RegisteredForRemoteNotifications . V tomto kódu zaregistrujete jednoduché oznámení šablony, které server odesílá napříč všemi podporovanými platformami.

    Další informace o šablonách s Notification Hubs najdete v tématu Šablony.

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
    {
        MobileServiceClient client = QSTodoService.DefaultService.GetClient;
    
        const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";
    
        JObject templates = new JObject();
        templates["genericMessage"] = new JObject
        {
            {"body", templateBodyAPNS}
        };
    
        // Register for push with your mobile app
        var push = client.GetPush();
        push.RegisterAsync(deviceToken, templates);
    }
    
  5. Potom přepište událost DidReceivedRemoteNotification :

     public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
     {
         NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;
    
         string alert = string.Empty;
         if (aps.ContainsKey(new NSString("alert")))
             alert = (aps [new NSString("alert")] as NSString).ToString();
    
         //show alert
         if (!string.IsNullOrEmpty(alert))
         {
             UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null);
             avAlert.Show();
         }
     }
    

Vaše aplikace je teď aktualizovaná tak, aby podporovala nabízená oznámení.

Testování nabízených oznámení v aplikaci

  1. Stisknutím tlačítka Run (Spustit) sestavte projekt, spusťte aplikaci na zařízení s iOSem a potom kliknutím na OK přijměte nabízená oznámení.

    Poznámka

    Musíte explicitně přijímat nabízená oznámení z vaší aplikace. K tomuto požadavku dochází pouze při prvním spuštění aplikace.

  2. V aplikaci zadejte úkol a potom klikněte na ikonu se znaménkem plus (+).

  3. Ověřte, že se oznámení přijalo, a kliknutím na OK oznámení zavřete.

  4. Opakujte krok 2 a aplikaci okamžitě zavřete a pak ověřte, že se zobrazuje oznámení.

Tento kurz jste úspěšně dokončili.