Share via


Biztonságos leküldéses értesítések küldése az Azure Notification Hubsból

Áttekintés

A Leküldéses értesítések támogatása a Microsoft Azure-ban lehetővé teszi egy könnyen használható, többplatformos, felskálázott leküldéses infrastruktúra elérését, amely jelentősen leegyszerűsíti a leküldéses értesítések mobilplatformokra szánt fogyasztói és nagyvállalati alkalmazások számára történő megvalósítását.

Szabályozási vagy biztonsági korlátozások miatt előfordulhat, hogy egy alkalmazás bele szeretne foglalni valamit az értesítésbe, amely nem továbbítható a szabványos leküldéses értesítési infrastruktúrán keresztül. Ez az oktatóanyag bemutatja, hogyan érheti el ugyanazt a felületet úgy, hogy bizalmas adatokat küld egy biztonságos, hitelesített kapcsolaton keresztül az ügyféleszköz és az alkalmazás háttérrendszere között.

Magas szinten a folyamat a következő:

  1. Az alkalmazás háttérrendszere:
    • Biztonságos hasznos adatokat tárol a háttéradatbázisban.
    • Elküldi az értesítés azonosítóját az eszköznek (a rendszer nem küld biztonságos adatokat).
  2. Az alkalmazás az eszközön az értesítés fogadásakor:
    • Az eszköz kapcsolatba lép a háttérrendszerrel, és kéri a biztonságos hasznos adatokat.
    • Az alkalmazás értesítésként megjelenítheti a hasznos adatokat az eszközön.

Fontos megjegyezni, hogy az előző folyamatban (és ebben az oktatóanyagban) feltételezzük, hogy az eszköz egy hitelesítési jogkivonatot tárol a helyi tárolóban, miután a felhasználó bejelentkezett. Ez teljesen zökkenőmentes élményt garantál, mivel az eszköz ezzel a jogkivonattal lekérheti az értesítés biztonságos hasznos adatait. Ha az alkalmazás nem tárolja a hitelesítési jogkivonatokat az eszközön, vagy ha ezek a jogkivonatok lejártak, az eszközalkalmazásnak az értesítés érkezésekor egy általános értesítésnek kell megjelennie, amely felszólítja a felhasználót az alkalmazás elindítására. Az alkalmazás ezután hitelesíti a felhasználót, és megjeleníti az értesítés hasznos adatait.

Ez az oktatóanyag bemutatja, hogyan küldhet leküldéses értesítéseket biztonságosan. Az oktatóanyag a Felhasználók értesítése oktatóanyagra épül, ezért először az oktatóanyag lépéseit kell elvégeznie.

Megjegyzés

Ez az oktatóanyag feltételezi, hogy létrehozta és konfigurálta az értesítési központot az Értesítések küldése Univerzális Windows-platform alkalmazásokba című cikkben leírtak szerint. Azt is vegye figyelembe, hogy Windows Phone-telefon 8.1-hez windowsos (nem Windows Phone-telefon) hitelesítő adatokra van szükség, és a háttérfeladatok nem működnek Windows Phone-telefon 8.0-s vagy Silverlight 8.1-en. Windows Áruházbeli alkalmazások esetén csak akkor kaphat értesítéseket háttérfeladaton keresztül, ha az alkalmazás zárolási képernyője engedélyezve van (kattintson az Appmanifest jelölőnégyzetére).

