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
- Végezze el a Leküldéses értesítések adott iOS-eszközökre oktatóanyagot, és rendelkezzen a kóddal, mert ez az oktatóanyag közvetlenül erre a kódra épül.
- A Visual Studio 2019 nem kötelező.
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.storyboard
A fájlban adjon hozzá egy szegmentált vezérlőt a következő három nyelvvel: angol, francia és mandarin.
Ezután mindenképpen vegyen fel egy IBOutletet a ViewController.h fájlba az alábbi képen látható módon:
Az iOS-alkalmazás létrehozása
Adja hozzá a metódust
Notification.h
aretrieveLocale
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.m
A -ben módosítsa a metóduststoreCategoriesAndSubscribe
úgy, hogy hozzáadja alocale
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
registerTemplateWithDeviceToken
használja a helyettregisterNativeWithDeviceToken
. 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; }
Most, hogy módosította az osztályt
Notifications
, meg kell győződnie arról, hogy azViewController
újatUISegmentControl
használja. Adja hozzá a következő sort aviewDidLoad
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 astoreCategoriesAndSubscribe
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); } }];
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 azsubscribe
é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:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: