Tutorial: Notificações push para dispositivos específicos do Windows que executam aplicações de plataforma Universal do WindowsTutorial: Push notifications to specific Windows devices running Universal Windows Platform applications

Descrição geralOverview

Este tutorial mostra-lhe como utilizar os Notification Hubs do Azure para difundir notificações de notícias de última hora para aplicações da Loja Windows ou do Windows Phone 8.1 (não Silverlight).This tutorial shows you how to use Azure Notification Hubs to broadcast breaking news notifications to a Windows Store or Windows Phone 8.1 (non-Silverlight) applications. Se tiver como objetivo o Windows Phone 8.1 Silverlight, veja a versão para Windows Phone.If you are targeting Windows Phone 8.1 Silverlight, see Windows Phone version.

Neste tutorial, vai aprender a utilizar os Hubs de Notificação do Azure para enviar notificações para dispositivos Windows específicos que executem aplicações da Plataforma Universal do Windows (UWP).In this tutorial, you learn how to use Azure Notification Hubs to push notifications to specific Windows devices running Universal Windows Platform (UWP) application. Depois de concluí-lo, pode registar-se em categorias de notícias de última hora em que esteja interessado e receberá notificações push relativas a essas categorias apenas.After you complete the tutorial, you can register for the breaking news categories that you are interested in, and you'll receive push notifications for those categories only.

Os cenários de difusão são ativados ao incluir uma ou mais etiquetas durante a criação de um registo no hub de notificação.Broadcast scenarios are enabled by including one or more tags when you create a registration in the notification hub. Quando as notificações são enviadas para uma etiqueta, todos os dispositivos registados para a etiqueta receberão a notificação.When notifications are sent to a tag, all devices that have registered for the tag receive the notification. Para obter mais informações sobre as etiquetas, veja Tags in Registrations (Etiquetas nos Registos).For more information about tags, see Tags in Registrations.

Nota

O Visual Studio 2017 não suporta as versões de projetos da Loja Windows e do Windows Phone 8.1 e anteriores.Windows Store and Windows Phone project versions 8.1 and earlier are not supported in Visual Studio 2017. Para obter mais informações, veja Visual Studio 2017 Platform Targeting and Compatibility (Segmentação e Compatibilidade de Plataformas do Visual Studio 2017)For more information, see Visual Studio 2017 Platform Targeting and Compatibility.

Neste tutorial, siga os passos seguintes:In this tutorial, you take the following steps:

  • Adicionar a seleção de categorias à aplicação móvelAdd category selection to the mobile app
  • Registar-se para receber notificaçõesRegister for notifications
  • Enviar notificações com etiquetasSend tagged notification
  • Executar a aplicação e gerar notificaçõesRun the app and generate notifications

Pré-requisitosPrerequisites

Concluir o [Tutorial: Enviar notificações para aplicações da plataforma Universal do Windows com os Hubs de notificação do Azure] get-started antes de começar este tutorial.Complete the Tutorial: Send notifications to Universal Windows Platform apps by using Azure Notification Hubs before starting this tutorial.

Adicionar a seleção de categorias à aplicaçãoAdd category selection to the app

O primeiro passo é adicionar os elementos da IU à sua página principal existente, de modo a que os utilizadores possam selecionar as categorias em que se vão registar.The first step is to add UI elements to your existing main page so that users can select categories to register. As categorias selecionadas são armazenadas nos dispositivos.The selected categories are stored on the device. Quando a aplicação é iniciada, é criado um registo do dispositivo no seu hub de notificação com as categorias selecionadas como etiquetas.When the app starts, a device registration is created in your notification hub, with the selected categories as tags.

  1. Abra o ficheiro de projeto de mainpage. XAML e, em seguida, copie o seguinte código no Grid elemento:Open the MainPage.xaml project file, and then copy the following code in the Grid element:

    <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. Na Explorador de soluções, com o botão direito no projeto, adicione uma nova classe: Notificações.In Solution Explorer, right-click the project, add a new class: Notifications. Adicionar a pública modificador à definição de classe e, em seguida, adicione o seguinte using instruções para o novo arquivo de código:Add the public modifier to the class definition, and then add the following using statements to the new code file:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  3. Copie o seguinte código para o novo Notifications classe:Copy the following code to the new Notifications class:

    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);
    }
    

    Esta classe utiliza o armazenamento local para armazenar as categorias de notícias que este dispositivo tem de receber.This class uses the local storage to store the categories of news that this device must receive. Em vez de chamar o RegisterNativeAsync método, chamada RegisterTemplateAsync registar para as categorias com um registo de modelo.Instead of calling the RegisterNativeAsync method, call RegisterTemplateAsync to register for the categories by using a template registration.

    Se quiser registar mais de um modelo (por exemplo, um para notificações de alerta e outro para mosaicos), indique um nome para o modelo (como "simpleWNSTemplateExample").If you want to register more than one template (for example, one for toast notifications and one for tiles), provide a template name (for example, "simpleWNSTemplateExample"). Deve dar nomes aos modelos para poder atualizá-los ou eliminá-los.You name the templates so that you can update or delete them.

    Nota

    Se um dispositivo registar vários modelos com a mesma etiqueta, o envio de uma mensagem segmentada para essa etiqueta resulta na entrega de múltiplas notificações no dispositivo (uma por cada modelo).If a device registers multiple templates with the same tag, an incoming message that targets the tag causes multiple notifications to be delivered to the device (one for each template). Este comportamento é útil em cenários nos quais a mesma mensagem lógica tem de resultar em várias notificações visuais (que mostrem, por exemplo, um distintivo e um alerta numa aplicação da Loja Windows).This behavior is useful when the same logical message must result in multiple visual notifications (for example, showing both a badge and a toast in a Windows Store application).

    Para obter mais informações, veja Templates (Modelos).For more information, see Templates.

  4. No arquivo de projeto App.xaml.cs, adicione a seguinte propriedade para o App classe:In the App.xaml.cs project file, add the following property to the App class:

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

    Use essa propriedade para criar e aceder a um Notifications instância.You use this property to create and access a Notifications instance.

    No código, substitua os marcadores de posição <hub name> e <connection string with listen access> pelo nome do seu hub de notificação e pela cadeia de ligação de DefaultListenSharedAccessSignature, que obteve anteriormente.In the code, replace the <hub name> and <connection string with listen access> placeholders with your notification hub name and the connection string for DefaultListenSharedAccessSignature, which you obtained earlier.

    Nota

    Uma vez que, de um modo geral, as credenciais que são distribuídas com uma aplicação cliente não são seguras, distribua a chave apenas para acesso de escuta com a sua aplicação cliente.Because credentials that are distributed with a client app are not usually secure, distribute only the key for listen access with your client app. Com o acesso de escuta, a sua aplicação pode registar-se para receber notificações, mas não é possível modificar registos existentes nem enviar notificações.With listen access, your app can register for notifications, but existing registrations cannot be modified, and notifications cannot be sent. A chave de acesso total é utilizada num serviço de back-end protegido para o envio de notificações e a alteração de registos existentes.The full access key is used in a secured back-end service for sending notifications and changing existing registrations.

  5. Na MainPage.xaml.cs de ficheiros, adicione a seguinte linha:In the MainPage.xaml.cs file, add the following line:

    using Windows.UI.Popups;
    
  6. Na MainPage.xaml.cs de ficheiros, adicione o seguinte método:In the MainPage.xaml.cs file, add the following method:

    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();
    }
    

    Este método cria uma lista de categorias e utiliza o Notifications classe para armazenar a lista no armazenamento local.This method creates a list of categories and uses the Notifications class to store the list in the local storage. Também regista as etiquetas correspondentes no seu hub de notificação.It also registers the corresponding tags with your notification hub. Quando as categorias são alteradas, o registo é recriado com as categorias novas.When the categories are changed, the registration is re-created with the new categories.

A aplicação pode agora armazenar um conjunto de categorias no armazenamento local do dispositivo.Your app can now store a set of categories in local storage on the device. A aplicação regista-se no hub de notificação sempre que os utilizadores alteram a seleção de categorias.The app registers with the notification hub whenever users change the category selection.

Registar-se para receber notificaçõesRegister for notifications

Nesta secção, vai utilizar as categorias que foram armazenadas no armazenamento local para fazer o registo no hub de notificação no arranque.In this section, you register with the notification hub on startup by using the categories that you've stored in local storage.

Nota

Tendo em conta que o URI do canal que é atribuído pelo Windows Notification Service (WNS) pode ser alterado em qualquer altura, deve registar-se para receber notificações com frequência, a fim de evitar falhas de notificação.Because the channel URI that's assigned by the Windows Notification Service (WNS) can change at any time, you should register for notifications frequently to avoid notification failures. Este exemplo regista-se em notificações sempre que a aplicação é iniciada.This example registers for notification every time that the app starts. Relativamente às aplicações que executa com frequência, ou seja, mais do que uma vez por dia, pode provavelmente ignorar o registo de modo a preservar a largura de banda caso tenha passado menos de um dia desde o registo anterior.For apps that you run frequently (more than once a day), you can probably skip registration to preserve bandwidth if less than a day has passed since the previous registration.

  1. Para utilizar o notifications classe subscrever com base em categorias, abra o ficheiro App.xaml.cs e, em seguida, atualize o InitNotificationsAsync método.To use the notifications class to subscribe based on categories, open the App.xaml.cs file, and then update the InitNotificationsAsync method.

    // *** 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();
    

    Este processo garante que, sempre que a aplicação é iniciada, obtém as categorias do armazenamento local e pede o registo das mesmas.This process ensures that when the app starts, it retrieves the categories from local storage and requests registration of these categories. Que criou o InitNotificationsAsync método como parte do [introdução aos Hubs de notificação] get-started tutorial.You created the InitNotificationsAsync method as part of the Get started with Notification Hubs tutorial.

  2. Na MainPage.xaml.cs ficheiros do projeto, adicione o seguinte código para o OnNavigatedTo método:In the MainPage.xaml.cs project file, add the following code to the OnNavigatedTo method:

    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;
    }
    

    Este código atualiza a página principal com base no estado das categorias guardadas anteriormente.This code updates the main page, based on the status of previously saved categories.

A aplicação está agora concluída eThe app is now complete. pode armazenar um conjunto de categorias no armazenamento local do dispositivo que é utilizado para fazer o registo no hub de notificação quando os utilizadores alteram a seleção das categorias.It can store a set of categories in the device local storage that's used to register with the notification hub when users change the category selection. Na próxima secção, vai definir um back-end apto a enviar notificações de categorias para esta aplicação.In the next section, you define a back end that can send category notifications to this app.

Executar a aplicação UWPRun the UWP app

  1. No Visual Studio, selecione F5 para compilar e iniciar a aplicação.In Visual Studio, select F5 to compile and start the app. A IU da aplicação disponibiliza um conjunto de seletores que lhe permitem escolher as categorias que quer subscrever.The app UI provides a set of toggles that lets you choose the categories to subscribe to.

    Aplicação de Notícias de Última Hora

  2. Ative um ou mais seletores de categorias e clique em Subscribe (Subscrever).Enable one or more category toggles, and then click Subscribe.

    A aplicação converte as categorias selecionadas em etiquetas e pede um novo registo do dispositivo para as etiquetas selecionadas ao hub de notificação.The app converts the selected categories into tags and requests a new device registration for the selected tags from the notification hub. As categorias registadas são devolvidas e apresentadas numa caixa de diálogo.The registered categories are returned and displayed in a dialog box.

    Seletores de categorias e botão Subscribe

Criar uma aplicação de consola para enviar notificações marcadasCreate a console app to send tagged notifications

Nesta secção, irá enviar notícias de última hora como notificações de modelo etiquetadas a partir da aplicação de consola .NET.In this section, you send breaking news as tagged template notifications from a .NET console app.

  1. No Visual Studio, crie um novo elemento Visual C# aplicação de consola: um.In Visual Studio, create a new Visual C# console application: a. No menu, selecione arquivo > New > projeto.On the menu, select File > New > Project. b.b. Expanda Visual C# e selecione ambiente de trabalho do Windows.Expand Visual C#, and select Windows Desktop. c.c. Selecione aplicação de consola (.NET Framework) na lista de modelos.Select Console App (.NET Framework) in the list of templates. d.d. Introduza um nome para a aplicação.Enter a name for the app. e.e. Selecione um pasta para a aplicação.Select a folder for the app. f.f. Selecione OK para criar o projeto.Select OK to create the project.

  2. No menu principal do Visual Studio, selecione ferramentas > Gestor de pacotes NuGet > Package Manager Console e, em seguida, na janela da consola, Introduza a seguinte cadeia:On the Visual Studio main menu, select Tools > NuGet Package Manager > Package Manager Console and then, in the console window, enter the following string:

    Install-Package Microsoft.Azure.NotificationHubs
    
  3. Prima Enter.Select Enter.
    Esta ação adiciona uma referência ao SDK dos Hubs de Notificação do Azure mediante a utilização do Pacote NuGet Microsoft.Azure.Notification Hubs.This action adds a reference to the Azure Notification Hubs SDK by using the Microsoft.Azure.Notification Hubs NuGet package.

  4. Abra o ficheiro Program.cs e adicione a seguinte instrução using:Open the Program.cs file, and add the following using statement:

    using Microsoft.Azure.NotificationHubs;
    
  5. Na classe Program, adicione o seguinte método ou substitua-o se já existir:In the Program class, add the following method, or replace it if it already exists:

    private static async void SendTemplateNotificationAsync()
    {
        // Define the notification hub.
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("<connection string with full access>", "<hub name>");
    
        // 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, 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);
        }
    }
    

    Este código envia uma notificação de modelo para cada uma das seis etiquetas na matriz de cadeias.This code sends a template notification for each of the six tags in the string array. A utilização de etiquetas assegura que os dispositivos recebem notificações apenas para as categorias registadas.The use of tags ensures that devices receive notifications only for the registered categories.

  6. No código anterior, substitua os marcadores de posição <hub name> e <connection string with full access> pelo nome do seu hub de notificação e pela cadeia de ligação para DefaultFullSharedAccessSignature do dashboard do seu hub de notificação.In the preceding code, replace the <hub name> and <connection string with full access> placeholders with your notification hub name and the connection string for DefaultFullSharedAccessSignature from the dashboard of your notification hub.

  7. No método Principal, adicione as linhas seguintes:In the Main method, add the following lines:

    SendTemplateNotificationAsync();
    Console.ReadLine();
    
  8. Crie a aplicação de consola.Build the console app.

Executar a aplicação de consola para enviar notificações marcadasRun the console app to send tagged notifications

  1. Execute a aplicação que criou na secção anterior.Run the app created in the previous section.

  2. As notificações das categorias selecionadas são apresentadas como notificações de alerta.Notifications for the selected categories appear as toast notifications. Se selecionar a notificação, verá a primeira janela de aplicação UWP.If you select the notification, you see the first UWP app window.

    Notificações de alerta

Passos SeguintesNext steps

Neste artigo, aprendeu a difundir notícias de última hora por categoria.In this article, you learned how to broadcast breaking news by category. A aplicação de back-end envia as notificações com etiquetas para os dispositivos que se registaram para receber notificações para essas etiquetas.The backend application pushes tagged notifications to devices that have registered to receive notifications for that tag. Para saber como enviar notificações para utilizadores específicos independentemente do dispositivo que utilizem, avance para o próximo tutorial:To learn how to push notifications to specific users irrespective of what device they use, advance to the following tutorial:

Push localized notifications (Enviar notificações localizadas)Push localized notifications