Megosztás a következőn keresztül:


Oktatóanyag: Honosított leküldéses értesítések küldése iOS-be az Azure Notification Hubs használatával

Ez az oktatóanyag bemutatja, hogyan használhatja az Azure Notification Hubs sablonok funkcióját a nyelv és az eszköz által honosított legfrissebb hírértesítések közvetítésére. Ebben az oktatóanyagban a Notification Hubs használatával létrehozott iOS-alkalmazással kezdi a legfrissebb hírek küldését. Ha elkészült, regisztrálhat az önt érdeklő kategóriákra, megadhatja az értesítések fogadásának nyelvét, és csak az adott nyelven kiválasztott kategóriákra vonatkozó leküldéses értesítéseket kaphat.

A forgatókönyvnek két része van:

  • Az iOS-alkalmazás lehetővé teszi, hogy az ügyféleszközök megadják a nyelvet, és feliratkozzanak a különböző hírek kategóriáira;
  • A háttér az Azure Notification Hubs címke - és sablonfunkcióinak használatával közvetíti az értesítéseket.

Ebben az oktatóanyagban a következő lépéseket hajtja végre:

  • Az alkalmazás felhasználói felületének frissítése
  • Az iOS-alkalmazás létrehozása
  • Honosított sablonértesítések küldése a .NET-konzolalkalmazásból
  • Honosított sablonértesítések küldése az eszközről

Áttekintés

A Notification Hubs használata friss hírek küldéséhez című témakörben létrehozott egy alkalmazást, amely címkéket használt a különböző hírkategóriák értesítéseire való feliratkozáshoz. Számos alkalmazás azonban több piacot céloz meg, és honosítást igényel. Ez azt jelenti, hogy maguknak az értesítéseknek a tartalmát a megfelelő eszközkészletre kell lokalizálni és kézbesíteni. Ez az oktatóanyag bemutatja, hogyan használhatja a Notification Hubs sablonfunkcióját a honosított legfrissebb hírek értesítéseinek egyszerű kézbesítéséhez.

Megjegyzés

A honosított értesítések küldésének egyik módja az egyes címkék több verziójának létrehozása. Az angol, a francia és a mandarin támogatásához például három különböző címkére lenne szükség a világhíradókhoz: "world_en", "world_fr" és "world_ch". Ezután minden címkére el kell küldenie a világhír honosított verzióját. Ebben a témakörben sablonokkal kerüli el a címkék elterjedését és a több üzenet küldésének követelményét.

A sablonok segítségével megadhatja, hogy egy adott eszköz hogyan kapjon értesítést. A sablon meghatározza a hasznos adatok pontos formátumát a háttéralkalmazás által küldött üzenet részét képező tulajdonságokra hivatkozva. Ebben az esetben egy területi alapú üzenetet küld, amely az összes támogatott nyelvet tartalmazza:

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

Ezután győződjön meg arról, hogy az eszközök a megfelelő tulajdonságra hivatkozó sablonnal regisztrálnak. Például egy iOS-alkalmazás, amely a következő szintaxissal szeretne regisztrálni a francia hírregisztrációkra:

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

A sablonokról további információt a Sablonok című cikkben talál.

Előfeltételek

Az alkalmazás felhasználói felületének frissítése

Ebben a szakaszban módosítja a következő témakörben létrehozott Breaking News alkalmazást : A Notification Hubs használata a legfrissebb hírek küldéséhez honosított friss hírek küldése sablonokkal.

MainStoryboard_iPhone.storyboardA fájlban adjon hozzá egy szegmentált vezérlőt a következő három nyelvvel: angol, francia és mandarin.

Az iOS felhasználói felületi storyboard létrehozása

Ezután mindenképpen vegyen fel egy IBOutletet a ViewController.h fájlba az alábbi képen látható módon:

Aljzatok létrehozása a kapcsolókhoz

Az iOS-alkalmazás létrehozása

  1. Adja hozzá a metódust Notification.ha retrieveLocale metódushoz, és módosítsa az áruház és az előfizetés metódusát az alábbi kódban látható módon:

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

    Notification.mA -ben módosítsa a metódust storeCategoriesAndSubscribe úgy, hogy hozzáadja a locale paramétert, és a felhasználó alapértelmezés szerint tárolja:

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

    Ezután módosítsa a feliratkozási metódust úgy, hogy tartalmazza a területi beállításokat:

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

    A metódust registerTemplateWithDeviceTokenhasználja a helyett registerNativeWithDeviceToken. Amikor regisztrál egy sablonra, meg kell adnia a json sablont és a sablon nevét is (mivel előfordulhat, hogy az alkalmazás különböző sablonokat szeretne regisztrálni). Ügyeljen arra, hogy a kategóriákat címkékként regisztrálja, mivel meg szeretné győződni arról, hogy megkapja az adott hírekkel kapcsolatos értesítéseket.

    Adjon hozzá egy metódust, amely lekéri a területi beállításokat a felhasználó alapértelmezett beállításaiból:

    - (int) retrieveLocale {
        NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    
        int locale = [defaults integerForKey:@"BreakingNewsLocale"];
    
        return locale < 0?0:locale;
    }
    
  2. Most, hogy módosította az osztályt Notifications , meg kell győződnie arról, hogy az ViewController újat UISegmentControlhasználja. Adja hozzá a következő sort a viewDidLoad metódushoz, és győződjön meg arról, hogy az aktuálisan kijelölt területi beállítás látható:

    self.Locale.selectedSegmentIndex = [notifications retrieveLocale];
    

    Ezután a subscribe metódusban módosítsa a hívást a storeCategoriesAndSubscribe következő kódra:

    [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. Végül frissítenie kell a metódust az didRegisterForRemoteNotificationsWithDeviceToken AppDelegate.m-ben, hogy megfelelően frissíthesse a regisztrációt az alkalmazás indításakor. Módosítsa a hívást az subscribe értesítések metódusára a következő kóddal:

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

(nem kötelező) Honosított sablonértesítések küldése a .NET-konzolalkalmazásból

Sablonértesítések küldésekor csak egy tulajdonságkészletet kell megadnia. Ebben a forgatókönyvben a tulajdonságok halmaza tartalmazza az aktuális hírek honosított verzióját.

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

Értesítések küldése C#-konzolalkalmazással

Ez a szakasz bemutatja, hogyan küldhet értesítéseket konzolalkalmazásokkal. A kód értesítéseket küld a Windows Áruházba és az iOS-eszközökre is. Módosítsa a SendTemplateNotificationAsync metódust a korábban létrehozott konzolalkalmazásban az alábbi kóddal:

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

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

A SendTemplateNotificationAsync metódus a platformtól függetlenül minden eszközére eljuttatja a honosított híreket. Az értesítési központ létrehozza és kézbesíti a megfelelő natív hasznos adatokat az adott címkére feliratkozott összes eszköznek.

Értesítés küldése a Mobile Services szolgáltatással

A Mobile Services ütemezőjében használja a következő szkriptet:

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

(nem kötelező) Honosított sablonértesítések küldése az eszközről

Ha nincs hozzáférése a Visual Studióhoz, vagy csak tesztelni szeretné a honosított sablonértesítések küldését közvetlenül az alkalmazásból az eszközön. Az előző oktatóanyagban meghatározott metódushoz hozzáadhatja a SendNotificationRESTAPI honosított sablonparamétereket.

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

Következő lépések

Ebben az oktatóanyagban honosított értesítéseket küldött iOS-eszközökre. Ha meg szeretné tudni, hogyan küldhet le értesítéseket az iOS-alkalmazások adott felhasználóinak, lépjen tovább az alábbi oktatóanyagra: