Lägga till push-meddelanden i Xamarin.iOS-appen

Översikt

I den här självstudien lägger du till push-meddelanden i Xamarin.iOS-snabbstartsprojektet så att ett push-meddelande skickas till enheten varje gång en post infogas.

Om du inte använder det nedladdade snabbstartsserverprojektet behöver du tilläggspaketet för push-meddelanden. Mer information finns i Arbeta med SDK för .NET-serverserver för Azure Mobile Apps mer information.

Förutsättningar

Registrera appen för push-meddelanden på Apples utvecklarportal

Konfigurera mobilappen för att skicka push-meddelanden

  1. Starta Nyckelringsåtkomst din Mac. Öppna Mina certifikat under Kategori i det vänstranavigeringsfältet. Leta upp SSL-certifikatet som du laddade ned i föregående avsnitt och lämna sedan ut dess innehåll. Välj bara certifikatet (välj inte den privata nyckeln). Exportera den sedan.
  2. I Azure Portal duBläddra bland alla>App Services. Välj sedan Mobile Apps-backend.
  3. Under Inställningar väljer du App Service Push. Välj sedan namnet på din meddelandehubb.
  4. Gå till Apple Push Notification Services>Upload Certifikat. Upload .p12-filen och väljer rätt läge (beroende på om klientens SSL-certifikat från tidigare är produktion eller sandbox-miljö). Spara eventuella ändringar.

Din tjänst har nu konfigurerats för att fungera med push-meddelanden på iOS.

Uppdatera serverprojektet för att skicka push-meddelanden

I det här avsnittet uppdaterar du koden i ditt befintliga Mobile Apps för att skicka ett push-meddelande varje gång ett nytt objekt läggs till. Den här processen drivs av mallfunktionen i Azure Notification Hubs, som möjliggör plattformsoberoende push-meddelanden. De olika klienterna registreras för push-meddelanden med hjälp av mallar och en enda universell push kan komma till alla klientplattformar.

Välj någon av följande procedurer som matchar din backend-projekttyp– antingen .NET - Node.js en backend- ellerNode.js-backend.

.NET-backend-projekt

  1. I Visual Studio högerklickar du på serverprojektet. Välj sedan Hantera NuGet-paket. Sök efter Microsoft.Azure.NotificationHubsoch välj sedan Installera. Den här processen installerar Notification Hubs för att skicka meddelanden från backend-delen.

  2. I serverprojektet öppnar du ControllersTodoItemController.cs>. Lägg sedan till följande using-uttryck:

    using System.Collections.Generic;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Azure.Mobile.Server.Config;
    
  3. I metoden PostTodoItem lägger du till följande kod efter anropet till InsertAsync:

    // 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");
    }
    

    Den här processen skickar ett mallmeddelande som innehåller objektet. Text när ett nytt objekt infogas.

  4. Publicera om serverprojektet.

Node.js backend-projekt

  1. Konfigurera ditt backend-projekt.

  2. Ersätt den befintliga koden i todoitem.js med följande kod:

    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;  
    

    Den här processen skickar ett mallmeddelande som innehåller item.text när ett nytt objekt infogas.

  3. När du redigerar filen på den lokala datorn publicerar du om serverprojektet.

Konfigurera Xamarin.iOS-projektet

Konfigurera iOS-projektet i Xamarin Studio

  1. I Xamarin.Studio öppnar du Info.plist och uppdaterar paket-ID:t med det samlings-ID som du skapade tidigare med ditt nya app-ID.

  2. Rulla ned till Bakgrundslägen. Välj rutan Aktivera bakgrundslägen och rutan Fjärrmeddelanden .

  3. Dubbelklicka på projektet i lösningspanelen för att öppna Project alternativ.

  4. Under Skapa väljer du iOS-paketsignering och väljer motsvarande identitets- och etableringsprofil som du just konfigurerade för det här projektet.

    Detta säkerställer att projektet använder den nya profilen för kodsignering. Den officiella dokumentationen för Xamarin-enhetsetablering finns i Xamarin Device Provisioning.

Konfigurera iOS-projektet i Visual Studio

  1. I Visual Studio högerklickar du på projektet och klickar sedan på Egenskaper.

  2. På egenskapssidorna klickar du på fliken iOS-program och uppdaterar identifieraren med det ID som du skapade tidigare.

  3. På fliken för iOS-paketsignering väljer du motsvarande identitets- och etableringsprofil som du just konfigurerade för det här projektet.

    Detta säkerställer att projektet använder den nya profilen för kodsignering. Den officiella dokumentationen för Xamarin-enhetsetablering finns i Xamarin Device Provisioning.

  4. Dubbelklicka på Info.plist för att öppna den och aktivera sedan RemoteNotifications under Bakgrundslägen.

Lägg till push-meddelanden i appen

  1. I QSTodoService lägger du till följande egenskap så att AppDelegate kan hämta den mobila klienten:

    public MobileServiceClient GetClient {
        get
        {
            return client;
        }
        private set
        {
            client = value;
        }
    }
    
  2. Lägg till följande using -instruktion överst i filen AppDelegate.cs .

    using Microsoft.WindowsAzure.MobileServices;
    using Newtonsoft.Json.Linq;
    
  3. I AppDelegate åsidosätter du händelsen 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. Åsidosätt händelsen i samma RegisteredForRemoteNotifications fil. I den här koden registrerar du dig för ett enkelt mallmeddelande som skickas på alla plattformar som stöds av servern.

    Mer information om mallar med Notification Hubs finns i Mallar.

    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. Åsidosätt sedan händelsen 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();
         }
     }
    

Din app har nu uppdaterats för att stödja push-meddelanden.

Testa push-meddelanden i din app

  1. Tryck på knappen Kör för att skapa projektet och starta appen på en iOS-kompatibel enhet. Klicka sedan på OK för att acceptera push-meddelanden.

    Anteckning

    Du måste uttryckligen acceptera push-meddelanden från din app. Den här begäran inträffar bara första gången appen körs.

  2. I appen skriver du en uppgift och klickar sedan på plusikonen (+).

  3. Kontrollera att ett meddelande tas emot och klicka sedan på OK för att stänga meddelandet.

  4. Upprepa steg 2 och stäng appen omedelbart och kontrollera sedan att ett meddelande visas.

Du har slutfört den här självstudien.