Leküldéses értesítések hozzáadása a Xamarin.iOS-alkalmazáshoz
Áttekintés
Ebben az oktatóanyagban leküldéses értesítéseket fog hozzáadni a Xamarin.iOS gyors kezdési projekthez, hogy a rendszer leküldéses értesítést küld az eszközre minden alkalommal, amikor beszúr egy rekordot.
Ha nem használja a letöltött gyors indítási kiszolgálóprojektet, szüksége lesz a leküldéses értesítési bővítménycsomagra. További információ: Work with the .NET backend server SDK for Azure Mobile Apps (Az Azure-hoz készült .NET háttérkiszolgáló SDK-jának Mobile Apps).
Előfeltételek
- A Xamarin.iOS gyors üzembe helyezési oktatóanyagának befejezése .
- Egy fizikai iOS-eszköz. Az iOS-szimulátor nem támogatja a leküldéses értesítéseket.
Az alkalmazás regisztrálása leküldéses értesítésekhez az Apple fejlesztői portálján
- Alkalmazásazonosító regisztrálása az alkalmazáshoz. Hozzon létre egy explicit alkalmazásazonosítót (nem helyettesítő alkalmazásazonosítót), és a Csomagazonosítóhoz használja az Xcode gyorsindítási projektben található csomagazonosítót. Emellett rendkívül fontos, hogy a Leküldéses értesítések lehetőséget válassza.
- Ezután a leküldéses értesítések konfigurálásához hozzon létre egy "Fejlesztés" vagy egy "Terjesztés" SSL-tanúsítványt.
A mobilalkalmazás konfigurálása leküldéses értesítések küldére
- Indítsa el a Kulcslánc-hozzáférés et Mac gépén. A bal oldali navigációs sávOn, a Kategória alatt nyissa meg a Saját tanúsítványok gombra. Keresse meg az előző szakaszban letöltött SSL-tanúsítványt, majd fedje fel annak tartalmát. Csak a tanúsítványt jelölje ki (ne válassza ki a titkos kulcsot). Ezután exportálja.
- A Azure Portal válassza az Összes tallózása lehetőséget>App Services. Ezután válassza ki a Mobile Apps háttért.
- A Gépház válassza a App Service lehetőséget. Ezután válassza ki az értesítési központ nevét.
- Ugrás az Apple Push Notification Services>Betöltési tanúsítványra. Töltse fel a .p12 fájlt, és válassza ki a megfelelő módot (attól függően, hogy az ügyfél SSL-tanúsítványa korábban éles vagy sandbox volt-e). Mentse a módosításokat.
A szolgáltatás most már leküldéses értesítésekkel való munkára van konfigurálva iOS-en.
A kiszolgálóprojekt frissítése leküldéses értesítések küldéhez
Ebben a szakaszban frissíti a meglévő háttérprojekt Mobile Apps, hogy leküldéses értesítést küldjön minden alkalommal, amikor új elemet adnak hozzá. Ezt a folyamatot az Azure Notification Hubs sablon funkciója működteti, amely platformfüggetlen leküldéseket tesz lehetővé. A különböző ügyfelek sablonokkal vannak regisztrálva a leküldéses értesítésekhez, és egyetlen univerzális leküldéses értesítés minden ügyfélplatformra lekért.
Válasszon a háttérprojekt típusának megfelelő alábbi eljárások közül– legyen az .NET-háttér vagy Node.js háttér.
.NET-háttérprojekt
A Visual Studio kattintson a jobb gombbal a kiszolgálóprojektre. Ezután válassza a Manage NuGet Packages (NuGet-csomagok kezelése) lehetőséget. Keressen a kifejezésre
Microsoft.Azure.NotificationHubs
, majd válassza a Telepítés lehetőséget. Ez a folyamat telepíti a Notification Hubs kódtárat, amely értesítéseket küld a háttérből.A kiszolgálóprojektben nyissa meg a ControllersTodoItemController.cs >tartományvezérlőt. Ezután adja hozzá a következő using utasításokat:
using System.Collections.Generic; using Microsoft.Azure.NotificationHubs; using Microsoft.Azure.Mobile.Server.Config;
A PostTodoItem metódusban adja hozzá a következő kódot az InsertAsync hívása után:
// 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"); }
Ez a folyamat egy sablonértesítést küld, amely tartalmazza az elemet. Szöveg új elem beszúrásakor.
Tegye közzé újra a kiszolgálóprojektet.
Node.js projekt létrehozása
Állítsa be a háttérprojektet.
Cserélje le a todoitem.js meglévő kódot a következőre:
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;
Ez a folyamat egy sablonértesítést küld, amely tartalmazza az item.text elemet egy új elem beszúrásakor.
Amikor szerkeszti a fájlt a helyi számítógépen, tegye közzé újra a kiszolgálóprojektet.
A Xamarin.iOS-projekt konfigurálása
Az iOS-projekt konfigurálása a Xamarin Studióban
A Xamarin.Studióban nyissa meg az Info.plist-et, és frissítse a csomagazonosítót az új alkalmazásazonosítóval korábban létrehozott csomagazonosítóval.
Görgessen le a Háttérmódok lapra. Jelölje be a Háttérmódok engedélyezése és a Távoli értesítések jelölőnégyzetet .
Kattintson duplán a projektre a Megoldás panelen a Project megnyitásához.
A Build (Felépítés) alatt válassza az iOS Bundle Signing (iOS-csomagok aláírása) lehetőséget, majd válassza ki a projekthez éppen beállított megfelelő identitást és létesítő profilt.
Ez biztosítja, hogy a projekt az új profilt használja a kódalá aláíráshoz. A Xamarin eszközátépítés hivatalos dokumentációját a Xamarin Device Provisioning (Xamarin eszközátépítés) dokumentumban találhatja meg.
Az iOS-projekt konfigurálása a Visual Studio
A Visual Studio kattintson a jobb gombbal a projektre, majd kattintson a Tulajdonságok elemre.
A tulajdonságok lapján kattintson az iOS-alkalmazás fülre , és frissítse az Azonosítót a korábban létrehozott azonosítóval.
Az iOS-csomagalá aláírása lapon válassza ki a projekthez éppen beállított megfelelő identitást és létesítő profilt.
Ez biztosítja, hogy a projekt az új profilt használja a kódalá aláíráshoz. A Xamarin eszközátépítés hivatalos dokumentációját a Xamarin Device Provisioning (Xamarin eszközátépítés) dokumentumban találhatja meg.
Kattintson duplán az Info.plist fájlra annak megnyitásához, majd engedélyezze a RemoteNotifications et a Háttérmódok alatt.
Leküldéses értesítések hozzáadása az alkalmazáshoz
A QSTodoService szolgáltatásban adja hozzá a következő tulajdonságot, hogy az AppDelegate be tudja szerezni a mobil ügyfelet:
public MobileServiceClient GetClient { get { return client; } private set { client = value; } }
Adja hozzá a következő
using
utasítást az AppDelegate.cs fájl tetejéhez .using Microsoft.WindowsAzure.MobileServices; using Newtonsoft.Json.Linq;
Az AppDelegate-ben bírálja felül a FinishedLaunching eseményt:
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; }
Ugyanabban a fájlban bírálja felül az
RegisteredForRemoteNotifications
eseményt. Ebben a kódban egy egyszerű sablonértesítésre regisztrál, amelyet a kiszolgáló az összes támogatott platformra küld.További információ a sablonokkal és Notification Hubs sablonokról.
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); }
Ezután bírálja felül a DidReceivedRemoteNotification eseményt:
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(); } }
Az alkalmazás most már frissült, hogy támogassa a leküldéses értesítéseket.
Leküldéses értesítések tesztelése az alkalmazásban
Nyomja le a Futtatás gombot a projekt felépítéséhez és az alkalmazás iOS-kompatibilis eszközön való futtatásához, majd kattintson az OK gombra a leküldéses értesítések elfogadásához.
Megjegyzés
Explicit módon el kell fogadnia az alkalmazásból származó leküldéses értesítéseket. Ez a kérés csak az alkalmazás első futtatásakor történik meg.
Az alkalmazásban írjon be egy feladatot, majd kattintson a plusz (+) ikonra.
Ellenőrizze, hogy érkezett-e értesítés, majd kattintson az OK gombra az értesítés elvetéséhez.
Ismételje meg a 2. lépést, és azonnal zárja be az alkalmazást, majd ellenőrizze, hogy megjelenik-e értesítés.
Sikeresen befejezte ezt az oktatóanyagot.