Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przegląd
W tym samouczku dodasz powiadomienia push do projektu iOS Quickstart, aby powiadomienie było wysyłane na urządzenie za każdym razem, gdy zostanie wstawiony rekord.
Jeśli nie korzystasz z pobranego projektu serwera szybkiego uruchamiania, będziesz potrzebować pakietu rozszerzeń do powiadomień push. Aby uzyskać więcej informacji, zobacz Praca z zestawem SDK serwera zaplecza platformy .NET dla usługi Azure Mobile Apps .
Symulator systemu iOS nie obsługuje powiadomień push. Potrzebujesz fizycznego urządzenia z systemem iOS i członkostwa w programie Apple Developer Program.
Konfigurowanie centrum powiadomień
Funkcja Mobile Apps usługi Azure App Service wykorzystuje Azure Notification Hubs do wysyłania powiadomień push, co oznacza, że musisz skonfigurować centrum powiadomień dla swojej aplikacji mobilnej.
W witrynie Azure Portal przejdź do usługi App Services, a następnie wybierz zaplecze aplikacji. W Ustawienia wybierz Push.
Aby dodać zasób centrum powiadomień do aplikacji, wybierz pozycję Połącz. Możesz utworzyć węzeł lub połączyć się z istniejącym.
Teraz połączono centrum powiadomień z projektem zaplecza usługi Mobile Apps. Później skonfigurujesz to centrum powiadomień, aby połączyć się z systemem powiadomień platformy (PNS) i wysyłać powiadomienia do urządzeń.
Rejestracja aplikacji na potrzeby powiadomień push
- Zarejestruj identyfikator aplikacji dla aplikacji. Utwórz jawny identyfikator aplikacji (a nie identyfikator aplikacji z symbolami wieloznacznymi) i w polu Identyfikator pakietu użyj dokładnego identyfikatora pakietu, który znajduje się w projekcie szybkiego startu Xcode. Ważne jest również wybranie opcji Powiadomienia push.
- Następnie, aby przygotować się do konfigurowania powiadomień wypychanych, utwórz certyfikat SSL "Rozwojowy" lub "Dystrybucyjny".
Skonfiguruj Azure do wysyłania powiadomień push
- Na komputerze Mac uruchom program Keychain Access. Na pasku nawigacyjnym po lewej stronie w obszarze Kategoria otwórz pozycję Moje certyfikaty. Znajdź certyfikat SSL pobrany w poprzedniej sekcji, a następnie ujawnij jego zawartość. Wybierz tylko certyfikat (nie wybieraj klucza prywatnego). Następnie wyeksportuj go.
- W portalu Azure wybierz Przeglądaj wszystkie>App Services. Następnie wybierz zaplecze usługi Mobile Apps.
- W obszarze Ustawienia wybierz pozycję Powiadomienia usługi App Service. Następnie wybierz nazwę centrum powiadomień.
- Przejdź do Usługi powiadomień wypychanych firmy Apple>Przesyłanie certyfikatu. Przekaż plik .p12, wybierając odpowiedni tryb (w zależności od tego, czy Twój certyfikat SSL klienta z wcześniejszego jest produkcyjny czy testowy). Zapisz wszelkie zmiany.
Twoja usługa jest teraz skonfigurowana do pracy z powiadomieniami push w systemie iOS.
Zaktualizować zaplecze, aby wysyłać powiadomienia push
Zaplecze platformy .NET (C#):
W programie Visual Studio kliknij prawym przyciskiem myszy projekt serwera i kliknij polecenie Zarządzaj pakietami NuGet, wyszukaj ciąg
Microsoft.Azure.NotificationHubs
, a następnie kliknij polecenie Zainstaluj. Spowoduje to zainstalowanie biblioteki usługi Notification Hubs na potrzeby wysyłania powiadomień z zaplecza.W projekcie zaplecza Visual Studio otwórz Kontrolery>TodoItemController.cs. W górnej części pliku dodaj następującą
using
instrukcję:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;
Zastąp metodę
PostTodoItem
poniższym kodem:public async Task<IHttpActionResult> PostTodoItem(TodoItem item) { TodoItem current = await InsertAsync(item); // Get the settings for the server project. HttpConfiguration config = this.Configuration; MobileAppSettingsDictionary settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings(); // Get the Notification Hubs credentials for the Mobile App. string notificationHubName = settings.NotificationHubName; string notificationHubConnection = settings .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString; // Create a new Notification Hub client. NotificationHubClient hub = NotificationHubClient .CreateClientFromConnectionString(notificationHubConnection, notificationHubName); // iOS payload var appleNotificationPayload = "{\"aps\":{\"alert\":\"" + item.Text + "\"}}"; try { // Send the push notification and log the results. var result = await hub.SendAppleNativeNotificationAsync(appleNotificationPayload); // Write the success result to the logs. config.Services.GetTraceWriter().Info(result.State.ToString()); } catch (System.Exception ex) { // Write the failure result to the logs. config.Services.GetTraceWriter() .Error(ex.Message, null, "Push.SendAsync Error"); } return CreatedAtRoute("Tables", new { id = current.Id }, current); }
Ponownie opublikuj projekt serwera.
Node.js backend:
Skonfiguruj projekt zaplecza.
Zastąp skrypt tabeli todoitem.js następującym kodem:
var azureMobileApps = require('azure-mobile-apps'), promises = require('azure-mobile-apps/src/utilities/promises'), logger = require('azure-mobile-apps/src/logger'); var table = azureMobileApps.table(); // When adding record, send a push notification via APNS table.insert(function (context) { // For details of the Notification Hubs JavaScript SDK, // see https://aka.ms/nodejshubs logger.info('Running TodoItem.insert'); // Create a payload that contains the new item Text. var payload = "{\"aps\":{\"alert\":\"" + context.item.text + "\"}}"; // Execute the insert; Push as a post-execute action when results are returned as a Promise. return context.execute() .then(function (results) { // Only do the push if configured if (context.push) { context.push.apns.send(null, payload, function (error) { if (error) { logger.error('Error while sending push notification: ', error); } else { logger.info('Push notification sent successfully!'); } }); } return results; }) .catch(function (error) { logger.error('Error while running context.execute: ', error); }); }); module.exports = table;
Podczas edytowania pliku na komputerze lokalnym ponownie opublikuj projekt serwera.
Dodawanie powiadomień push do aplikacji
Objective-C:
W pliku QSAppDelegate.m zaimportuj zestaw SDK systemu iOS i QSTodoService.h:
#import <MicrosoftAzureMobile/MicrosoftAzureMobile.h> #import "QSTodoService.h"
W
didFinishLaunchingWithOptions
pliku QSAppDelegate.m wstaw następujące wiersze bezpośrednio przedreturn YES;
:UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; [[UIApplication sharedApplication] registerForRemoteNotifications];
W pliku QSAppDelegate.m dodaj następujące metody obsługi. Twoja aplikacja została zaktualizowana, aby obsługiwać powiadomienia push.
// Registration with APNs is successful - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { QSTodoService *todoService = [QSTodoService defaultService]; MSClient *client = todoService.client; [client.push registerDeviceToken:deviceToken completion:^(NSError *error) { if (error != nil) { NSLog(@"Error registering for notifications: %@", error); } }]; } // Handle any failure to register - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError: (NSError *)error { NSLog(@"Failed to register for remote notifications: %@", error); } // Use userInfo in the payload to display an alert. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"%@", userInfo); NSDictionary *apsPayload = userInfo[@"aps"]; NSString *alertString = apsPayload[@"alert"]; // Create alert with notification content. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Notification" message:alertString preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { NSLog(@"Cancel"); }]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { NSLog(@"OK"); }]; [alertController addAction:cancelAction]; [alertController addAction:okAction]; // Get current view controller. UIViewController *currentViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; while (currentViewController.presentedViewController) { currentViewController = currentViewController.presentedViewController; } // Display alert. [currentViewController presentViewController:alertController animated:YES completion:nil]; }
Swift:
Dodaj plik ClientManager.swift z następującą zawartością. Zastąp %AppUrl% adresem URL zaplecza aplikacji mobilnej Azure.
class ClientManager { static let sharedClient = MSClient(applicationURLString: "%AppUrl%") }
W pliku ToDoTableViewController.swift zastąp wiersz w
let client
, który inicjujeMSClient
, następującym wierszem:let client = ClientManager.sharedClient
W pliku AppDelegate.swift zastąp treść elementu
func application
następujący sposób:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.registerUserNotificationSettings( UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) application.registerForRemoteNotifications() return true }
W pliku AppDelegate.swift dodaj następujące metody obsługi. Twoja aplikacja została zaktualizowana, aby obsługiwać powiadomienia push.
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { ClientManager.sharedClient.push?.registerDeviceToken(deviceToken) { error in print("Error registering for notifications: ", error?.description) } } func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { print("Failed to register for remote notifications: ", error.description) } func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject: AnyObject]) { print(userInfo) let apsNotification = userInfo["aps"] as? NSDictionary let apsString = apsNotification?["alert"] as? String let alert = UIAlertController(title: "Alert", message: apsString, preferredStyle: .Alert) let okAction = UIAlertAction(title: "OK", style: .Default) { _ in print("OK") } let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { _ in print("Cancel") } alert.addAction(okAction) alert.addAction(cancelAction) var currentViewController = self.window?.rootViewController while currentViewController?.presentedViewController != nil { currentViewController = currentViewController?.presentedViewController } currentViewController?.presentViewController(alert, animated: true) {} }
Testowanie powiadomień push
- W programie Xcode naciśnij Uruchom i uruchom aplikację na urządzeniu z systemem iOS (pamiętaj, że powiadomienia push nie będą działać na symulatorach). Kliknij OK, aby zaakceptować powiadomienia push; to żądanie pojawia się po raz pierwszy podczas uruchamiania aplikacji.
- W aplikacji dodaj nowy element i kliknij pozycję +.
- Sprawdź, czy otrzymano powiadomienie, a następnie kliknij przycisk OK , aby odrzucić powiadomienie. Ukończyłeś już ten samouczek pomyślnie.
Więcej
- Szablony zapewniają elastyczność w wysyłaniu powiadomień międzyplatformowych i zlokalizowanych. Jak używać biblioteki klienta systemu iOS dla usługi Azure Mobile Apps , pokazano, jak zarejestrować szablony.