Tutorial: Notificações por push para dispositivos iOS específicos usando os hubs de notificação do AzureTutorial: Push notifications to specific iOS devices using Azure Notification Hubs

Descrição geralOverview

Este tutorial mostra como usar os hubs de notificação do Azure para transmitir notificações de últimas notícias para um aplicativo iOS.This tutorial shows you how to use Azure Notification Hubs to broadcast breaking news notifications to an iOS app. Ao concluir, você poderá se registrar para as categorias de últimas notícias nas quais está interessado e receber apenas notificações por push para essas categorias.When complete, you are able to register for breaking news categories you are interested in, and receive only push notifications for those categories. Este é um cenário com um padrão comum para muitas aplicações em que as notificações têm de ser enviadas para grupos de utilizadores que mostraram anteriormente interesse nas mesmas, por exemplo, leitor de RSS, aplicações para fãs de música, etc.This scenario is a common pattern for many apps where notifications have to be sent to groups of users that have previously declared interest in them, for example, RSS reader, apps for music fans, etc.

Os cenários de transmissã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 creating a registration in the notification hub. Quando as notificações são enviadas a uma marca, os dispositivos que foram registrados para a marca recebem a notificação.When notifications are sent to a tag, devices that have registered for the tag receive the notification. Como as etiquetas são simples cadeias, não têm de ser aprovisionadas com antecedência.Because tags are simply strings, they do not have to be provisioned in advance. Para obter mais informações sobre etiquetas, consulte Encaminhamento de Hubs de Notificação e Expressões de Etiqueta.For more information about tags, see Notification Hubs Routing and Tag Expressions.

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

  • Adicionar uma seleção de categoria ao aplicativoAdd a category selection to the app
  • Enviar notificações com etiquetasSend tagged notifications
  • Enviar notificações do dispositivoSend notifications from the device
  • Executar a aplicação e gerar notificaçõesRun the app and generate notifications

Pré-requisitosPrerequisites

Este tópico se baseia no aplicativo criado no tutorial: Notificações por push para aplicativos iOS usando os hubsde notificação do Azure.This topic builds on the app you created in Tutorial: Push notifications to iOS apps using Azure Notification Hubs. Antes de iniciar este tutorial, você já deve ter concluído o tutorial: Notificações por push para aplicativos iOS usando os hubsde notificação do Azure.Before starting this tutorial, you must have already completed Tutorial: Push notifications to iOS apps using Azure Notification Hubs.

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

