Kurz: Odesílání oznámení konkrétním zařízením se spuštěnými aplikacemi Univerzální platforma Windows

Poznámka

Služba MPNS (Microsoft Push Notification Service) je zastaralá a už se nepodporuje.

Přehled

V tomto kurzu se dozvíte, jak používat Azure Notification Hubs k vysílání oznámení o nejnovějších novinkách. Tento kurz se zabývá aplikacemi pro Windows Store nebo Windows Phone 8.1 (bez Silverlightu). Pokud cílíte na Windows Phone 8.1 Silverlight, přečtěte si téma Nabízená oznámení konkrétním Windows Phone zařízením pomocí Služby Azure Notification Hubs.

V tomto kurzu se naučíte používat Azure Notification Hubs k nabízeným oznámením konkrétním zařízením s Windows, na kterých běží aplikace Univerzální platforma Windows (UPW). Po dokončení kurzu se můžete zaregistrovat do kategorií nejnovějších zpráv, které vás zajímají. Nabízená oznámení budete dostávat jenom pro tyto kategorie.

Pokud chcete povolit scénáře vysílání, při vytváření registrace v centru oznámení zahrňte jednu nebo více značek . Když se do značky odesílají oznámení, obdrží ho všechna zařízení, která jsou pro značku zaregistrovaná. Další informace o značkách najdete v tématu Směrování a výrazy značek.

Poznámka

Visual Studio 2019 nepodporuje Windows Store a projekt Windows Phone verze 8.1 a starší. Další informace najdete v tématu Cílení na platformy a kompatibilita platforem sady Visual Studio 2019.

V tomto kurzu provedete následující úlohy:

  • Přidání výběru kategorií do mobilní aplikace
  • Registrace oznámení
  • Posílání označených oznámení
  • Spuštění aplikace a generování oznámení

Požadavky

Před zahájením tohoto kurzu dokončete kurz o odesílání oznámení do aplikací pro Univerzální platformu Windows pomocí služby Azure Notification Hubs.

Přidání výběru kategorií do aplikace

První krok spočívá v přidání prvků uživatelského rozhraní na stávající hlavní stránku, aby uživatelé mohli vybrat kategorie, které chtějí zaregistrovat. Vybrané kategorie se uloží do zařízení. Když se aplikace spustí, vytvoří registraci zařízení v centru oznámení s vybranými kategoriemi jako značkami.

  1. Otevřete soubor projektu MainPage.xaml a zkopírujte do elementu Grid následující kód:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"  TextWrapping="Wrap" Text="Breaking News" FontSize="42" VerticalAlignment="Top" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="World" Name="WorldToggle" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Politics" Name="PoliticsToggle" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Business" Name="BusinessToggle" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Technology" Name="TechnologyToggle" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Science" Name="ScienceToggle" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Sports" Name="SportsToggle" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center"/>
        <Button Name="SubscribeButton" Content="Subscribe" HorizontalAlignment="Center" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Click="SubscribeButton_Click"/>
    </Grid>
    
  2. V Průzkumník řešení klikněte pravým tlačítkem na projekt a vyberte Přidat>třídu. V části Přidat novou položku pojmenujte třídu Notifications a vyberte Přidat. V případě potřeby přidejte public modifikátor do definice třídy.

  3. Do nového souboru přidejte následující using příkazy:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  4. Do nové Notifications třídy zkopírujte následující kód:

    private NotificationHub hub;
    
    public Notifications(string hubName, string listenConnectionString)
    {
        hub = new NotificationHub(hubName, listenConnectionString);
    }
    
    public async Task<Registration> StoreCategoriesAndSubscribe(IEnumerable<string> categories)
    {
        ApplicationData.Current.LocalSettings.Values["categories"] = string.Join(",", categories);
        return await SubscribeToCategories(categories);
    }
    
    public IEnumerable<string> RetrieveCategories()
    {
        var categories = (string) ApplicationData.Current.LocalSettings.Values["categories"];
        return categories != null ? categories.Split(','): new string[0];
    }
    
    public async Task<Registration> SubscribeToCategories(IEnumerable<string> categories = null)
    {
        var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
        if (categories == null)
        {
            categories = RetrieveCategories();
        }
    
        // Using a template registration to support notifications across platforms.
        // Any template notifications that contain messageParam and a corresponding tag expression
        // will be delivered for this registration.
    
        const string templateBodyWNS = "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>";
    
        return await hub.RegisterTemplateAsync(channel.Uri, templateBodyWNS, "simpleWNSTemplateExample",
                categories);
    }
    

    Tato třída ukládá kategorie novinek, které bude zařízení dostávat, do místního úložiště. Místo volání RegisterNativeAsync metody zavolejte RegisterTemplateAsync pro registraci kategorií pomocí registrace šablony.

    Pokud chcete zaregistrovat více než jednu šablonu, zadejte název šablony, například simpleWNSTemplateExample. Názvy šablon se zadávají proto, aby je bylo možné aktualizovat nebo odstranit. Můžete zaregistrovat více než jednu šablonu, která bude mít jednu pro informační zprávy a jednu pro dlaždice.

    Poznámka

    S Notification Hubs může zařízení registrovat více šablon pomocí stejné značky. V tomto případě příchozí zpráva, která cílí na značku, způsobí, že se do zařízení doručí více oznámení, jedno pro každou šablonu. Tento proces umožňuje zobrazit stejnou zprávu v několika vizuálních oznámeních, například jako odznak i jako informační zprávu v aplikaci pro Windows Store.

    Další informace najdete v tématu Šablony.

  5. Do souboru projektu App.xaml.cs přidejte do App třídy následující vlastnost:

    public Notifications notifications = new Notifications("<hub name>", "<connection string with listen access>");
    

    Tuto vlastnost použijete k vytvoření instance a přístupu k této Notifications instanci.

    Nahraďte v kódu zástupné symboly <hub name> a <connection string with listen access> názvem vašeho centra oznámení a připojovacím řetězcem pro DefaultListenSharedAccessSignature, který jste získali dříve.

    Poznámka

    Přihlašovací údaje distribuované s klientskou aplikací obvykle nejsou zabezpečené, a proto s klientskou aplikací distribuujte jenom přístupový klíč pro naslouchání. Přístup pro naslouchání umožňuje aplikaci registrovat oznámení, ale neumožňuje měnit stávající registrace ani odesílat oznámení. Přístupový klíč pro úplný přístup se používá v zabezpečené službě back-end k posílání oznámení a změně stávajících registrací.

  6. Do souboru MainPage.xaml.cs přidejte následující řádek:

    using Windows.UI.Popups;
    
  7. Do souboru MainPage.xaml.cs přidejte následující metodu:

    private async void SubscribeButton_Click(object sender, RoutedEventArgs e)
    {
        var categories = new HashSet<string>();
        if (WorldToggle.IsOn) categories.Add("World");
        if (PoliticsToggle.IsOn) categories.Add("Politics");
        if (BusinessToggle.IsOn) categories.Add("Business");
        if (TechnologyToggle.IsOn) categories.Add("Technology");
        if (ScienceToggle.IsOn) categories.Add("Science");
        if (SportsToggle.IsOn) categories.Add("Sports");
    
        var result = await ((App)Application.Current).notifications.StoreCategoriesAndSubscribe(categories);
    
        var dialog = new MessageDialog("Subscribed to: " + string.Join(",", categories) + " on registration Id: " + result.RegistrationId);
        dialog.Commands.Add(new UICommand("OK"));
        await dialog.ShowAsync();
    }
    

    Tato metoda vytvoří seznam kategorií a použije Notifications třídu k uložení seznamu v místním úložišti. Dále zaregistruje odpovídající značky v centru oznámení. Když se kategorie změní, registrace se znovu vytvoří s novými kategoriemi.

Aplikace teď může uchovávat sadu kategorií v místním úložišti v zařízení. Aplikace se zaregistruje v centru oznámení vždy, když uživatelé změní výběr kategorií.

Registrace oznámení

V této části provedete registraci v centru oznámení při spuštění pomocí kategorií, které jste uložili v místním úložišti.

Poznámka

Identifikátor URI kanálu přiřazený Službou nabízených oznámení Windows se může kdykoli změnit, a proto byste měli oznámení často registrovat, abyste se vyhnuli chybám v oznámeních. V tomto příkladu se oznámení registrují při každém spuštění aplikace. U aplikací, které často spouštíte, například více než jednou denně, můžete registraci pravděpodobně přeskočit, abyste zachovali šířku pásma, pokud od předchozí registrace uplynulo méně než jeden den.

  1. Pokud chcete použít třídu k odběru notifications na základě kategorií, otevřete soubor App.xaml.cs a pak aktualizujte metodu InitNotificationsAsync .

    // *** Remove or comment out these lines ***
    //var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    //var hub = new NotificationHub("your hub name", "your listen connection string");
    //var result = await hub.RegisterNativeAsync(channel.Uri);
    
    var result = await notifications.SubscribeToCategories();
    

    Tento proces zajistí, že aplikace při spuštění načte kategorie z místního úložiště. Pak požádá o registraci těchto kategorií. Tuto metodu jste vytvořili InitNotificationsAsync v rámci kurzu Odesílání oznámení do aplikací Univerzální platforma Windows pomocí služby Azure Notification Hubs.

  2. Do souboru projektu MainPage.xaml.cs přidejte do OnNavigatedTo metody následující kód:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var categories = ((App)Application.Current).notifications.RetrieveCategories();
    
        if (categories.Contains("World")) WorldToggle.IsOn = true;
        if (categories.Contains("Politics")) PoliticsToggle.IsOn = true;
        if (categories.Contains("Business")) BusinessToggle.IsOn = true;
        if (categories.Contains("Technology")) TechnologyToggle.IsOn = true;
        if (categories.Contains("Science")) ScienceToggle.IsOn = true;
        if (categories.Contains("Sports")) SportsToggle.IsOn = true;
    }
    

    Tento kód aktualizuje hlavní stránku na základě stavu dříve uložených kategorií.

Aplikace je teď hotová. Může ukládat sadu kategorií v místním úložišti zařízení. Když uživatelé změní výběr kategorie, uložené kategorie se použijí k registraci v centru oznámení. V další části definujete back-end, který aplikaci posílá oznámení kategorií.

Spuštění aplikace pro UPW

  1. Pokud chcete v sadě Visual Studio kompilovat aplikaci a spustit ji, stiskněte F5. Uživatelské rozhraní aplikace nabízí sadu přepínačů, kterými můžete vybrat odebírané kategorie.

    Aplikace Nejnovější zprávy

  2. Povolte jeden nebo více přepínačů kategorií a pak vyberte Přihlásit k odběru.

    Aplikace převede vybrané kategorie na značky a u vybraných značek požádá centrum oznámení o registraci nových zařízení. Aplikace zobrazí registrované kategorie v dialogovém okně.

    Přepínače kategorií a tlačítko Přihlásit k odběru

Vytvoření konzolové aplikace pro odesílání označených oznámení

V této části odešlete nejnovější zprávy jako šablonové oznámení se značkami z konzolové aplikace .NET.

  1. Ve Visual Studiu vytvořte novou konzolovou aplikaci Visual C#:

    1. V nabídce vyberte Soubor>nový>projekt.
    2. V části Vytvořit nový projekt vyberte v seznamu šablon konzolová aplikace (.NET Framework) pro C# a vyberte Další.
    3. Zadejte název aplikace.
    4. V části Řešení zvolte Přidat do řešení a výběrem možnosti Vytvořit vytvořte projekt.
  2. Vyberte Nástroje> Správcebalíčků> NuGetKonzola správce balíčků a pak v okně konzoly spusťte následující příkaz:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Tato akce přidá odkaz na sadu Sdk služby Azure Notification Hubs pomocí balíčku Microsoft.Azure.NotificationHubs .

  3. Otevřete soubor Program.cs a přidejte následující using příkaz:

    using Microsoft.Azure.NotificationHubs;
    
  4. Do třídy Program přidejte následující metodu, nebo ji nahraďte, pokud už existuje:

    private static async void SendTemplateNotificationAsync()
    {
        // Define the notification hub.
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("<connection string with full access>", "<hub name>");
    
        // Apple requires the apns-push-type header for all requests
        var headers = new Dictionary<string, string> {{"apns-push-type", "alert"}};
    
        // Create an array of breaking news categories.
        var categories = new string[] { "World", "Politics", "Business", "Technology", "Science", "Sports"};
    
        // Send the notification as a template notification. All template registrations that contain
        // "messageParam" and the proper tags will receive the notifications.
        // This includes APNS, GCM/FCM, WNS, and MPNS template registrations.
    
        Dictionary<string, string> templateParams = new Dictionary<string, string>();
    
        foreach (var category in categories)
        {
            templateParams["messageParam"] = "Breaking " + category + " News!";
            await hub.SendTemplateNotificationAsync(templateParams, category);
        }
    }
    

    Tento kód odešle šablonové oznámení pro každou z šesti značek v poli řetězců. Použití značek zajišťuje, že zařízení budou přijímat oznámení jenom pro registrované kategorie.

  5. V předchozím kódu nahraďte zástupné symboly <hub name> a <connection string with full access> názvem vašeho centra oznámení a připojovacím řetězcem pro DefaultFullSharedAccessSignature z řídicího panelu vašeho centra oznámení.

  6. Main() Do metody přidejte následující řádky:

     SendTemplateNotificationAsync();
     Console.ReadLine();
    
  7. Sestavte konzolovou aplikaci.

Spuštění konzolové aplikace pro odesílání označených oznámení

Spusťte aplikaci vytvořenou v předchozí části. Oznámení pro vybrané kategorie se zobrazí jako informační zprávy.

Další kroky

V tomto článku jste se dozvěděli, jak vysílat nejnovější zprávy podle kategorií. Back-endová aplikace odesílá označená oznámení do zařízení, která se zaregistrovala pro příjem oznámení pro danou značku. Pokud chcete zjistit, jak odesílat nabízená oznámení konkrétním uživatelům bez ohledu na to, jaké zařízení používají, přejděte k následujícímu kurzu: