Zelf studie: gelokaliseerde push meldingen verzenden naar iOS met Azure Notification HubsTutorial: Send localized push notifications to iOS using Azure Notification Hubs

In deze zelf studie leert u hoe u de sjabloon functie van Azure notification hubs gebruikt voor het uitzenden van verbroken Nieuws meldingen die zijn gelokaliseerd per taal en apparaat.This tutorial shows you how to use the templates feature of Azure Notification Hubs to broadcast breaking news notifications that have been localized by language and device. In deze zelf studie begint u met de iOS-app die u hebt gemaakt in Notification Hubs gebruiken om belangrijk nieuws te verzenden.In this tutorial, you start with the iOS app created in Use Notification Hubs to send breaking news. Wanneer u klaar bent, kunt u zich registreren voor de categorieën waarin u bent geïnteresseerd, een taal opgeven waarin de meldingen moeten worden ontvangen en alleen push meldingen ontvangen voor de geselecteerde categorieën in die taal.When complete, you can register for categories you're interested in, specify a language in which to receive the notifications, and receive only push notifications for the selected categories in that language.

Er zijn twee onderdelen voor dit scenario:There are two parts to this scenario:

  • met de iOS-app kunnen client apparaten een taal opgeven en zich abonneren op verschillende belang rijke Nieuws Categorieën;iOS app allows client devices to specify a language, and to subscribe to different breaking news categories;
  • De back-end verzendt de meldingen met behulp van het Label en de sjabloon functies van Azure notification hubs.The back-end broadcasts the notifications, using the tag and template features of Azure Notification Hubs.

In deze zelfstudie voert u de volgende stappen uit:In this tutorial, you take the following steps:

  • De gebruikers interface van de app bijwerkenUpdate the app user interface
  • De iOS-app bouwenBuild the iOS app
  • Gelokaliseerde sjabloon meldingen verzenden vanuit een .NET-console-appSend localized template notifications from .NET console app
  • Gelokaliseerde sjabloon meldingen verzenden van het apparaatSend localized template notifications from the device

OverzichtOverview

In Notification Hubs gebruiken om belangrijk nieuws te verzenden, hebt u een app gemaakt die gebruikmaakt van Tags om u te abonneren op meldingen voor verschillende nieuws categorieën.In Use Notification Hubs to send breaking news, you built an app that used tags to subscribe to notifications for different news categories. Veel apps zijn echter gericht op meerdere markten en moeten worden gelokaliseerd.Many apps, however, target multiple markets and require localization. Dit betekent dat de inhoud van de meldingen zelf moet worden gelokaliseerd en geleverd aan de juiste set apparaten.It means that the content of the notifications themselves have to be localized and delivered to the correct set of devices. In deze zelf studie wordt uitgelegd hoe u de sjabloon functie van Notification hubs kunt gebruiken om eenvoudig gelokaliseerde vernieuwings meldingen te leveren.This tutorial shows you how to use the template feature of Notification Hubs to easily deliver localized breaking news notifications.

Notitie

Een manier om gelokaliseerde meldingen te verzenden is door meerdere versies van elke tag te maken.One way to send localized notifications is to create multiple versions of each tag. Om bijvoorbeeld Engels, Frans en Mandarijn te ondersteunen, hebt u drie verschillende tags nodig voor wereld nieuws: "world_en", "world_fr" en "world_ch".For instance, to support English, French, and Mandarin, you would need three different tags for world news: "world_en", "world_fr", and "world_ch". Vervolgens moet u een gelokaliseerde versie van het World News naar elk van deze Tags verzenden.You would then have to send a localized version of the world news to each of these tags. In dit onderwerp gebruikt u sjablonen om de verspreiding van tags en de vereiste voor het verzenden van meerdere berichten te voor komen.In this topic, you use templates to avoid the proliferation of tags and the requirement of sending multiple messages.

Sjablonen zijn een manier om op te geven hoe een specifiek apparaat een melding moet ontvangen.Templates are a way to specify how a specific device should receive a notification. De sjabloon bepaalt de exacte indeling van de payload door te verwijzen naar eigenschappen die deel uitmaken van het bericht dat is verzonden door uw back-endapp.The template specifies the exact payload format by referring to properties that are part of the message sent by your app back-end. In uw geval verzendt u een neutraal-bericht dat alle ondersteunde talen bevat:In your case, you send a locale-agnostic message containing all supported languages:

{
    "News_English": "...",
    "News_French": "...",
    "News_Mandarin": "..."
}

Vervolgens zorgt u ervoor dat apparaten worden geregistreerd met een sjabloon die verwijst naar de juiste eigenschap.Then you ensure that devices register with a template that refers to the correct property. Een iOS-app die wil registreren voor Franse nieuws registers, met de volgende syntaxis:For instance, an iOS app that wants to register for French news registers using the following syntax:

{
    aps: {
        alert: "$(News_French)"
    }
}

Zie het artikel over sjablonen voor meer informatie over sjablonen.For more information on templates, see Templates article.

VereistenPrerequisites

De gebruikers interface van de app bijwerkenUpdate the app user interface

In deze sectie wijzigt u de laatste nieuws-app die u in het onderwerp hebt gemaakt, Notification Hubs gebruiken om belangrijk nieuws te verzenden te verzenden om vertaalde nieuws te verzenden met behulp van sjablonen.In this section, you modify the Breaking News app that you created in the topic Use Notification Hubs to send breaking news to send localized breaking news using templates.

Voeg in uw MainStoryboard_iPhone.storyboard een gesegmenteerd besturings element toe met de drie talen: Engels, Frans en Mandarijn.In your MainStoryboard_iPhone.storyboard, add a Segmented Control with the three languages: English, French, and Mandarin.

Het Story Board voor iOS-gebruikers interface maken

Zorg ervoor dat u een IBOutlet toevoegt in uw view controller. h zoals wordt weer gegeven in de volgende afbeelding:Then make sure to add an IBOutlet in your ViewController.h as shown in the following image:

Maak mogelijkheden voor de switches

De iOS-app bouwenBuild the iOS app

  1. Voeg in uw Notification.h de methode retrieveLocale toe en wijzig de methoden Store en Subscriber, zoals wordt weer gegeven in de volgende code:In your Notification.h, add the retrieveLocale method, and modify the store and subscribe methods as shown in the following code:

    - (void) storeCategoriesAndSubscribeWithLocale:(int) locale categories:(NSSet*) categories completion: (void (^)(NSError* error))completion;
    
    - (void) subscribeWithLocale:(int) locale categories:(NSSet*) categories completion:(void (^)(NSError *))completion;
    
    - (NSSet*) retrieveCategories;
    
    - (int) retrieveLocale;
    

    In uw Notification.m wijzigt u de storeCategoriesAndSubscribe-methode door de para meter locale toe te voegen en deze op te slaan in de standaard waarden van de gebruiker:In your Notification.m, modify the storeCategoriesAndSubscribe method, by adding the locale parameter and storing it in the user defaults:

    - (void) storeCategoriesAndSubscribeWithLocale:(int) locale categories:(NSSet *)categories completion:(void (^)(NSError *))completion {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
        [defaults setValue:[categories allObjects] forKey:@"BreakingNewsCategories"];
        [defaults setInteger:locale forKey:@"BreakingNewsLocale"];
        [defaults synchronize];
    
        [self subscribeWithLocale: locale categories:categories completion:completion];
    }
    

    Wijzig vervolgens de methode Subscriber om de land instelling op te nemen:Then modify the subscribe method to include the locale:

    - (void) subscribeWithLocale: (int) locale categories:(NSSet *)categories completion:(void (^)(NSError *))completion{
        SBNotificationHub* hub = [[SBNotificationHub alloc] initWithConnectionString:@"<connection string>" notificationHubPath:@"<hub name>"];
    
        NSString* localeString;
        switch (locale) {
            case 0:
                localeString = @"English";
                break;
            case 1:
                localeString = @"French";
                break;
            case 2:
                localeString = @"Mandarin";
                break;
        }
    
        NSString* template = [NSString stringWithFormat:@"{\"aps\":{\"alert\":\"$(News_%@)\"},\"inAppMessage\":\"$(News_%@)\"}", localeString, localeString];
    
        [hub registerTemplateWithDeviceToken:self.deviceToken name:@"localizednewsTemplate" jsonBodyTemplate:template expiryTemplate:@"0" tags:categories completion:completion];
    }
    

    U gebruikt de methode registerTemplateWithDeviceToken in plaats van registerNativeWithDeviceToken.You use the method registerTemplateWithDeviceToken, instead of registerNativeWithDeviceToken. Wanneer u zich registreert voor een sjabloon, moet u de JSON-sjabloon opgeven en ook een naam voor de sjabloon (omdat de app mogelijk andere sjablonen wil registreren).When you register for a template, you have to provide the json template and also a name for the template (as the app might want to register different templates). Zorg ervoor dat u uw categorieën als Tags registreert, zodat u zeker weet dat u de meldingen voor die nieuws wilt ontvangen.Make sure to register your categories as tags, as you want to make sure to receive the notifications for those news.

    Voeg een methode toe om de land instelling op te halen uit de standaard instellingen van de gebruiker:Add a method to retrieve the locale from the user default settings:

    - (int) retrieveLocale {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    
        int locale = [defaults integerForKey:@"BreakingNewsLocale"];
    
        return locale < 0?0:locale;
    }
    
  2. Nu u de klasse Notifications hebt gewijzigd, moet u ervoor zorgen dat de ViewController het gebruik van de nieuwe UISegmentControl maakt.Now that you modified the Notifications class, you have to make sure that the ViewController makes use of the new UISegmentControl. Voeg de volgende regel toe aan de viewDidLoad-methode om ervoor te zorgen dat de land instellingen die momenteel zijn geselecteerd, worden weer gegeven:Add the following line in the viewDidLoad method to make sure to show the locale that is currently selected:

    self.Locale.selectedSegmentIndex = [notifications retrieveLocale];
    

    Wijzig vervolgens in de subscribe-methode de aanroep van de storeCategoriesAndSubscribe naar de volgende code:Then, in your subscribe method, change your call to the storeCategoriesAndSubscribe to the following code:

    [notifications storeCategoriesAndSubscribeWithLocale: self.Locale.selectedSegmentIndex categories:[NSSet setWithArray:categories] completion: ^(NSError* error) {
        if (!error) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notification" message:
                                    @"Subscribed!" delegate:nil cancelButtonTitle:
                                    @"OK" otherButtonTitles:nil, nil];
            [alert show];
        } else {
            NSLog(@"Error subscribing: %@", error);
        }
    }];
    
  3. Ten slotte moet u de didRegisterForRemoteNotificationsWithDeviceToken-methode bijwerken in uw AppDelegate. m, zodat u uw registratie correct kunt vernieuwen wanneer uw app wordt gestart.Finally, you have to update the didRegisterForRemoteNotificationsWithDeviceToken method in your AppDelegate.m, so that you can correctly refresh your registration when your app starts. Wijzig de aanroep van de subscribe-methode van meldingen met de volgende code:Change your call to the subscribe method of notifications with the following code:

    NSSet* categories = [self.notifications retrieveCategories];
    int locale = [self.notifications retrieveLocale];
    [self.notifications subscribeWithLocale: locale categories:categories completion:^(NSError* error) {
        if (error != nil) {
            NSLog(@"Error registering for notifications: %@", error);
        }
    }];
    

Beschrijving Gelokaliseerde sjabloon meldingen verzenden vanuit een .NET-console-app(optional) Send localized template notifications from .NET console app

Wanneer u de Sjabloonmeldingen verzendt, hoeft u alleen voor een set eigenschappen.When you send template notifications, you only need to provide a set of properties. In dit scenario bevatten de set eigenschappen van de gelokaliseerde versie van het huidige nieuws.In this scenario, the set of properties contain the localized version of the current news.

{
    "News_English": "World News in English!",
    "News_French": "World News in French!",
    "News_Mandarin": "World News in Mandarin!"
}

Verzenden van meldingen met behulp van een C#-consoletoepassingSend notifications using a C# console app

Deze sectie wordt beschreven hoe u meldingen met behulp van een console-app verzendt.This section shows how to send notifications using a console app. De code verzendt meldingen naar Windows Store- en iOS-apparaten.The code broadcasts notifications to both Windows Store and iOS devices. Wijzig de methode SendTemplateNotificationAsync in de console-app die u eerder hebt gemaakt met de volgende code:Modify the SendTemplateNotificationAsync method in the console app you previously created with the following code:

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

    // Sending the notification as a template notification. All template registrations that contain 
    // "messageParam" or "News_<local selected>" 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>();

    // Create an array of breaking news categories.
    var categories = new string[] { "World", "Politics", "Business", "Technology", "Science", "Sports"};
    var locales = new string[] { "English", "French", "Mandarin" };

    foreach (var category in categories)
    {
        templateParams["messageParam"] = "Breaking " + category + " News!";

        // Sending localized News for each tag too...
        foreach( var locale in locales)
        {
            string key = "News_" + locale;

            // Your real localized news content would go here.
            templateParams[key] = "Breaking " + category + " News in " + locale + "!";
        }

        await hub.SendTemplateNotificationAsync(templateParams, category);
    }
}

De methode SendTemplateNotificationAsync levert de gelokaliseerde stukje nieuws alle uw apparaten, ongeacht het platform.The SendTemplateNotificationAsync method delivers the localized piece of news to all your devices, irrespective of the platform. Uw notification hub bouwt en levert de juiste systeemeigen nettolading op alle apparaten die zijn geabonneerd op een specifieke tag.Your notification hub builds and delivers the correct native payload to all the devices subscribed to a specific tag.

Mededeling met Mobile ServicesSending notification with Mobile Services

Gebruik het volgende script in uw Mobile Services scheduler:In your Mobile Services scheduler, use the following script:

var azure = require('azure');
var notificationHubService = azure.createNotificationHubService('<hub name>', '<connection string with full access>');
var notification = {
        "News_English": "World News in English!",
        "News_French": "World News in French!",
        "News_Mandarin", "World News in Mandarin!"
}
notificationHubService.send('World', notification, function(error) {
    if (!error) {
        console.warn("Notification successful");
    }
});

Beschrijving Gelokaliseerde sjabloon meldingen verzenden van het apparaat(optional) Send localized template notifications from the device

Als u geen toegang hebt tot Visual Studio of als u alleen de gelokaliseerde sjabloon meldingen rechtstreeks vanuit de app op het apparaat wilt verzenden.If you don't have access to Visual Studio, or want to just test sending the localized template notifications directly from the app on the device. U kunt de gelokaliseerde sjabloon parameters toevoegen aan de SendNotificationRESTAPI-methode die u in de vorige zelf studie hebt gedefinieerd.You can add the localized template parameters to the SendNotificationRESTAPI method you defined in the previous tutorial.

- (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 : %@\","
            \"News_English\":\"Breaking %@ News in English : %@\","
            \"News_French\":\"Breaking %@ News in French : %@\","
            \"News_Mandarin\":\"Breaking %@ News in Mandarin : %@\","
            categoryTag, self.notificationMessage.text,
            categoryTag, self.notificationMessage.text,  // insert English localized news here
            categoryTag, self.notificationMessage.text,  // insert French localized news here
            categoryTag, self.notificationMessage.text]; // insert Mandarin localized news here

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

Volgende stappenNext steps

In deze zelf studie hebt u gelokaliseerde meldingen naar iOS-apparaten verzonden.In this tutorial, you sent localized notifications to iOS devices. Ga verder met de volgende zelf studie voor meer informatie over het pushen van meldingen naar specifieke gebruikers van iOS-apps:To learn how to push notifications to specific users of iOS apps, advance to the following tutorial: