Dela via


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

Översikt

I den här självstudien lägger du till push-meddelanden i snabbstartsprojektet Xamarin.iOS 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 paketet med push-meddelandetillägget. Mer information finns i Arbeta med .NET-server-SDK för Azure Mobile Apps .

Förutsättningar

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

Konfigurera din mobilapp för att skicka push-meddelanden

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

Tjänsten är nu konfigurerad 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-backend-projekt 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-överföring. De olika klienterna registreras för push-meddelanden med hjälp av mallar, och en enda universell push-överföring kan komma till alla klientplattformar.

Välj någon av följande procedurer som matchar din typ av backend-projekt – antingen .NET-serverdel eller Node.js serverdel.

.NET-backend-projekt

  1. Högerklicka på serverprojektet i Visual Studio. Välj sedan Hantera NuGet-paket. Sök efter Microsoft.Azure.NotificationHubs, och välj sedan Installera. Den här processen installerar Notification Hubs-biblioteket för att skicka meddelanden från serverdelen.

  2. Öppna Controllers>TodoItemController.cs i serverprojektet. Lägg sedan till följande med hjälp av -instruktioner:

    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. Återpublicera 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 serverprojektet igen.

Konfigurera Xamarin.iOS-projektet

Konfigurera iOS-projektet i Xamarin Studio

  1. I Xamarin.Studio öppnar du Info.plist och uppdaterar paketidentifieraren med det paket-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 Projektalternativ.

  4. Under Skapa väljer du iOS-paketsignering och väljer motsvarande identitets- och etableringsprofil som du just har konfigurerat 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. Högerklicka på projektet i Visual Studio och klicka 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 iOS-paketsignering väljer du motsvarande identitets- och etableringsprofil som du just har konfigurerat 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ägga till push-meddelanden i din app

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

    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. I samma fil åsidosätter du händelsen RegisteredForRemoteNotifications. 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();
         }
     }
    

Appen 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 och klicka sedan på OK för att acceptera push-meddelanden.

    Anmärkning

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

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

  3. Kontrollera att ett meddelande har tagits 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 framgångsrikt slutfört den här självstudiekursen.