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 a todos los proyectos resultantes del inicio rápido de Xamarin.Forms. Esto significa que se envía una notificación push a todos los clientes multiplataforma cada vez que se inserta un registro.
Si no usa el proyecto de servidor de inicio rápido descargado, necesitará el paquete de extensión de notificación push. Para más información, consulte Trabajar con el SDK del servidor back-end de .NET para Azure Mobile Apps.
Prerrequisitos
Para iOS, necesitará una pertenencia al Programa para desarrolladores de Apple y un dispositivo iOS físico. El simulador de iOS no admite notificaciones push.
Configuración de un centro de notificaciones
La función Mobile Apps de Azure App Service usa Azure Notification Hubs para enviar notificaciones push, por lo tanto, configurarás un centro de notificaciones para su aplicación móvil.
En Azure Portal, vaya a App Servicesy, a continuación, seleccione el back-end de la aplicación. En Configuración, seleccione Notificaciones Push.
Para agregar un recurso del centro de notificaciones a la aplicación, seleccionar Connect. Puede crear un centro o conectarse a uno existente.
Ahora ha conectado un centro de notificaciones al proyecto de back-end de Mobile Apps. Más adelante, configure este centro de notificaciones para conectarse a un sistema de notificaciones de plataforma (PNS) para insertar en los dispositivos.
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 y ejecución del proyecto de Android (opcional)
Complete esta sección para habilitar las notificaciones push para el proyecto Droid de Xamarin.Forms para Android.
Habilitación de Firebase Cloud Messaging (FCM)
Inicie sesión en la consola Firebase. Si aún no tiene uno, cree un nuevo proyecto de Firebase.
Después de crear el proyecto, seleccione Add Firebase to your Android app (Añade Firebase a tu aplicación de Android).
En la página Add Firebase to your Android app (Agregar Firebase a la aplicación Android), haga lo siguiente:
En Nombre del paquete de Android, copie el valor de su applicationId en el archivo build.gradle de la aplicación. En este ejemplo, es
com.fabrikam.fcmtutorial1app
.Seleccione Registrar aplicación.
Seleccione Descargar google-services.json, guarde el archivo en la carpeta app del proyecto y, a continuación, seleccione Siguiente.
Realice los siguientes cambios de configuración a su proyecto en Android Studio.
En el archivoproject-level build.gradle (<project>/build.gradle), agregue la siguiente instrucción a la sección de dependencias.
classpath 'com.google.gms:google-services:4.0.1'
En el archivo build.gradle de nivel de aplicación (<project>/<app-module>/build.gradle), agregue las siguientes instrucciones a la sección de dependencias.
implementation 'com.google.firebase:firebase-core:16.0.8' implementation 'com.google.firebase:firebase-messaging:17.3.4'
Agregue la siguiente línea al final del archivo app-level build.gradle después de la sección de dependencias.
apply plugin: 'com.google.gms.google-services'
Seleccione Sinc Now (Sincronizar ahora) en la barra de herramientas.
Seleccione Siguiente.
Seleccione Skip this step (Omitir este paso).
En la consola de Firebase, selecciona el engranaje de tu proyecto. Luego, seleccione Project Settings (Configuración del proyecto).
Si aún no ha descargado el archivo google-services.json en la carpeta app del proyecto de Android Studio, puede hacerlo en esta página.
Cambie a la pestaña Cloud Messaging de la parte superior.
Copie y guarde la clave del servidor para su uso posterior. Usas este valor para configurar el concentrador.
Configura el back-end de aplicaciones móviles para enviar solicitudes de notificaciones push mediante FCM
- 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. A continuación, seleccione Configurar servicios de notificaciones push.
- Vaya a Google (GCM). Escriba la clave del servidor heredado de FCM que obtuvo en la consola de Firebase y, a continuación, seleccione Guardar.
El servicio ahora está configurado para trabajar con Firebase Cloud Messaging.
Adición de notificaciones push al proyecto de Android
Con el back-end configurado con FCM, puede agregar componentes y códigos al cliente para registrarse con FCM. También puede registrarse para recibir notificaciones push con Azure Notification Hubs a través del back-end de Mobile Apps y recibir notificaciones.
- En el proyecto Droid , haga clic con el botón derecho en Referencias > administrar paquetes NuGet ....
- En la ventana Administrador de paquetes NuGet, busque el paquete Xamarin.Firebase.Messaging y agréguelo al proyecto.
- En las propiedades del proyecto Droid , establezca la aplicación para compilar con android versión 7.0 o posterior.
- Agregue el archivo google-services.json , descargado desde la consola de Firebase, a la raíz del proyecto Droid y establezca su acción de compilación en GoogleServicesJson. Para obtener más información, vea Agregar el archivo JSON de Google Services.
Registro en Firebase Cloud Messaging
Abra el archivo AndroidManifest.xml e inserte los siguientes
<receiver>
elementos en el<application>
elemento :<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" /> <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="${applicationId}" /> </intent-filter> </receiver>
Implementación del servicio de ID de instancia de Firebase
Agregue una nueva clase al proyecto Droid denominado
FirebaseRegistrationService
y asegúrese de que las siguientesusing
instrucciones están presentes en la parte superior del archivo:using System.Threading.Tasks; using Android.App; using Android.Util; using Firebase.Iid; using Microsoft.WindowsAzure.MobileServices;
Reemplace la clase vacía
FirebaseRegistrationService
por el código siguiente:[Service] [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })] public class FirebaseRegistrationService : FirebaseInstanceIdService { const string TAG = "FirebaseRegistrationService"; public override void OnTokenRefresh() { var refreshedToken = FirebaseInstanceId.Instance.Token; Log.Debug(TAG, "Refreshed token: " + refreshedToken); SendRegistrationTokenToAzureNotificationHub(refreshedToken); } void SendRegistrationTokenToAzureNotificationHub(string token) { // Update notification hub registration Task.Run(async () => { await AzureNotificationHubService.RegisterAsync(TodoItemManager.DefaultManager.CurrentClient.GetPush(), token); }); } }
La
FirebaseRegistrationService
clase es responsable de generar tokens de seguridad que autorizan a la aplicación a acceder a FCM. ElOnTokenRefresh
método se invoca cuando la aplicación recibe un token de registro de FCM. El método recupera el token de laFirebaseInstanceId.Instance.Token
propiedad , que FCM actualiza de forma asincrónica. ElOnTokenRefresh
método se invoca con poca frecuencia, ya que el token solo se actualiza cuando la aplicación se instala o desinstala, cuando el usuario elimina los datos de la aplicación, cuando la aplicación borra el identificador de instancia o cuando la seguridad del token se ha puesto en peligro. Además, el servicio de identificador de instancia de FCM solicitará que la aplicación actualice su token periódicamente, normalmente cada 6 meses.El
OnTokenRefresh
método también invoca elSendRegistrationTokenToAzureNotificationHub
método , que se usa para asociar el token de registro del usuario con el Centro de notificaciones de Azure.
Registro con el Centro de notificaciones de Azure
Agregue una nueva clase al proyecto Droid denominado
AzureNotificationHubService
y asegúrese de que las siguientesusing
instrucciones están presentes en la parte superior del archivo:using System; using System.Threading.Tasks; using Android.Util; using Microsoft.WindowsAzure.MobileServices; using Newtonsoft.Json.Linq;
Reemplace la clase vacía
AzureNotificationHubService
por el código siguiente:public class AzureNotificationHubService { const string TAG = "AzureNotificationHubService"; public static async Task RegisterAsync(Push push, string token) { try { const string templateBody = "{\"data\":{\"message\":\"$(messageParam)\"}}"; JObject templates = new JObject(); templates["genericMessage"] = new JObject { {"body", templateBody} }; await push.RegisterAsync(token, templates); Log.Info("Push Installation Id: ", push.InstallationId.ToString()); } catch (Exception ex) { Log.Error(TAG, "Could not register with Notification Hub: " + ex.Message); } } }
El
RegisterAsync
método crea una plantilla de mensaje de notificación simple como JSON y se registra para recibir notificaciones de plantilla del centro de notificaciones mediante el token de registro de Firebase. Esto garantiza que las notificaciones enviadas desde el Centro de notificaciones de Azure tendrán como destino el dispositivo representado por el token de registro.
Mostrar el contenido de una notificación push
Agregue una nueva clase al proyecto Droid denominado
FirebaseNotificationService
y asegúrese de que las siguientesusing
instrucciones están presentes en la parte superior del archivo:using Android.App; using Android.Content; using Android.Media; using Android.Support.V7.App; using Android.Util; using Firebase.Messaging;
Reemplace la clase vacía
FirebaseNotificationService
por el código siguiente:[Service] [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })] public class FirebaseNotificationService : FirebaseMessagingService { const string TAG = "FirebaseNotificationService"; public override void OnMessageReceived(RemoteMessage message) { Log.Debug(TAG, "From: " + message.From); // Pull message body out of the template var messageBody = message.Data["message"]; if (string.IsNullOrWhiteSpace(messageBody)) return; Log.Debug(TAG, "Notification message body: " + messageBody); SendNotification(messageBody); } void SendNotification(string messageBody) { var intent = new Intent(this, typeof(MainActivity)); intent.AddFlags(ActivityFlags.ClearTop); //Unique request code to avoid PendingIntent collision. var requestCode = new Random().Next(); var pendingIntent = PendingIntent.GetActivity(this, requestCode, intent, PendingIntentFlags.OneShot); var notificationBuilder = new NotificationCompat.Builder(this) .SetSmallIcon(Resource.Drawable.ic_stat_ic_notification) .SetContentTitle("New Todo Item") .SetContentText(messageBody) .SetContentIntent(pendingIntent) .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification)) .SetAutoCancel(true); var notificationManager = NotificationManager.FromContext(this); notificationManager.Notify(0, notificationBuilder.Build()); } }
El
OnMessageReceived
método , que se invoca cuando una aplicación recibe una notificación de FCM, extrae el contenido del mensaje y llama alSendNotification
método . Este método convierte el contenido del mensaje en una notificación local que se inicia mientras se ejecuta la aplicación, con la notificación que aparece en el área de notificación.
Ahora, está listo para probar las notificaciones push en la aplicación que se ejecuta en un dispositivo Android o en el emulador.
Prueba de las notificaciones push en la aplicación Android
Los dos primeros pasos solo son necesarios cuando se prueban en un emulador.
- Asegúrese de que va a realizar la implementación o depuración en un dispositivo o emulador configurado con Google Play Services. Esto se puede comprobar comprobando que las aplicaciones de Play están instaladas en el dispositivo o emulador.
- Para agregar una cuenta de Google al dispositivo Android, haga clic enConfiguración de>aplicaciones>Agregar cuenta. A continuación, siga las indicaciones para agregar una cuenta de Google existente al dispositivo o para crear una nueva.
- En Visual Studio o Xamarin Studio, haga clic con el botón derecho en el proyecto Droid y haga clic en Establecer como proyecto de inicio.
- Haga clic en Ejecutar para compilar el proyecto e iniciar la aplicación en el dispositivo Android o emulador.
- 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 cuando se agrega un elemento.
Configuración y ejecución del proyecto de iOS (opcional)
Esta sección es para ejecutar el proyecto de Xamarin iOS para dispositivos iOS. Puede omitir esta sección si no está trabajando con dispositivos iOS.
Generación del archivo de solicitud de firma de certificado
El Servicio de notificaciones push de Apple (APN) usa certificados para autenticar las notificaciones push. Siga estas instrucciones para crear el certificado de notificación push necesario para enviar y recibir notificaciones. Para obtener más información sobre estos conceptos, consulte la documentación oficial de Apple Push Notification Service (Servicio de notificaciones push de Apple).
Genere el archivo de solicitud de firma de certificado (CSR), que Apple usa para generar un certificado push firmado.
En el Mac, ejecute la herramienta Acceso a llaves. Se puede activar desde la carpeta Utilities (Utilidades) o la carpeta Other (Otros) en el panel de inicio.
Seleccione Keychain Access (Acceso con cadena de claves), expanda Certificate Assistant (Asistente para certificados) y, después, seleccione Request a Certificate from a Certificate Authority (Solicitar un certificado a una entidad de certificación).
Nota:
De forma predeterminada, Keychain Access (Acceso con cadena de claves) selecciona el primer elemento de la lista. Esto puede ser un problema si está en la categoría Certificates (Certificados) y Apple Worldwide Developer Relations Certification Authority (Entidad de certificación de Apple Worldwide Developer Relations) no es el primer elemento de la lista. Antes de generar la solicitud de firma de certificado, asegúrese de que tiene un elemento que no sea clave o de que esté seleccionada la clave Apple Worldwide Developer Relations Certification Authority (Entidad de certificación de Apple Worldwide Developer Relations).
Seleccione una dirección de correo electrónico de usuario, escriba un valor en Common Name (Nombre común), asegúrese de que especifica Saved to disk (Guardar en disco) y, finalmente, seleccione Continue (Continuar). Deje en blanco CA Email Address (Dirección de correo de la entidad de certificación), ya que no es obligatorio.
Escriba un nombre para el archivo CSR en Save As (Guardar como), seleccione la ubicación en Where (Dónde) y, a continuación, seleccione Save (Guardar).
Esta acción guarda el archivo CSR en la ubicación seleccionada. La ubicación predeterminada es Escritorio. Recuerde la ubicación seleccionada para este archivo.
A continuación, registra tu aplicación en Apple, habilita las notificaciones push y carga el archivo CSR exportado para crear un certificado push.
Registro de la aplicación para notificaciones push
Para enviar notificaciones push a una aplicación iOS, registre la aplicación en Apple y también regístrese para el uso de notificaciones push.
Si todavía no ha registrado la aplicación, vaya al portal de aprovisionamiento de iOS en el centro para desarrolladores de Apple. Inicie sesión en el portal con su identificador de Apple y seleccione Identifiers (Identificadores). Luego, seleccione + para registrar una nueva aplicación.
En la pantalla Register a New Identifier (Registrar un nuevo identificador), seleccione el botón de radio App IDs (Id. de aplicaciones). Después, seleccione Continuar.
Actualice los tres campos siguientes de la nueva aplicación y, después, seleccione Continue (Continuar):
Descripción: escriba un nombre descriptivo para la aplicación.
Identificador de agrupación: escriba un identificador de agrupación con el formato Identificador de organización.Nombre del producto, como se mencionó en la Guía de distribución de aplicaciones. El identificador de organización y el nombre del producto deben coincidir con el identificador de la organización y con el nombre del producto que use al crear el proyecto Xcode. En la captura de pantalla que aparece a continuación, el valor de NotificationHubs se usa como identificador de una organización, mientras que el valor GetStarted se usa como el nombre del producto. Asegúrese de que el valor de Bundle Identifier (Identificador de agrupación) coincida con el del proyecto de Xcode para que Xcode use el perfil de publicación correcto.
Notificaciones push: marque la opción Push Notifications (Notificaciones push) en la sección Capabilities (Capacidades).
De esta forma, se genera el identificador de la aplicación y se solicita que confirme la información. Seleccione Continue (Continuar) y, luego, Register (Registrar) para confirmar el nuevo identificador de aplicación.
Después de seleccionar Registrar, verá el nuevo identificador de aplicación como un elemento de línea en la página Certificados, identificadores y perfiles .
En la página de certificados, identificadores y perfiles, bajo Identificadores, localice el elemento de línea del ID de aplicación que acaba de crear y seleccione su fila para mostrar la pantalla de editar la configuración del ID de la aplicación.
Creación de un certificado para Notification Hubs
Para que el centro de notificaciones funcione con APNs, se requiere un certificado. Esto se puede hacer de una de estas dos maneras:
- Cree un archivo .p12 que se pueda cargar directamente en el Centro de notificaciones.
- Cree un .p8 que se pueda usar para la autenticación basada en tokens (el enfoque más reciente).
El enfoque más reciente tiene varias ventajas (en comparación con el uso de certificados) como se documenta en autenticación basada en tokens (HTTP/2) para APNS. Sin embargo, se han proporcionado pasos para ambos enfoques.
OPCIÓN 1: Creación de un certificado push .p12 que puede cargarse directamente en Notification Hub
Desplácese hacia abajo hasta la opción activada Push Notifications (Notificaciones push) y, luego, seleccione Configure (Configurar) para crear el certificado.
Aparece la ventana Apple Push Notification service SSL Certificates (Certificados SSL de Apple Push Notification Service). Seleccione el botón Crear certificado en la sección Certificado SSL de desarrollo .
Se muestra la pantalla Create a new Certificate (Crear un nuevo certificado).
Nota:
Este tutorial usa un certificado de desarrollo. Se usa el mismo proceso cuando se registra un certificado de producción. Solo tiene que asegurarse de usar el mismo tipo de certificado al enviar notificaciones.
Seleccione Elegir archivo, vaya a la ubicación donde guardó el archivo CSR de la primera tarea y, a continuación, haga doble clic en el nombre del certificado para cargarlo. Después, seleccione Continuar.
Una vez que el portal cree el certificado, seleccione el botón Download (Descargar). Guarde el certificado y recuerde la ubicación donde se ha guardado.
El certificado se descarga y guarda en el equipo en la carpeta Descargas .
Nota:
De manera predeterminada, el certificado de desarrollo descargado se denomina aps_development.cer.
Haga doble clic en el certificado de envío descargado aps_development.cer. Esta acción instala el nuevo certificado en la cadena de claves, como se muestra en la imagen siguiente:
Nota:
Aunque el nombre del certificado puede ser diferente, el nombre tendrá el prefijo Apple Development iOS Push Services.
En Acceso a llaves, haga clic en el nuevo certificado de inserción que creó, en la categoría Certificados . Haga clic en Export (Exportar), asigne un nombre al archivo, seleccione el formato .p12 y, después, haga clic en Save (Guardar).
De manera opcional, puede decidir proteger el certificado con una contraseña. Haga clic en OK (Aceptar) si quiere omitir la creación de una contraseña. Anote el nombre de archivo y la ubicación del certificado p12 exportado. Se usan para habilitar la autenticación con APN.
Nota:
El nombre y la ubicación del archivo .p12 pueden ser diferentes a los que se ilustran en este tutorial.
OPCIÓN 2: Creación de un certificado .p8 que se puede usar para la autenticación basada en tokens
Anote los siguientes datos:
- App ID Prefix (Prefijo de identificador de aplicación) (es un identificador de equipo)
- Identificador de paquete
De vuelta en Certificates, Identifiers & Profiles (Certificados, identificadores y perfiles), haga clic en Keys (Claves).
Nota:
Si ya tiene configurada una clave para APNs, puede volver a usar el certificado .p8 que descargó justo después de crearlo. Si es así, puede omitir los pasos del 3 al 5.
Haga clic en el botón + (o en el botón Crear una clave) para crear una nueva clave.
Proporcione un valor de Nombre de clave adecuado y, a continuación, active la opción Servicio de notificaciones push de Apple (APN) y, a continuación, haga clic en Continuar, seguido de Registrar en la pantalla siguiente.
Haga clic en Descargar y, a continuación, mueva el archivo .p8 (con el prefijo AuthKey_) a un directorio local seguro y, a continuación, haga clic en Listo.
Nota:
Asegúrese de mantener el archivo .p8 en un lugar seguro (y guardar una copia de seguridad). Después de descargar tu clave, no se puede volver a descargar porque se elimina la copia del servidor.
En Keys (Claves), haga clic en la clave que acaba de crear (o en una clave existente si decide utilizarla en su lugar).
Anote el valor de Key ID (Id. de clave).
Abra el certificado .p8 en una aplicación adecuada de su elección, como Visual Studio Code y, a continuación, anote el valor de clave. Este es el valor que aparece entre -----BEGIN PRIVATE KEY----- y -----END PRIVATE KEY----- .
-----BEGIN PRIVATE KEY----- <key_value> -----END PRIVATE KEY-----
Nota:
Este es el valor del token que se usará más adelante para configurar el Centro de notificaciones.
Al final de estos pasos, debe tener la siguiente información para usarla más adelante en Configuración del centro de notificaciones con información de APNs:
- Identificador de equipo (consulte el paso 1)
- Identificador de lote (consulte el paso 1)
- Identificador de clave (consulte el paso 7)
- Valor del token , es decir, el valor de clave .p8 (consulte el paso 8)
Creación de un perfil de aprovisionamiento para la aplicación
Vuelva al portal de aprovisionamiento de iOS, seleccione Certificates, Identifiers & Profiles (Certificados, identificadores y perfiles), seleccione Profiles (Perfiles) en el menú izquierdo y, luego, seleccione + para crear un perfil. Aparece la pantalla Register a New Provisioning Profile (Registrar un nuevo perfil de aprovisionamiento).
En Development (Desarrollo), seleccione iOS App Development (Desarrollo de aplicaciones de iOS) como tipo de perfil de aprovisionamiento y, después, haga clic en Continue (Continuar).
A continuación, seleccione el identificador de aplicación que creó en la lista desplegable Id. de aplicación y seleccione Continuar.
En la ventana Select certificates (Seleccionar certificados), seleccione el certificado de desarrollo que se usa para la firma del código y, después, seleccione Continue (Continuar). Este certificado no es el certificado push que usted creó. Si no hay uno, debe crearlo. Si hay un certificado, vaya al paso siguiente. Para crear un certificado de desarrollo si no existe uno:
- Si ve No Certificates are available (No hay certificados disponibles), seleccione Create Certificate(Crear certificado).
- En la sección Software, seleccione Apple Development (Desarrollo de Apple). Después, seleccione Continuar.
- En la pantalla Create a new Certificate (Crear un nuevo certificado), seleccione Choose File (Elegir archivo).
- Vaya al certificado Certificate Signing Request (Solicitud de firma de certificado), selecciónelo y, luego, elija Open (Abrir).
- Selecciona Continuar.
- Descargue el certificado de desarrollo y recuerde la ubicación en la que se guarda.
Vuelva a la página Certificates, Identifiers & Profiles (Certificados, identificadores y perfiles), seleccione Profiles (Perfiles) en el menú izquierdo y, luego, seleccione + para crear un perfil. Aparece la pantalla Register a New Provisioning Profile (Registrar un nuevo perfil de aprovisionamiento).
En la ventana Select certificates (Seleccionar certificados), seleccione el certificado de desarrollo que acaba de crear. Después, seleccione Continuar.
Después, seleccione en los dispositivos que va a usar para la prueba y seleccione Continue (Continuar).
Por último, elija un nombre para el perfil en Nombre del perfil de aprovisionamiento y seleccione Generar.
Cuando se cree el perfil de aprovisionamiento, seleccione Descargar. Recuerde la ubicación donde se guarda.
Vaya a la ubicación del perfil de aprovisionamiento y haga doble clic en él para instalarlo en la máquina de desarrollo de Xcode.
Creación de un centro de notificaciones
En esta sección, creará un centro de notificaciones y configurará la autenticación con APN mediante el certificado de inserción .p12 o la autenticación basada en tokens. Si desea usar un centro de notificaciones ya creado, puede omitir los pasos hasta el paso 5.
Inicie sesión en Azure Portal.
Seleccione Todos los servicios en el menú de la izquierda y seleccione Notification Hubs en la sección Móvil. Seleccione el icono de estrella situado junto al nombre del servicio para agregar el servicio a la sección FAVORITOS en el menú de la izquierda. Después de agregar Notification Hubs a FAVORITOS, selecciónelo en el menú de la izquierda.
En la página Notification Hubs, seleccione Agregar en la barra de herramientas.
En la página Centro de notificaciones, siga estos pasos:
Escriba un nombre en el centro de notificaciones.
Escriba un nombre en Crear un nuevo espacio de nombres. Un espacio de nombres contiene uno o varios concentradores.
Seleccione un valor en el cuadro de lista desplegable Ubicación. Este valor especifica la ubicación en la que desea crear el centro.
Seleccione un grupo de recursos existente en Grupo de recursos o cree un nombre para un nuevo grupo de recursos.
Selecciona Crear.
Seleccione Notificaciones (el icono de campana) y, luego, Ir al recurso. También puede actualizar la lista en la página Notification Hubs y seleccionar su centro.
Seleccione Directivas de acceso en la lista. Observe que las dos cadenas de conexión están disponibles. Las necesitará más adelante para gestionar las notificaciones push.
Importante
No use la directiva DefaultFullSharedAccessSignature en la aplicación. Está pensada para usarse solamente en el back-end.
Configuración del centro de notificaciones con información de APNs
En Notification Services, seleccione Apple (APNS) y siga los pasos adecuados según el enfoque que eligió anteriormente en la sección Creación de un certificado para Notification Hubs .
Nota:
Usa el modo de producción para la aplicación solo si quieres enviar notificaciones push a los usuarios que compraron la aplicación desde la tienda.
OPCIÓN 1: Uso de un certificado de inserción .p12
Seleccione Certificado.
Seleccione el icono del archivo.
Seleccione el archivo .p12 que exportó antes y, luego, Open (Abrir).
Si es necesario, especifique la contraseña correcta.
Seleccione el modo Sandbox.
Haga clic en Guardar.
OPCIÓN 2: Uso de la autenticación basada en tokens
Seleccione Token.
Escriba los siguientes valores adquiridos anteriormente:
- Identificador de clave
- Identificador de lote
- Identificador de equipo
- Seña
Seleccione Sandbox
Haga clic en Guardar.
Ahora ha configurado el centro de notificaciones con APN. También tienes las cadenas de conexión para registrar tu aplicación y enviar notificaciones push.
Configuración del centro de notificaciones para APNS
- 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.
A continuación, configurará la configuración del proyecto de iOS en Xamarin Studio o Visual Studio.
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.
Adición de notificaciones push a la aplicación iOS
En el proyecto de iOS , abra AppDelegate.cs y agregue la siguiente instrucción a la parte superior del archivo de código.
using Newtonsoft.Json.Linq;
En la clase AppDelegate, agregue una sobrescritura para el evento RegisteredForRemoteNotifications para registrarse para notificaciones:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}"; JObject templates = new JObject(); templates["genericMessage"] = new JObject { {"body", templateBodyAPNS} }; // Register for push with your mobile app Push push = TodoItemManager.DefaultManager.CurrentClient.GetPush(); push.RegisterAsync(deviceToken, templates); }
En AppDelegate, agregue también la siguiente invalidación para el controlador de eventos DidReceiveRemoteNotification :
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(); } }
Este método controla las notificaciones entrantes mientras se ejecuta la aplicación.
En la clase AppDelegate , agregue el código siguiente al método FinishedLaunching :
// Register for push notifications. var settings = UIUserNotificationSettings.GetSettingsForTypes( UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, new NSSet()); UIApplication.SharedApplication.RegisterUserNotificationSettings(settings); UIApplication.SharedApplication.RegisterForRemoteNotifications();
Esto permite la compatibilidad con las notificaciones remotas y el registro de inserción de solicitudes.
La aplicación ahora se actualiza para admitir notificaciones push.
Prueba de notificaciones push en la aplicación iOS
Haga clic con el botón derecho en el proyecto de iOS y haga clic en Establecer como proyecto de inicio.
Presione el botón Ejecutar o F5 en Visual Studio para compilar el proyecto e iniciar la aplicación en un dispositivo iOS. 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, a continuación, haga clic en Aceptar para descartar la notificación.
Configurar y ejecutar proyectos de Windows (opcional)
Esta sección es para ejecutar los proyectos winApp y WinPhone81 de Xamarin.Forms para dispositivos Windows. Estos pasos también admiten proyectos de la Plataforma Universal de Windows (UWP). Puede omitir esta sección si no está trabajando con dispositivos Windows.
Registrar la aplicación de Windows para notificaciones push con el Servicio de notificaciones de Windows (WNS)
En el Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el proyecto de aplicación de la Tienda Windows. A continuación, seleccione la Store para asociar la>aplicación de la tienda con el.
Microsoft Store
En el asistente, seleccione Siguiente. A continuación, inicie sesión con su cuenta Microsoft. En Reservar un nuevo nombre para tu aplicación, escribe un nombre para tu aplicación y luego selecciona Reservar.
Una vez creado correctamente el registro de la aplicación, seleccione el nuevo nombre de la aplicación. Seleccione Siguientey, a continuación, seleccione Asociar. Este proceso agrega la información de registro necesaria de la Tienda Windows al manifiesto de aplicación.
Repita los pasos 1 y 3 para el proyecto de aplicación de la Tienda Windows Phone utilizando el mismo registro que creó anteriormente para la aplicación de la Tienda Windows.
Vaya al centro de desarrollo de Windows e inicie sesión con su cuenta Microsoft. En Mis aplicaciones, seleccione el nuevo registro de aplicaciones. A continuación, expanda Services>notificaciones push.
En la página de notificaciones push , en Servicios de notificaciones push de Windows (WNS) y Microsoft Azure Mobile Apps, seleccione el sitio de servicios en vivo . Anote los valores del SID del paquete y el valor actual del Secreto de aplicación.
Importante
El secreto de aplicación y el SID del paquete son credenciales de seguridad importantes. No comparta estos valores con nadie ni distribúyalos con la aplicación.
Configuración del centro de notificaciones para WNS
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 Windows (WNS). A continuación, escriba la clave de seguridad (secreto de cliente) y siD del paquete que obtuvo del sitio de Live Services. A continuación, seleccione Guardar.
El back-end ahora está configurado para usar WNS para enviar notificaciones push.
Agregar notificaciones push a la aplicación de Windows
En Visual Studio, abra App.xaml.cs en un proyecto de Windows y agregue las instrucciones siguientes.
using Newtonsoft.Json.Linq; using Microsoft.WindowsAzure.MobileServices; using System.Threading.Tasks; using Windows.Networking.PushNotifications; using <your_TodoItemManager_portable_class_namespace>;
Reemplace por
<your_TodoItemManager_portable_class_namespace>
el espacio de nombres del proyecto portátil que contiene laTodoItemManager
clase .En App.xaml.cs, agregue el siguiente método InitNotificationsAsync :
private async Task InitNotificationsAsync() { var channel = await PushNotificationChannelManager .CreatePushNotificationChannelForApplicationAsync(); const string templateBodyWNS = "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>"; JObject headers = new JObject(); headers["X-WNS-Type"] = "wns/toast"; JObject templates = new JObject(); templates["genericMessage"] = new JObject { {"body", templateBodyWNS}, {"headers", headers} // Needed for WNS. }; await TodoItemManager.DefaultManager.CurrentClient.GetPush() .RegisterAsync(channel.Uri, templates); }
Este método obtiene el canal de notificación push y registra una plantilla para recibir notificaciones de plantilla desde el centro de notificaciones. Una notificación de plantilla que admita messageParam se entregará a este cliente.
En App.xaml.cs, actualice la definición del método de controlador de eventos OnLaunched agregando el
async
modificador . A continuación, agregue la siguiente línea de código al final del método :await InitNotificationsAsync();
Esto garantiza que el registro de notificaciones push se cree o actualice cada vez que se inicie la aplicación. Es importante hacerlo para garantizar que el canal de notificaciones de WNS esté siempre activo.
En el Explorador de soluciones para Visual Studio, abra el archivo Package.appxmanifest y establezca Capacidad de toast en Sí bajo Notificaciones.
Compile la aplicación y compruebe que no tiene errores. La aplicación cliente ahora debe registrarse para las notificaciones de plantilla desde el back-end de Mobile Apps. Repita esta sección para cada proyecto de Windows de la solución.
Prueba de las notificaciones push en la aplicación de Windows
- En Visual Studio, haga clic con el botón derecho en un proyecto de Windows y haga clic en Establecer como proyecto de inicio.
- Presione el botón Ejecutar para compilar el proyecto e iniciar la aplicación.
- En la aplicación, escriba un nombre para un nuevo todoitem y, a continuación, haga clic en el icono más (+) para agregarlo.
- Compruebe que se recibe una notificación cuando se agrega el elemento.
Pasos siguientes
Puede obtener más información sobre las notificaciones push:
- Envío de notificaciones push desde Azure Mobile Apps
- Firebase Cloud Messaging
- Notificaciones remotas con Firebase Cloud Messaging
-
Diagnóstico de problemas de notificaciones push
Hay varias razones por las que las notificaciones pueden perderse o no llegar a los dispositivos. En este tema se muestra cómo analizar y averiguar la causa principal de los errores de notificación push.
También puede continuar con uno de los siguientes tutoriales:
-
Adición de autenticación a la aplicación
Obtenga información sobre cómo autenticar a los usuarios de la aplicación con un proveedor de identidades. -
Habilitar sincronización sin conexión para la aplicación
Obtenga información sobre cómo agregar compatibilidad sin conexión para la aplicación mediante un back-end de Mobile Apps. Con la sincronización sin conexión, los usuarios pueden interactuar con una aplicación móvil (ver, agregar o modificar datos), incluso cuando no hay ninguna conexión de red.