Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ö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
- Slutför snabbstartsguiden för Xamarin.iOS .
- En fysisk iOS-enhet. Push-meddelanden stöds inte av iOS-simulatorn.
Registrera appen för push-meddelanden på Apples utvecklarportal
- Registrera ett app-ID för din app. Skapa ett explicit app-ID (inte ett jokerteckenapp-ID) och använd det exakta paket-ID som finns i ditt Xcode-snabbstartsprojekt. Det är också viktigt att du väljer alternativet Push-meddelanden .
- För att förbereda för att konfigurera push-meddelanden skapar du antingen ett "Development" eller "Distribution" SSL-certifikat.
Konfigurera din mobilapp för att skicka push-meddelanden
- 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.
- I Azure-portalen väljer du Bläddra bland alla>App Services. Välj sedan din Mobile Apps-serverdel.
- Under Inställningar väljer du App Service Push. Välj sedan namnet på meddelandehubben.
- 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
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.Ö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;
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.
Återpublicera serverprojektet.
Node.js backend-projekt
Konfigurera ditt backend-projekt.
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.
När du redigerar filen på den lokala datorn publicerar du serverprojektet igen.
Konfigurera Xamarin.iOS-projektet
Konfigurera iOS-projektet i Xamarin Studio
I Xamarin.Studio öppnar du Info.plist och uppdaterar paketidentifieraren med det paket-ID som du skapade tidigare med ditt nya app-ID.
Rulla ned till bakgrundslägen. Välj rutan Aktivera bakgrundslägen och rutan Fjärrmeddelanden .
Dubbelklicka på projektet i lösningspanelen för att öppna Projektalternativ.
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
Högerklicka på projektet i Visual Studio och klicka sedan på Egenskaper.
På egenskapssidorna klickar du på fliken iOS-program och uppdaterar identifieraren med det ID som du skapade tidigare.
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.
Dubbelklicka på Info.plist för att öppna den och aktivera sedan RemoteNotifications under Bakgrundslägen.
Lägga till push-meddelanden i din app
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; } }
Lägg till följande
using
instruktion överst i filen AppDelegate.cs .using Microsoft.WindowsAzure.MobileServices; using Newtonsoft.Json.Linq;
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; }
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); }
Å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
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.
I appen skriver du en uppgift och klickar sedan på plusikonen (+).
Kontrollera att ett meddelande har tagits emot och klicka sedan på OK för att stänga meddelandet.
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.