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
- Slutför snabbstartskursen 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 samlings-ID:t i Xcode-snabbstartsprojektet för Paket-ID. Det är också viktigt att du väljer alternativet Push-meddelanden .
- Förbered sedan konfigurationen av push-meddelanden genom att skapa ssl-certifikatet "Utveckling" eller "Distribution".
Konfigurera mobilappen för att skicka push-meddelanden
- Starta Nyckelringsåtkomst på 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.
- I Azure Portal duBläddra bland alla>App Services. Välj sedan Mobile Apps-backend.
- Under Inställningar väljer du App Service Push. Välj sedan namnet på din meddelandehubb.
- 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
I Visual Studio högerklickar du på serverprojektet. Välj sedan Hantera NuGet-paket. Sök efter
Microsoft.Azure.NotificationHubs
och välj sedan Installera. Den här processen installerar Notification Hubs för att skicka meddelanden från backend-delen.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;
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.
Publicera om 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 om serverprojektet.
Konfigurera Xamarin.iOS-projektet
Konfigurera iOS-projektet i Xamarin Studio
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.
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 Project alternativ.
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
I Visual Studio högerklickar du på projektet och klickar sedan på Egenskaper.
På egenskapssidorna klickar du på fliken iOS-program och uppdaterar identifieraren med det ID som du skapade tidigare.
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.
Dubbelklicka på Info.plist för att öppna den och aktivera sedan RemoteNotifications under Bakgrundslägen.
Lägg till push-meddelanden i appen
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; } }
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; }
Å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); }
Å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
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.
I appen skriver du en uppgift och klickar sedan på plusikonen (+).
Kontrollera att ett meddelande tas 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 slutfört den här självstudien.