Oktatóanyag: Leküldéses értesítések küldése adott iOS-eszközökre az Azure Notification Hubs használatával
Áttekintés
Ez az oktatóanyag bemutatja, hogyan használhatja az Azure Notification Hubsot a legfrissebb hírek iOS-alkalmazásokba való közvetítésére. Ha elkészült, regisztrálhat az önt érdeklő hírkategóriákra, és csak leküldéses értesítéseket kaphat ezekről a kategóriákról. Ezt a forgatókönyvet gyakran használják olyan alkalmazásokban, ahol az értesítéseket egy adott téma iránt korábban érdeklődő felhasználók csoportjainak kell elküldeni. Ilyen lehet például egy RSS-olvasó, a zenerajongóknak készült alkalmazások stb.
A közvetítési forgatókönyveket úgy lehet engedélyezni, ha az értesítési központban a regisztráció létrehozásakor hozzáad egy vagy több címkét. Ha a rendszer értesítéseket küld egy címkének, a címkére regisztrált eszközök megkapják az értesítést. A címkék egyszerű sztringek, nem szükséges őket előzetesen kiosztani. További információ a címkékről: Útválasztás és címkekifejezések az értesítési központokban.
Ebben az oktatóanyagban a következő lépéseket hajtja végre:
- Kategóriakijelölés hozzáadása az alkalmazáshoz
- Címkézett értesítések küldése
- Értesítések küldése az eszközről
- Az alkalmazás futtatása és értesítések létrehozása
Előfeltételek
Ez a témakör az oktatóanyagban létrehozott alkalmazásra épül : Leküldéses értesítések küldése iOS-alkalmazásokba az Azure Notification Hubs használatával. Az oktatóanyag megkezdése előtt már el kell végeznie az oktatóanyagot: Leküldéses értesítések küldése iOS-alkalmazásokba az Azure Notification Hubs használatával.
Kategóriaválasztó hozzáadása az alkalmazáshoz
Az első lépés az, hogy hozzáadja a felhasználói felület elemeit a meglévő storyboardhoz, amelyek lehetővé teszik a felhasználó számára, hogy kategóriákat válasszon a regisztrációhoz. A felhasználó által kiválasztott kategóriákat az eszköz tárolja. Az alkalmazás indításakor egy eszközregisztráció jön létre az értesítési központban, amely címkeként tartalmazza a választott kategóriákat.
A MainStoryboard_iPhone.storyboardban adja hozzá a következő összetevőket az objektumtárból:
"Breaking News" szöveggel ellátott címke,
Címkék kategóriaszövegekkel: "World", "Politics", "Business", "Technology", "Science", "Sports",
Kategóriánként hat kapcsoló állítja be az egyes kapcsolók állapotát alapértelmezés szerint Ki értékre.
Egy "Feliratkozás" feliratú gomb
A történetnek a következőképpen kell kinéznie:
A segédszerkesztőben hozzon létre üzleteket az összes kapcsolóhoz, és hívja őket "WorldSwitch", "PoliticsSwitch", "BusinessSwitch", "TechnologySwitch", "ScienceSwitch", "SportsSwitch"
Hozzon létre egy műveletet a nevű
subscribe
gombhoz; aViewController.h
következő kódot kell tartalmaznia:@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;
Hozzon létre egy új Cocoa Touch Osztályt nevű
Notifications
. Másolja ki a következő kódot az Notifications.h fájl felületszakaszában:@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;
Adja hozzá a következő importálási irányelvet az Notifications.m fájlhoz:
#import <WindowsAzureMessaging/WindowsAzureMessaging.h>
Másolja ki a következő kódot az Notifications.m fájl implementálási szakaszában.
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 { NSString* templateBodyAPNS = @"{\"aps\":{\"alert\":\"$(messageParam)\"}}"; [hub registerTemplateWithDeviceToken:self.deviceToken name:@"simpleAPNSTemplate" jsonBodyTemplate:templateBodyAPNS expiryTemplate:@"0" tags:categories completion:completion]; }
Ez az osztály helyi tárolót használ az eszköz által kapott hírek kategóriáinak tárolására és lekérésére. Emellett tartalmaz egy metódust is, amely sablonregisztrációval regisztrálja ezeket a kategóriákat.
A fájlban
AppDelegate.h
adjon hozzá egy importálási utasítást a osztály egy példányáhozNotifications.h
, és adjon hozzá egy tulajdonságot:Notifications
#import "Notifications.h" @property (nonatomic) Notifications* notifications;
didFinishLaunchingWithOptions
A metódusbanAppDelegate.m
adja hozzá a kódot az értesítési példány inicializálásához a metódus elején.
HUBNAME
ésHUBLISTENACCESS
(definiálva)hubinfo.h
már a és<connection string with listen access>
a<hub name>
helyőrzőket az értesítési központ nevére és a korábban beszerzett DefaultListenSharedAccessSignature kapcsolati sztring kell cserélnie.self.notifications = [[Notifications alloc] initWithConnectionString:HUBLISTENACCESS HubName:HUBNAME];
Megjegyzés
Mivel az ügyfélalkalmazással terjesztett hitelesítő adatok általában nem biztonságosak, csak a figyelési hozzáférés kulcsát terjessze az ügyfélalkalmazással. A figyelési hozzáférés lehetővé teszi, hogy az alkalmazás regisztráljon értesítésekre, a meglévő regisztrációkat azonban nem lehet módosítani, és értesítéseket sem lehet küldeni. A teljes körű hozzáférési kulcsot egy biztonságos háttérszolgáltatásban használja a rendszer értesítések kiküldésére és a meglévő regisztrációk módosítására.
didRegisterForRemoteNotificationsWithDeviceToken
A metódusbanAppDelegate.m
cserélje le a metódusban lévő kódot a következő kódra, hogy átadja az eszköz jogkivonatát aznotifications
osztálynak. Aznotifications
osztály elvégzi a kategóriákkal kapcsolatos értesítések regisztrálását. Ha a felhasználó módosítja a kategóriakijelöléseket, hívja meg a metódust asubscribeWithCategories
feliratkozás gombra válaszul, hogy frissítse őket.Megjegyzés
Mivel az Apple Push Notification Service (APNS) által hozzárendelt eszköz token bármikor változhat, az értesítési hibák elkerülése érdekében gyakran kell regisztrálnia az értesítésekre. Ebben a példában a rendszer az alkalmazás minden egyes indításakor regisztrál az értesítésekre. A gyakran, naponta egynél többször futtatott alkalmazások esetén a sávszélesség megőrzése érdekében akár ki is hagyhatja a regisztrációt, ha kevesebb mint egy nap telt el az előző regisztráció óta.
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); } }];
Ezen a ponton nem lehet más kód a
didRegisterForRemoteNotificationsWithDeviceToken
metódusban.A Notification Hubs használatának első lépéseit ismertető oktatóanyag elvégzése után az alábbi módszereknek már jelen
AppDelegate.m
kell lenniük. Ha nem, adja hozzá őket.- (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"]]; }
Ez a metódus egy egyszerű UIAlert megjelenítésével kezeli az alkalmazás futtatásakor kapott értesítéseket.
A fájlban
ViewController.m
adjon hozzá egy utasítástimport
,AppDelegate.h
és másolja a következő kódot az XCode által létrehozottsubscribe
metódusba. Ez a kód frissíti az értesítési regisztrációt, hogy a felhasználó által a felhasználói felületen kiválasztott új kategóriacímkéket használja.#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); } }];
Ez a metódus kategóriákat
NSMutableArray
hoz létre, és aNotifications
osztály használatával tárolja a listát a helyi tárolóban, és regisztrálja a megfelelő címkéket az értesítési központban. A kategóriák módosításakor a rendszer újra létrehozza a regisztrációt az új kategóriákkal.A fájlban
ViewController.m
adja hozzá a következő kódot aviewDidLoad
metódushoz, hogy a korábban mentett kategóriák alapján állítsa be a felhasználói felületet.// 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;
Az alkalmazás mostantól tárolhat kategóriákat az eszköz helyi tárolójában, amellyel regisztrálhat az értesítési központban, amikor az alkalmazás elindul. A felhasználó módosíthatja a kategóriák kiválasztását futásidőben, és a subscribe
metódusra kattintva frissítheti az eszköz regisztrációját. Ezután frissíti az alkalmazást, hogy közvetlenül az alkalmazásban küldje el a legfrissebb híreket.
(nem kötelező) Címkézett értesítések küldése
Ha nincs hozzáférése a Visual Studióhoz, ugorjon a következő szakaszra, és küldjön értesítéseket magáról az alkalmazásról. A megfelelő sablonértesítést a Azure Portal is elküldheti az értesítési központ hibakeresési lapján.
Ebben a szakaszban a legfrissebb híreket címkézett sablonértesítésekként fogja elküldeni egy .NET-konzolalkalmazásból.
A Visual Studióban hozzon létre egy új Visual C#-konzolalkalmazást:
- A menüben válassza azÚj>projektfájlja> lehetőséget.
- Az Új projekt létrehozása területen válassza a C# konzolalkalmazását (.NET-keretrendszer) a sablonok listájában, majd válassza a Tovább gombot.
- Adja meg az alkalmazás nevét.
- A Megoldásbeállításnál válassza a Hozzáadás a megoldáshoz lehetőséget, majd válassza a Létrehozás lehetőséget a projekt létrehozásához.
Válassza az Eszközök>NuGet Package Manager Csomagkezelő>konzol lehetőséget, majd a konzolablakban futtassa a következő parancsot:
Install-Package Microsoft.Azure.NotificationHubs
Ez a művelet egy hivatkozást ad hozzá az Azure Notification Hubs SDK-hoz a Microsoft.Azure.NotificationHubs csomag használatával.
Nyissa meg a Program.cs fájlt, és adja hozzá a következő
using
utasítást:using Microsoft.Azure.NotificationHubs;
A
Program
osztályban adja hozzá a következő metódust, vagy ha már létezik, cserélje le azt a következőre: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"}}; // 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/FCM, 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); } }
Ez a kód sablonértesítéseket küld a sztringtömb mind a hat címkéjének. A címkék használatával biztosítható, hogy az eszközök csak a regisztrált kategóriákhoz tartozó értesítéseket fogadják.
A
<hub name>
és a<connection string with full access>
helyőrzőket cserélje le a fenti kódban az értesítési központ nevére és a DefaultFullSharedAccessSignature az értesítési központ irányítópultjáról származó kapcsolati sztringjére.A metódusban
Main()
adja hozzá a következő sorokat:SendTemplateNotificationAsync(); Console.ReadLine();
Hozza létre a konzolalkalmazást.
(nem kötelező) Értesítések küldése az eszközről
Az értesítéseket általában egy háttérszolgáltatás küldi el, de közvetlenül az alkalmazásból küldhet friss híreket. Ehhez frissítenie kell a SendNotificationRESTAPI
Notification Hubs használatának első lépései oktatóanyagban definiált metódust.
A fájlban
ViewController.m
frissítse a metódust azSendNotificationRESTAPI
alábbiak szerint, hogy elfogadja a kategóriacímke paraméterét, és elküldi a megfelelő sablonértesítést.- (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]; }
A fájlban
ViewController.m
frissítse aSend Notification
műveletet a következő kódban látható módon. Így az értesítéseket egyenként küldi el az egyes címkék használatával, és több platformra küldi.- (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]; } }
Építse újra a projektet, és győződjön meg arról, hogy nincsenek buildelési hibák.
Az alkalmazás futtatása és értesítések létrehozása
Nyomja le a Run (Futtatás) gombot a projekt felépítéséhez és az alkalmazás elindításához. Válassza ki a legfrissebb híreket, amelyekre feliratkozhat, majd nyomja le a Feliratkozás gombot. Meg kell jelennie egy párbeszédpanelnek, amely jelzi, hogy az értesítések elő lettek fizetve.
Amikor a Feliratkozás lehetőséget választja, az alkalmazás címkékké alakítja a kijelölt kategóriákat, és új eszközregisztrációt kér a kijelölt címkékhez az értesítési központból.
Írjon be egy üzenetet, amelyet friss hírekként szeretne elküldeni, majd nyomja le az Értesítés küldése gombot. Másik lehetőségként futtassa a .NET-konzolalkalmazást értesítések létrehozásához.
A legfrissebb hírekre előfizetett összes eszköz megkapja az imént küldött friss híreket.
Következő lépések
Ebben az oktatóanyagban közvetítési értesítéseket küldött bizonyos, a kategóriákhoz regisztrált iOS-eszközökre. A honosított értesítések leküldéséről az alábbi oktatóanyagban tájékozódhat: