Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Información general
En este tutorial, agregará notificaciones push al proyecto de inicio rápido de Xamarin.iOS para que se envíe una notificación push al dispositivo cada vez que se inserte un registro.
Si no usa el proyecto de servidor de inicio rápido descargado, necesitará el paquete de extensión de notificación push. Consulte Trabajar con el SDK del servidor back-end de .NET para Azure Mobile Apps para más información.
Prerrequisitos
- Complete el tutorial de inicio rápido de Xamarin.iOS .
- Un dispositivo iOS físico. El simulador de iOS no admite las notificaciones push.
Registro de la aplicación para notificaciones push en el portal para desarrolladores de Apple
- Registrar un identificador de aplicación para tu app. Cree un identificador de aplicación explícito (no un identificador de aplicación comodín) y, para id. de lote, use el identificador de lote exacto que se encuentra en el proyecto de inicio rápido de Xcode. También es fundamental seleccionar la opción Notificaciones Push.
- A continuación, para preparar la configuración de notificaciones push, cree un certificado SSL de "desarrollo" o "distribución".
Configuración de la aplicación móvil para enviar notificaciones push
- En el equipo Mac, inicie acceso a llaveros. En la barra de navegación izquierda, en Categoría, abra Mis certificados. Busque el certificado SSL que descargó en la sección anterior y, a continuación, divulga su contenido. Seleccione solo el certificado (no seleccione la clave privada). A continuación, exporta .
- En el portal de Azure, seleccione Examinar todo>Servicios de Aplicaciones. A continuación, seleccione el back-end de Mobile Apps.
- En Configuración, seleccione Notificaciones Push de App Service. A continuación, seleccione el nombre del centro de notificaciones.
- Vaya a Apple Push Notification Services>Cargar Certificado. Cargue el archivo .p12, seleccionando el modo correcto (en función de si el certificado SSL de cliente anterior es de producción o entorno de pruebas). Guarde los cambios.
El servicio ahora está configurado para trabajar con notificaciones push en iOS.
Actualización del proyecto de servidor para enviar notificaciones push
En esta sección, actualizará el código del proyecto de back-end de Mobile Apps existente para enviar una notificación push cada vez que se agregue un nuevo elemento. Este proceso se basa en la característica de plantilla de Azure Notification Hubs, que permite notificaciones multiplataforma. Los distintos clientes se registran para las notificaciones push mediante plantillas, y una única notificación universal puede alcanzar a todas las plataformas cliente.
Elija uno de los procedimientos siguientes que coincida con el tipo de proyecto back-end, ya sea back-end de .NET o Node.js back-end.
Proyecto back-end de .NET
En Visual Studio, haga clic con el botón derecho en el proyecto de servidor. A continuación, seleccione Administrar paquetes NuGet. Busque
Microsoft.Azure.NotificationHubs
y seleccione Instalar. Este proceso instala la biblioteca de Notification Hubs para enviar notificaciones desde el back-end.En el proyecto de servidor, abra Controllers>TodoItemController.cs. A continuación, agregue las siguientes sentencias using:
using System.Collections.Generic; using Microsoft.Azure.NotificationHubs; using Microsoft.Azure.Mobile.Server.Config;
En el método PostTodoItem, agregue el código siguiente después de la llamada a InsertAsync:
// 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); // Send the message so that all template registrations that contain "messageParam" // receive the notifications. This includes APNS, GCM, WNS, and MPNS template registrations. Dictionary<string,string> templateParams = new Dictionary<string,string>(); templateParams["messageParam"] = item.Text + " was added to the list."; try { // Send the push notification and log the results. var result = await hub.SendTemplateNotificationAsync(templateParams); // 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"); }
Este proceso envía una notificación de plantilla que contiene el item.Text cuando se inserta un nuevo elemento.
Republíque el proyecto del servidor.
Proyecto de back-end en Node.js
Configure el proyecto de back-end.
Reemplace el código existente en todoitem.js por el código siguiente:
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(); table.insert(function (context) { // For more information about the Notification Hubs JavaScript SDK, // see https://aka.ms/nodejshubs. logger.info('Running TodoItem.insert'); // Define the template payload. var payload = '{"messageParam": "' + context.item.text + '" }'; // Execute the insert. The insert returns the results as a promise. // Do the push as a post-execute action within the promise flow. return context.execute() .then(function (results) { // Only do the push if configured. if (context.push) { // Send a template notification. context.push.send(null, payload, function (error) { if (error) { logger.error('Error while sending push notification: ', error); } else { logger.info('Push notification sent successfully!'); } }); } // Don't forget to return the results from the context.execute(). return results; }) .catch(function (error) { logger.error('Error while running context.execute: ', error); }); }); module.exports = table;
Este proceso envía una notificación de plantilla que contiene item.text cuando se inserta un nuevo elemento.
Al editar el archivo en el equipo local, vuelva a publicar el proyecto de servidor.
Configuración del proyecto de Xamarin.iOS
Configuración del proyecto de iOS en Xamarin Studio
En Xamarin.Studio, abra Info.plist y actualice el identificador de lote con el identificador de lote que creó anteriormente con el nuevo identificador de aplicación.
Desplácese hacia abajo hasta Modos de fondo. Seleccione el cuadro Habilitar modos de fondo y el cuadro Notificaciones remotas .
Haga doble clic en el proyecto en el Panel de soluciones para abrir Opciones del proyecto.
En Construcción, elija Firma de Paquete de iOS y seleccione la identidad y el perfil de aprovisionamiento correspondientes que acaba de configurar para este proyecto.
Esto garantiza que el proyecto use el nuevo perfil para la firma de código. Para obtener la documentación oficial sobre el aprovisionamiento de dispositivos de Xamarin, consulte Aprovisionamiento de dispositivos de Xamarin.
Configuración del proyecto de iOS en Visual Studio
En Visual Studio, haga clic con el botón derecho en el proyecto y, a continuación, haga clic en Propiedades.
En las páginas de propiedades, haga clic en la pestaña Aplicación de iOS y actualice el identificador con el identificador que creó anteriormente.
En la pestaña Firma de paquetes de iOS, seleccione la identidad y el perfil de aprovisionamiento correspondiente que acaba de configurar para este proyecto.
Esto garantiza que el proyecto use el nuevo perfil para la firma de código. Para obtener la documentación oficial sobre el aprovisionamiento de dispositivos de Xamarin, consulte Aprovisionamiento de dispositivos de Xamarin.
Haga doble clic en Info.plist para abrirlo y, a continuación, habilite RemoteNotifications en Modos de fondo.
Incorporación de notificaciones push a la aplicación
En QSTodoService, agregue la siguiente propiedad para que AppDelegate pueda adquirir el cliente móvil:
public MobileServiceClient GetClient { get { return client; } private set { client = value; } }
Agregue la siguiente
using
instrucción a la parte superior del archivo AppDelegate.cs .using Microsoft.WindowsAzure.MobileServices; using Newtonsoft.Json.Linq;
En AppDelegate, invalide el evento FinishedLaunching :
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { // registers for push for iOS8 var settings = UIUserNotificationSettings.GetSettingsForTypes( UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, new NSSet()); UIApplication.SharedApplication.RegisterUserNotificationSettings(settings); UIApplication.SharedApplication.RegisterForRemoteNotifications(); return true; }
En el mismo archivo, invalide el
RegisteredForRemoteNotifications
evento. En este código, usted está registrando una notificación de plantilla simple que se enviará a través de todas las plataformas admitidas por el servidor.Para obtener más información sobre las plantillas con Notification Hubs, consulte Plantillas.
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { MobileServiceClient client = QSTodoService.DefaultService.GetClient; const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}"; JObject templates = new JObject(); templates["genericMessage"] = new JObject { {"body", templateBodyAPNS} }; // Register for push with your mobile app var push = client.GetPush(); push.RegisterAsync(deviceToken, templates); }
A continuación, invalide el evento DidReceivedRemoteNotification :
public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler) { NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary; string alert = string.Empty; if (aps.ContainsKey(new NSString("alert"))) alert = (aps [new NSString("alert")] as NSString).ToString(); //show alert if (!string.IsNullOrEmpty(alert)) { UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null); avAlert.Show(); } }
La aplicación ahora se actualiza para admitir notificaciones push.
Prueba de las notificaciones push en la aplicación
Presione el botón Ejecutar para compilar el proyecto e iniciar la aplicación en un dispositivo compatible con iOS y, a continuación, haga clic en Aceptar para aceptar notificaciones push.
Nota:
Debes aceptar explícitamente notificaciones push de la aplicación. Esta solicitud solo se produce la primera vez que se ejecuta la aplicación.
En la aplicación, escriba una tarea y, a continuación, haga clic en el icono más (+).
Compruebe que se recibe una notificación y haga clic en Aceptar para descartar la notificación.
Repita el paso 2 e cierre inmediatamente la aplicación y compruebe que se muestra una notificación.
Ha completado correctamente este tutorial.