WebAPI-projekt

  1. A Visual Studióban nyissa meg a Felhasználók értesítése oktatóanyagban létrehozott AppBackend projektet.

  2. A Notifications.cs fájlban cserélje le a teljes Notifications osztályt a következő kódra. Mindenképpen cserélje le a helyőrzőket az értesítési központ kapcsolati sztring (teljes hozzáféréssel) és a központ nevére. Ezeket az értékeket a Azure Portal szerezheti be. Ez a modul most a különböző biztonságos értesítéseket jelöli, amelyeket a rendszer elküld. A teljes megvalósítás során az értesítések egy adatbázisban lesznek tárolva; az egyszerűség kedvéért ebben az esetben a memóriában tároljuk őket.

     public class Notification
     {
         public int Id { get; set; }
         public string Payload { get; set; }
         public bool Read { get; set; }
     }
    
     public class Notifications
     {
         public static Notifications Instance = new Notifications();
    
         private List<Notification> notifications = new List<Notification>();
    
         public NotificationHubClient Hub { get; set; }
    
         private Notifications() {
             Hub = NotificationHubClient.CreateClientFromConnectionString("{conn string with full access}",     "{hub name}");
         }
    
         public Notification CreateNotification(string payload)
         {
             var notification = new Notification() {
             Id = notifications.Count,
             Payload = payload,
             Read = false
             };
    
             notifications.Add(notification);
    
             return notification;
         }
    
         public Notification ReadNotification(int id)
         {
             return notifications.ElementAt(id);
         }
     }
    
  3. A NotificationsController.cs fájlban cserélje le a NotificationsController osztálydefinícióban található kódot a következő kódra. Ez az összetevő lehetővé teszi, hogy az eszköz biztonságosan lekérje az értesítést, és lehetővé teszi (az oktatóanyag alkalmazásában) a biztonságos leküldés aktiválását az eszközökre. Vegye figyelembe, hogy amikor az értesítési központba küldi az értesítést, csak nyers értesítést küldünk az értesítés azonosítójával (és nincs tényleges üzenet):

     public NotificationsController()
     {
         Notifications.Instance.CreateNotification("This is a secure notification!");
     }
    
     // GET api/notifications/id
     public Notification Get(int id)
     {
         return Notifications.Instance.ReadNotification(id);
     }
    
     public async Task<HttpResponseMessage> Post()
     {
         var secureNotificationInTheBackend = Notifications.Instance.CreateNotification("Secure confirmation.");
         var usernameTag = "username:" + HttpContext.Current.User.Identity.Name;
    
         // windows
         var rawNotificationToBeSent = new Microsoft.Azure.NotificationHubs.WindowsNotification(secureNotificationInTheBackend.Id.ToString(),
                         new Dictionary<string, string> {
                             {"X-WNS-Type", "wns/raw"}
                         });
         await Notifications.Instance.Hub.SendNotificationAsync(rawNotificationToBeSent, usernameTag);
    
         // apns
         await Notifications.Instance.Hub.SendAppleNativeNotificationAsync("{\"aps\": {\"content-available\": 1}, \"secureId\": \"" + secureNotificationInTheBackend.Id.ToString() + "\"}", usernameTag);
    
         // gcm
         await Notifications.Instance.Hub.SendGcmNativeNotificationAsync("{\"data\": {\"secureId\": \"" + secureNotificationInTheBackend.Id.ToString() + "\"}}", usernameTag);
    
         return Request.CreateResponse(HttpStatusCode.OK);
     }
    

Vegye figyelembe, hogy a Post metódus most nem küld bejelentési értesítést. Nyers értesítést küld, amely csak az értesítés azonosítóját tartalmazza, bizalmas tartalmat nem. Emellett mindenképpen tegye megjegyzésbe azoknak a platformoknak a küldési műveletét, amelyekhez nincs konfigurálva hitelesítő adatok az értesítési központban, mivel ezek hibákat eredményeznek.

  1. Most újra üzembe fogjuk helyezni ezt az alkalmazást egy Azure-webhelyen, hogy minden eszközről elérhető legyen. Kattintson jobb gombbal az AppBackend projektre, és válassza a Publish (Közzététel) lehetőséget.
  2. Közzétételi célként válassza az Azure-webhely lehetőséget. Jelentkezzen be azure-fiókjával, válasszon ki egy meglévő vagy új webhelyet, és jegyezze fel a cél URL-cím tulajdonságát a Kapcsolat lapon. Az oktatóanyag későbbi részében erre az URL-címre fogunk hivatkozni háttérbeli végpontként . Kattintson a Közzététel gombra.

A Windows Phone-telefon projekt módosítása

  1. A NotifyUserWindowsPhone projektben adja hozzá a következő kódot az App.xaml.cs fájlhoz a leküldéses háttérfeladat regisztrálásához. Szúrja be az alábbi kódsort az OnLaunched() metódus végén:

    RegisterBackgroundTask();
    
  2. Az App.xaml.cs fájlban adja hozzá a következő kódot közvetlenül a OnLaunched() metódus után:

    private async void RegisterBackgroundTask()
    {
        if (!Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks.Any(i => i.Value.Name == "PushBackgroundTask"))
        {
            var result = await BackgroundExecutionManager.RequestAccessAsync();
            var builder = new BackgroundTaskBuilder();
    
            builder.Name = "PushBackgroundTask";
            builder.TaskEntryPoint = typeof(PushBackgroundComponent.PushBackgroundTask).FullName;
            builder.SetTrigger(new Windows.ApplicationModel.Background.PushNotificationTrigger());
            BackgroundTaskRegistration task = builder.Register();
        }
    }
    
  3. Adja hozzá a következő using utasításokat az App.xaml.cs fájl elejéhez:

    using Windows.Networking.PushNotifications;
    using Windows.ApplicationModel.Background;
    
  4. A Visual Studio File (Fájl) menüjében kattintson az Save All (Összes mentése) parancsra.

A leküldéses háttér összetevő létrehozása

A következő lépés a leküldéses háttérösszetevő létrehozása.

  1. A Megoldáskezelőben kattintson a jobb gombbal a megoldás legfelső szintű csomópontjára (ebben az esetben a SecurePush megoldás ), majd kattintson a Hozzáadás, majd az Új projekt elemre.

  2. Bontsa ki az Áruházbeli alkalmazások elemet, majd kattintson a Windows Phone-telefon Alkalmazások elemre, majd kattintson Windows-futtatókörnyezet Összetevő (Windows Phone-telefon) elemre. Adja a projektnek a PushBackgroundComponent nevet, majd kattintson az OK gombra a projekt létrehozásához.

    Képernyőkép az Új projekt hozzáadása párbeszédpanelről, amelyen a Windows-futtatókörnyezet Összetevő (Windows Phone-telefon) Visual C# lehetőség van kiemelve.

  3. A Megoldáskezelőben kattintson a jobb gombbal a PushBackgroundComponent (Windows Phone-telefon 8.1) projektre, majd kattintson a Hozzáadás, majd az Osztály elemre. Nevezze el az új osztályt PushBackgroundTask.cs. Kattintson a Hozzáadás gombra az osztály létrehozásához.

  4. Cserélje le a PushBackgroundComponent névtérdefiníció teljes tartalmát a következő kódra, és helyettesítse a helyőrzőt {back-end endpoint} a háttérrendszer üzembe helyezése során beszerzett háttérvégponttal:

    public sealed class Notification
        {
            public int Id { get; set; }
            public string Payload { get; set; }
            public bool Read { get; set; }
        }
    
        public sealed class PushBackgroundTask : IBackgroundTask
        {
            private string GET_URL = "{back-end endpoint}/api/notifications/";
    
            async void IBackgroundTask.Run(IBackgroundTaskInstance taskInstance)
            {
                // Store the content received from the notification so it can be retrieved from the UI.
                RawNotification raw = (RawNotification)taskInstance.TriggerDetails;
                var notificationId = raw.Content;
    
                // retrieve content
                BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
                var httpClient = new HttpClient();
                var settings = ApplicationData.Current.LocalSettings.Values;
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", (string)settings["AuthenticationToken"]);
    
                var notificationString = await httpClient.GetStringAsync(GET_URL + notificationId);
    
                var notification = JsonConvert.DeserializeObject<Notification>(notificationString);
    
                ShowToast(notification);
    
                deferral.Complete();
            }
    
            private void ShowToast(Notification notification)
            {
                ToastTemplateType toastTemplate = ToastTemplateType.ToastText01;
                XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
                XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
                toastTextElements[0].AppendChild(toastXml.CreateTextNode(notification.Payload));
                ToastNotification toast = new ToastNotification(toastXml);
                ToastNotificationManager.CreateToastNotifier().Show(toast);
            }
        }
    
  5. A Megoldáskezelőben kattintson a jobb gombbal a PushBackgroundComponent (Windows Phone-telefon 8.1) projektre, majd kattintson a Manage NuGet Packages (NuGet-csomagok kezelése) elemre.

  6. A képernyő bal oldalán kattintson az Online lehetőségre.

  7. A Search (Keresés) mezőbe írja be a Http Client (HTTP-ügyfél) kifejezést.

  8. Az eredmények listájában kattintson a Microsoft HTTP-ügyfélkódtárak, majd a Telepítés elemre. Fejezze be a telepítést.

  9. A NuGet Search (Keresés) mezőjébe írja be a Json.net kifejezést. Telepítse a Json.NET csomagot, majd zárja be a NuGet-csomagkezelő ablakot.

  10. Adja hozzá a következő using utasításokat a PushBackgroundTask.cs fájl elejéhez:

    using Windows.ApplicationModel.Background;
    using Windows.Networking.PushNotifications;
    using System.Net.Http;
    using Windows.Storage;
    using System.Net.Http.Headers;
    using Newtonsoft.Json;
    using Windows.UI.Notifications;
    using Windows.Data.Xml.Dom;
    
  11. A Megoldáskezelőben a NotifyUserWindowsPhone (Windows Phone-telefon 8.1) projektben kattintson a jobb gombbal a Hivatkozások elemre, majd kattintson a Hivatkozás hozzáadása... elemre. A Referenciakezelő párbeszédpanelen jelölje be a PushBackgroundComponent melletti jelölőnégyzetet, majd kattintson az OK gombra.

  12. A Megoldáskezelőben kattintson duplán a Package.appxmanifest elemre az NotifyUserWindowsPhone (Windows Phone-telefon 8.1) projektben. Az Értesítések területen állítsa a Bejelentési képességbeállítást Igen értékre.

    Képernyőkép a Solution Explorer ablakról, amely a Package.appxmanifestre összpontosít, és a Bejelentési képesség beállítás értéke Igen, pirossal tagolt.

  13. Továbbra is a Package.appxmanifest fájlban kattintson a felső részen található Deklarációk menüre. Az Elérhető deklarációk legördülő menüben kattintson a Háttérfeladatok, majd a Hozzáadás gombra.

  14. A Package.appxmanifestfájl Tulajdonságok területén jelölje be a Leküldéses értesítés jelölőnégyzetet.

  15. A Package.appxmanifestalkalmazásbeállítások területén írja be a PushBackgroundComponent.PushBackgroundTask kifejezést a Belépési pont mezőbe.

    Képernyőkép a Solution Explorer ablakról, amely a Package.appxmanifestre összpontosít, pirossal tagolt Elérhető deklarációk, Támogatott deklarációk, Leküldéses értesítések és Belépési pont beállításokkal.

  16. Kattintson a File (Fájl) menü Save All (Összes mentése) elemére.

Az alkalmazás futtatása

Az alkalmazás futtatásához tegye a következőket:

  1. Futtassa az AppBackend webes API-alkalmazást a Visual Studióban. Megjelenik egy ASP.NET weblap.
  2. A Visual Studióban futtassa a NotifyUserWindowsPhone (Windows Phone-telefon 8.1) Windows Phone-telefon alkalmazást. A Windows Phone-telefon emulátor automatikusan futtatja és betölti az alkalmazást.
  3. A NotifyUserWindowsPhone alkalmazás felhasználói felületén adjon meg egy felhasználónevet és jelszót. Ezek bármilyen sztring lehetnek, de azonos értéknek kell lenniük.
  4. A NotifyUserWindowsPhone alkalmazás felhasználói felületén kattintson a Bejelentkezés és regisztráció elemre. Ezután kattintson a Leküldés küldése elemre.