Megosztás a következőn keresztül:


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

Az alkalmazás regisztrálása leküldéses értesítésekhez az Apple fejlesztői portálján

A mobilalkalmazás konfigurálása leküldéses értesítések küldére

  1. 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.
  2. 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.
  3. 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.
  4. 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

  1. 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.

  2. 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;
    
  3. 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.

  4. Tegye közzé újra a kiszolgálóprojektet.

Node.js projekt létrehozása

  1. Állítsa be a háttérprojektet.

  2. 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.

  3. 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

  1. 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.

  2. 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 .

  3. Kattintson duplán a projektre a Megoldás panelen a Project megnyitásához.

  4. 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

  1. A Visual Studio kattintson a jobb gombbal a projektre, majd kattintson a Tulajdonságok elemre.

  2. 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.

  3. 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.

  4. 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

  1. 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;
        }
    }
    
  2. Adja hozzá a következő using utasítást az AppDelegate.cs fájl tetejéhez .

    using Microsoft.WindowsAzure.MobileServices;
    using Newtonsoft.Json.Linq;
    
  3. 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;
     }
    
  4. 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);
    }
    
  5. 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

  1. 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.

  2. Az alkalmazásban írjon be egy feladatot, majd kattintson a plusz (+) ikonra.

  3. Ellenőrizze, hogy érkezett-e értesítés, majd kattintson az OK gombra az értesítés elvetéséhez.

  4. 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.