A primeira etapa é adicionar os elementos da interface do usuário ao storyboard existente que permitem ao usuário selecionar categorias para registrar.The first step is to add the UI elements to your existing storyboard that enable the user to select categories to register. As categorias selecionadas por um utilizador são armazenadas no dispositivo.The categories selected by a user are stored on the device. Quando a aplicação é iniciada, é criado o 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. Em seu MainStoryboard_iPhone. Storyboard , adicione os seguintes componentes da biblioteca de objetos:In your MainStoryboard_iPhone.storyboard add the following components from the object library:

    • Um rótulo com texto de "últimas notícias",A label with "Breaking News" text,

    • Rótulos com textos de categoria "mundo", "política", "negócios", "tecnologia", "ciência", "esportes",Labels with category texts "World", "Politics", "Business", "Technology", "Science", "Sports",

    • Seis opções, uma por categoria, definem cada estado de comutador como off por padrão.Six switches, one per category, set each switch State to be Off by default.

    • Um botão rotulado como "assinar"One button labeled "Subscribe"

      O storyboard deve ter a seguinte aparência:Your storyboard should look as follows:

      Construtor de interface do Xcode

  2. No editor do assistente, crie saídas para todos os comutadores e chame-os de "WorldSwitch", "PoliticsSwitch", "BusinessSwitch", "TechnologySwitch", "ScienceSwitch", "SportsSwitch"In the assistant editor, create outlets for all the switches and call them "WorldSwitch", "PoliticsSwitch", "BusinessSwitch", "TechnologySwitch", "ScienceSwitch", "SportsSwitch"

  3. Crie uma ação para o botão chamado subscribe; seu ViewController.h deve conter o seguinte código:Create an Action for your button called subscribe; your ViewController.h should contain the following code:

    @property (weak, nonatomic) IBOutlet UISwitch *WorldSwitch;
    @property (weak, nonatomic) IBOutlet UISwitch *PoliticsSwitch;
    @property (weak, nonatomic) IBOutlet UISwitch *BusinessSwitch;
    @property (weak, nonatomic) IBOutlet UISwitch *TechnologySwitch;
    @property (weak, nonatomic) IBOutlet UISwitch *ScienceSwitch;
    @property (weak, nonatomic) IBOutlet UISwitch *SportsSwitch;
    
    - (IBAction)subscribe:(id)sender;
    
  4. Crie uma nova classe Cocoa Touch chamada Notifications.Create a new Cocoa Touch Class called Notifications. Copie o código a seguir na seção interface do arquivo Notifications. h:Copy the following code in the interface section of the file Notifications.h:

    @property NSData* deviceToken;
    
    - (id)initWithConnectionString:(NSString*)listenConnectionString HubName:(NSString*)hubName;
    
    - (void)storeCategoriesAndSubscribeWithCategories:(NSArray*)categories
                completion:(void (^)(NSError* error))completion;
    
    - (NSSet*)retrieveCategories;
    
    - (void)subscribeWithCategories:(NSSet*)categories completion:(void (^)(NSError *))completion;
    
  5. Adicione a seguinte diretiva de importação a notificações. m:Add the following import directive to Notifications.m:

    #import <WindowsAzureMessaging/WindowsAzureMessaging.h>
    
  6. Copie o código a seguir na seção implementação do arquivo Notifications. m.Copy the following code in the implementation section of the file Notifications.m.

    SBNotificationHub* hub;
    
    - (id)initWithConnectionString:(NSString*)listenConnectionString HubName:(NSString*)hubName{
    
        hub = [[SBNotificationHub alloc] initWithConnectionString:listenConnectionString
                                    notificationHubPath:hubName];
    
        return self;
    }
    
    - (void)storeCategoriesAndSubscribeWithCategories:(NSSet *)categories completion:(void (^)(NSError *))completion {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
        [defaults setValue:[categories allObjects] forKey:@"BreakingNewsCategories"];
    
        [self subscribeWithCategories:categories completion:completion];
    }
    
    - (NSSet*)retrieveCategories {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    
        NSArray* categories = [defaults stringArrayForKey:@"BreakingNewsCategories"];
    
        if (!categories) return [[NSSet alloc] init];
        return [[NSSet alloc] initWithArray:categories];
    }
    
    - (void)subscribeWithCategories:(NSSet *)categories completion:(void (^)(NSError *))completion
    {
        //[hub registerNativeWithDeviceToken:self.deviceToken tags:categories completion: completion];
    
        NSString* templateBodyAPNS = @"{\"aps\":{\"alert\":\"$(messageParam)\"}}";
    
        [hub registerTemplateWithDeviceToken:self.deviceToken name:@"simpleAPNSTemplate" 
            jsonBodyTemplate:templateBodyAPNS expiryTemplate:@"0" tags:categories completion:completion];
    }
    

    Essa classe usa o armazenamento local para armazenar e recuperar as categorias de notícias que esse dispositivo recebe.This class uses local storage to store and retrieve the categories of news that this device receives. Além disso, ele contém um método para se registrar nessas categorias usando um registro de modelo .Also, it contains a method to register for these categories using a Template registration.

  7. No arquivo, adicione uma instrução de importação para Notifications.h e adicione uma propriedade Notifications para uma instância da classe: AppDelegate.hIn the AppDelegate.h file, add an import statement for Notifications.h and add a property for an instance of the Notifications class:

    #import "Notifications.h"
    
    @property (nonatomic) Notifications* notifications;
    
  8. No método no AppDelegate.m, adicione o código para inicializar a instância de notificações no início do método. didFinishLaunchingWithOptionsIn the didFinishLaunchingWithOptions method in AppDelegate.m, add the code to initialize the notifications instance at the beginning of the method.
    HUBNAMEe HUBLISTENACCESS (definido em hubinfo.h) já deve ter os <hub name> espaços <connection string with listen access> reservados e substituídos pelo nome do hub de notificação e pela cadeia de conexão para DefaultListenSharedAccessSignature que você obteve superiorHUBNAME and HUBLISTENACCESS (defined in hubinfo.h) should already have the <hub name> and <connection string with listen access> placeholders replaced with your notification hub name and the connection string for DefaultListenSharedAccessSignature that you obtained earlier

    self.notifications = [[Notifications alloc] initWithConnectionString:HUBLISTENACCESS HubName:HUBNAME];
    

    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, só deve distribuir a chave para acesso de escuta com a sua aplicação cliente.Because credentials that are distributed with a client app are not generally secure, you should only distribute the key for listen access with your client app. O acesso de escuta permite que a sua aplicação seja registada para receber notificações, mas não é possível modificar os registos existentes nem enviar notificações.Listen access enables your app to register for notifications, but existing registrations cannot be modified and notifications cannot be sent. A chave de acesso total é utilizada num serviço back-end protegido para enviar notificações e alterar registos existentes.The full access key is used in a secured backend service for sending notifications and changing existing registrations.

  9. No método no AppDelegate.m, substitua o código no método pelo código a seguir para passar o token do dispositivo para a notifications classe. didRegisterForRemoteNotificationsWithDeviceTokenIn the didRegisterForRemoteNotificationsWithDeviceToken method in AppDelegate.m, replace the code in the method with the following code to pass the device token to the notifications class. A notifications classe executa o registro para notificações com as categorias.The notifications class performs the registering for notifications with the categories. Se o usuário alterar as seleções de categoria, chame subscribeWithCategories o método em resposta ao botão assinar para atualizá-las.If the user changes category selections, call the subscribeWithCategories method in response to the subscribe button to update them.

    Nota

    Como o token de dispositivo atribuído pelo Apple Push Notification Service (APNS) pode ser possível a qualquer momento, você deve se registrar para receber notificações com frequência para evitar falhas de notificação.Because the device token assigned by the Apple Push Notification Service (APNS) can chance 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 executadas com frequência, ou seja, mais do que uma vez por dia, pode provavelmente ignorar o registo para poupar a largura de banda, caso tenha passado menos de um dia desde o registo anterior.For apps that are 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.

    self.notifications.deviceToken = deviceToken;
    
    // Retrieves the categories from local storage and requests a registration for these categories
    // each time the app starts and performs a registration.
    
    NSSet* categories = [self.notifications retrieveCategories];
    [self.notifications subscribeWithCategories:categories completion:^(NSError* error) {
        if (error != nil) {
            NSLog(@"Error registering for notifications: %@", error);
        }
    }];
    

    Neste ponto, não deve haver nenhum outro código no didRegisterForRemoteNotificationsWithDeviceToken método.At this point, there should be no other code in the didRegisterForRemoteNotificationsWithDeviceToken method.

  10. Os métodos a seguir já devem estar presentes AppDelegate.m no concluindo o tutorial introdução aos hubs de notificação .The following methods should already be present in AppDelegate.m from completing the Get started with Notification Hubs tutorial. Caso contrário, adicione-os.If not, add them.

    - (void)MessageBox:(NSString *)title message:(NSString *)messageText
    {
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:messageText delegate:self
            cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
    }
    
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:
       (NSDictionary *)userInfo {
       NSLog(@"%@", userInfo);
       [self MessageBox:@"Notification" message:[[userInfo objectForKey:@"aps"] valueForKey:@"alert"]];
     }
    

    Esse método manipula as notificações recebidas quando o aplicativo está em execução exibindo um UIAlertsimples.This method handles notifications received when the app is running by displaying a simple UIAlert.

  11. No ViewController.m, adicione uma import instrução para AppDelegate.h e copie o código a seguir para o método gerado subscribe pelo Xcode.In ViewController.m, add an import statement for AppDelegate.h and copy the following code into the XCode-generated subscribe method. Esse código atualiza o registro de notificação para usar as novas marcas de categoria que o usuário escolheu na interface do usuário.This code updates the notification registration to use the new category tags the user has chosen in the user interface.

    #import "Notifications.h"
    
    NSMutableArray* categories = [[NSMutableArray alloc] init];
    
    if (self.WorldSwitch.isOn) [categories addObject:@"World"];
    if (self.PoliticsSwitch.isOn) [categories addObject:@"Politics"];
    if (self.BusinessSwitch.isOn) [categories addObject:@"Business"];
    if (self.TechnologySwitch.isOn) [categories addObject:@"Technology"];
    if (self.ScienceSwitch.isOn) [categories addObject:@"Science"];
    if (self.SportsSwitch.isOn) [categories addObject:@"Sports"];
    
    Notifications* notifications = [(AppDelegate*)[[UIApplication sharedApplication]delegate] notifications];
    
    [notifications storeCategoriesAndSubscribeWithCategories:categories completion: ^(NSError* error) {
        if (!error) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:"Notification" message:"Subscribed" delegate:self
            cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
        } else {
            NSLog(@"Error subscribing: %@", error);
        }
    }];
    

    Esse método cria uma NSMutableArray de categorias e usa a Notifications classe para armazenar a lista no armazenamento local e registra as marcas correspondentes no Hub de notificação.This method creates an NSMutableArray of categories and uses the Notifications class to store the list in the local storage and registers the corresponding tags with your notification hub. Quando as categorias são alteradas, o registo é recriado com as novas categorias.When categories are changed, the registration is recreated with the new categories.

  12. No ViewController.m, adicione o código a seguir viewDidLoad no método para definir a interface do usuário com base nas categorias salvas anteriormente.In ViewController.m, add the following code in the viewDidLoad method to set the user interface based on the previously saved categories.

    // This updates the UI on startup based on the status of previously saved categories.
    
    Notifications* notifications = [(AppDelegate*)[[UIApplication sharedApplication]delegate] notifications];
    
    NSSet* categories = [notifications retrieveCategories];
    
    if ([categories containsObject:@"World"]) self.WorldSwitch.on = true;
    if ([categories containsObject:@"Politics"]) self.PoliticsSwitch.on = true;
    if ([categories containsObject:@"Business"]) self.BusinessSwitch.on = true;
    if ([categories containsObject:@"Technology"]) self.TechnologySwitch.on = true;
    if ([categories containsObject:@"Science"]) self.ScienceSwitch.on = true;
    if ([categories containsObject:@"Sports"]) self.SportsSwitch.on = true;
    

Agora, o aplicativo pode armazenar um conjunto de categorias no armazenamento local do dispositivo usado para se registrar no Hub de notificação sempre que o aplicativo for iniciado.The app can now store a set of categories in the device local storage used to register with the notification hub whenever the app starts. O usuário pode alterar a seleção de categorias em tempo de execução e subscribe clicar no método para atualizar o registro do dispositivo.The user can change the selection of categories at runtime and click the subscribe method to update the registration for the device. Em seguida, você atualiza o aplicativo para enviar as notificações de últimas notícias diretamente no próprio aplicativo.Next, you update the app to send the breaking news notifications directly in the app itself.

adicional Enviar notificações marcadas(optional) Send tagged notifications

Se você não tiver acesso ao Visual Studio, poderá pular para a próxima seção e enviar notificações do próprio aplicativo.If you don't have access to Visual Studio, you can skip to the next section and send notifications from the app itself. Você também pode enviar a notificação de modelo apropriada do Azure portal usando a guia Depurar do hub de notificação.You can also send the proper template notification from the Azure portal using the debug tab for your notification hub.

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.

adicional Enviar notificações do dispositivo(optional) Send notifications from the device

Normalmente, as notificações seriam enviadas por um serviço de back-end, mas você pode enviar notificações de últimas notícias diretamente do aplicativo.Normally notifications would be sent by a backend service but, you can send breaking news notifications directly from the app. Para fazer isso, atualize o SendNotificationRESTAPI método que você definiu no tutorial introdução aos hubs de notificação .To do so, you update the SendNotificationRESTAPI method that you defined in the Get started with Notification Hubs tutorial.

  1. No ViewController.m, atualize o SendNotificationRESTAPI método da seguinte maneira para que ele aceite um parâmetro para a marca de categoria e envie a notificação de modelo apropriada.In ViewController.m, update the SendNotificationRESTAPI method as follows so that it accepts a parameter for the category tag and sends the proper template notification.

    - (void)SendNotificationRESTAPI:(NSString*)categoryTag
    {
        NSURLSession* session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration
                                    defaultSessionConfiguration] delegate:nil delegateQueue:nil];
    
        NSString *json;
    
        // Construct the messages REST endpoint
        NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/messages/%@", HubEndpoint,
                                            HUBNAME, API_VERSION]];
    
        // Generated the token to be used in the authorization header.
        NSString* authorizationToken = [self generateSasToken:[url absoluteString]];
    
        //Create the request to add the template notification message to the hub
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
    
        // Add the category as a tag
        [request setValue:categoryTag forHTTPHeaderField:@"ServiceBusNotification-Tags"];
    
        // Template notification
        json = [NSString stringWithFormat:@"{\"messageParam\":\"Breaking %@ News : %@\"}",
                categoryTag, self.notificationMessage.text];
    
        // Signify template notification format
        [request setValue:@"template" forHTTPHeaderField:@"ServiceBusNotification-Format"];
    
        // JSON Content-Type
        [request setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    
        //Authenticate the notification message POST request with the SaS token
        [request setValue:authorizationToken forHTTPHeaderField:@"Authorization"];
    
        //Add the notification message body
        [request setHTTPBody:[json dataUsingEncoding:NSUTF8StringEncoding]];
    
        // Send the REST request
        NSURLSessionDataTask* dataTask = [session dataTaskWithRequest:request
                    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
            {
            NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response;
                if (error || httpResponse.statusCode != 200)
                {
                    NSLog(@"\nError status: %d\nError: %@", httpResponse.statusCode, error);
                }
                if (data != NULL)
                {
                    //xmlParser = [[NSXMLParser alloc] initWithData:data];
                    //[xmlParser setDelegate:self];
                    //[xmlParser parse];
                }
            }];
    
        [dataTask resume];
    }
    
  2. No ViewController.m, atualize a Send Notification ação conforme mostrado no código a seguir.In ViewController.m, update the Send Notification action as shown in the code that follows. Para que ele envie as notificações usando cada marca individualmente e envie para várias plataformas.So that it sends the notifications using each tag individually and sends to multiple platforms.

    - (IBAction)SendNotificationMessage:(id)sender
    {
        self.sendResults.text = @"";
    
        NSArray* categories = [NSArray arrayWithObjects: @"World", @"Politics", @"Business",
                                @"Technology", @"Science", @"Sports", nil];
    
        // Lets send the message as breaking news for each category to WNS, FCM, and APNS
        // using a template.
        for(NSString* category in categories)
        {
            [self SendNotificationRESTAPI:category];
        }
    }
    
  3. Recompile seu projeto e verifique se você não tem nenhum erro de compilação.Rebuild your project and make sure you have no build errors.

Executar a aplicação e gerar notificaçõesRun the app and generate notifications

  1. Pressione o botão Executar para compilar o projeto e iniciar o aplicativo.Press the Run button to build the project and start the app. Selecione algumas opções de últimas notícias para assinar e pressione o botão assinar .Select some breaking news options to subscribe to and then press the Subscribe button. Você deverá ver uma caixa de diálogo indicando que as notificações foram assinadas.You should see a dialog indicating the notifications have been subscribed to.

    Notificação de exemplo no iOS

    Quando você escolhe assinar, o aplicativo converte as categorias selecionadas em marcas e solicita um novo registro de dispositivo para as marcas selecionadas do hub de notificação.When you choose Subscribe, the app converts the selected categories into tags and requests a new device registration for the selected tags from the notification hub.

  2. Insira uma mensagem a ser enviada como últimas notícias e pressione o botão enviar notificação .Enter a message to be sent as breaking news then press the Send Notification button. Como alternativa, execute o aplicativo de console .NET para gerar notificações.Alternatively, run the .NET console app to generate notifications.

    Alterar as preferências de notificação no iOS

  3. Cada dispositivo inscrito nas últimas notícias recebe as notificações de últimas notícias que você acabou de enviar.Each device subscribed to breaking news receives the breaking news notifications you just sent.

Passos seguintesNext steps

Neste tutorial, você enviou notificações de difusão para dispositivos iOS específicos que se registraram para as categorias.In this tutorial, you sent broadcast notifications to specific iOS devices that have registered for the categories. Para saber como enviar notificações localizadas por push, avance para o tutorial a seguir:To learn how to push localized notifications, advance to the following tutorial:

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