Adicionar as notificações por push ao seu aplicativo iOS
Visão geral
Neste tutorial, você adicionará notificações por push ao projeto de Início rápido do iOS de forma que sempre que um registro for inserido, uma notificação por push seja enviada.
Se você não usar o projeto do servidor de início rápido baixado, precisará do pacote de extensão da notificação por push. Para saber mais, veja o guia Trabalhar com o SDK do servidor de back-end do .NET para Aplicativos Móveis do Azure.
O simulador do iOS não dá suporte a notificações por push. Você precisa de um dispositivo iOS físico e uma Associação de programa para desenvolvedores da Apple.
Configurar Hub de Notificações
O recurso Aplicativos Móveis do Serviço de Aplicativo do Azure usa Hubs de Notificação para enviar por push e, portanto, você deve configurar um hub de notificação para seu aplicativo móvel.
No Portal do Azure, vá para Serviços de Aplicativos e, em seguida, selecione o back-end do aplicativo. Em Configurações, selecione Push.
Para adicionar um recurso do hub de notificação ao aplicativo, selecione Conectar. Você pode criar um hub ou conectar-se a um existente.
Agora você se conectou a um hub de notificação para o projeto de back-end dos Aplicativos Móveis. Posteriormente, você configura esse hub de notificação para conectar um PNS (Sistema de Notificação de Plataforma) a fim de enviar por push para dispositivos.
Registre o aplicativo para obter notificações por push
- Registrar uma ID para seu aplicativo. Crie uma ID de aplicativo explícita (não uma ID de aplicativo de caractere curinga) e, para ID do Pacote, use a ID do pacote exata em seu projeto de início rápido do Xcode. É também crucial que você marque a opção Notificações por Push .
- Em seguida, para se preparar para configurar notificações por push, crie um certificado SSL de "Desenvolvimento" ou "Distribuição".
Configurar o Azure para enviar notificações por push
- Em seu Mac, inicie Acesso ao Conjunto de Chaves. Na barra de navegação à esquerda, em Categoria, abra Meus Certificados. Localize o certificado SSL que você baixou na seção anterior e, em seguida, divulgue seus conteúdos. Selecione apenas o certificado (não selecione a chave privada). Em seguida, exporte-o.
- No Portal do Azure, selecione Procurar todos os>Serviços de Aplicativos. Em seguida, selecione o back-end dos Aplicativos Móveis.
- Em Configurações, selecione Push do Serviço de Aplicativo. Em seguida, selecione o nome do hub de notificação.
- Acesse oCertificado de Carregamento dos Serviços > de Notificação por Push da Apple. Carregue o arquivo .p12 selecionando o Modo correto (dependendo do certificado de cliente SSL anterior ser de produção ou de área restrita). Salve as alterações.
Agora, seu serviço móvel está configurado para funcionar com notificações por push no iOS.
Atualizar back-end para enviar notificações por push
Back-end .NET (C#):
No Visual Studio, clique com o botão direito do mouse no projeto do servidor e clique em Gerenciar pacotes NuGet, pesquise por
Microsoft.Azure.NotificationHubs
e clique em Instalar. Isso instala a biblioteca de Hubs de Notificação para enviar notificações do seu back-end.No projeto do Visual Studio do back-end, abra Controllers>TodoItemController.cs. Na parte superior do arquivo, adicione a seguinte instrução
using
:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;
Substitua o método
PostTodoItem
pelo seguinte código: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); }
Republicar o projeto de servidor.
Node.js back-end:
Configure seu projeto de back-end.
Substitua o script da tabela todoitem.js pelo seguinte código:
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;
Ao editar o arquivo no seu computador local, republique o projeto do servidor.
Adicionar notificações por push ao aplicativo
Objective-C:
Em QSAppDelegate.m, importe o QSTodoService.h e o SDK do iOS:
#import <MicrosoftAzureMobile/MicrosoftAzureMobile.h> #import "QSTodoService.h"
No
didFinishLaunchingWithOptions
e em QSAppDelegate.m, insira as seguintes linhas antes dereturn YES;
:UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; [[UIApplication sharedApplication] registerForRemoteNotifications];
Em QSAppDelegate.m, adicione os métodos do manipulador a seguir. Seu aplicativo foi atualizado para dar suporte a notificações por 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:
Adicione o arquivo ClientManager.swift com o conteúdo a seguir. Substitua AppUrl % pela URL do back-end do Aplicativo Móvel do Azure.
class ClientManager { static let sharedClient = MSClient(applicationURLString: "%AppUrl%") }
Em ToDoTableViewController.swift, substitua a linha
let client
que inicializa umMSClient
por esta linha:let client = ClientManager.sharedClient
Em AppDelegate.swift, substitua o corpo de
func application
da seguinte maneira:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.registerUserNotificationSettings( UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)) application.registerForRemoteNotifications() return true }
Em AppDelegate.swift, adicione os métodos do manipulador a seguir. Seu aplicativo foi atualizado para dar suporte a notificações por 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) {} }
Testar notificações por push
- No Xcode, pressione Executar e inicie o aplicativo em um dispositivo iOS (observe que o envio por push não funciona em simuladores). Clique em OK para aceitar notificações por push. Essa solicitação ocorrerá na primeira vez que o aplicativo for executado.
- No aplicativo, adicione um novo item e clique em +.
- Verifique se uma notificação foi recebida e clique em OK para ignorar a notificação. Este tutorial foi concluído com êxito.
Mais
- modelos oferecem flexibilidade para enviar envios de plataforma cruzada e pushes localizados. Como usar a biblioteca de cliente do iOS para aplicativos móveis do Azure mostra como registrar os modelos.