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ő:
- 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).
- 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
A Visual Studióban nyissa meg a Felhasználók értesítése oktatóanyagban létrehozott AppBackend projektet.
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); } }
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.
- 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.
- 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
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();
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(); } }
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;
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.
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.
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.
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.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); } }
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.
A képernyő bal oldalán kattintson az Online lehetőségre.
A Search (Keresés) mezőbe írja be a Http Client (HTTP-ügyfél) kifejezést.
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.
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.
Adja hozzá a következő
using
utasításokat aPushBackgroundTask.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;
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.
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.
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.
A Package.appxmanifestfájl Tulajdonságok területén jelölje be a Leküldéses értesítés jelölőnégyzetet.
A Package.appxmanifestalkalmazásbeállítások területén írja be a PushBackgroundComponent.PushBackgroundTask kifejezést a Belépési pont mezőbe.
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:
- Futtassa az AppBackend webes API-alkalmazást a Visual Studióban. Megjelenik egy ASP.NET weblap.
- 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.
- 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.
- 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.