Tutorial: Envío de notificaciones push a aplicaciones de Xamarin.iOS mediante Azure Notification Hubs

Información general

Este tutorial muestra cómo puede utilizar los Centros de notificaciones de Azure para enviar notificaciones de inserción a una aplicación iOS. Cree una aplicación Xamarin.iOS vacía que reciba notificaciones push mediante Apple Push Notification Service (APN).

Cuando haya finalizado, podrá usar un Centro de notificaciones para difundir notificaciones push a todos los dispositivos que ejecutan su aplicación. El código acabado está disponible en el ejemplo de la aplicación NotificationHubs.

En este tutorial, se crea o actualiza código para realizar las tareas siguientes:

  • Generación del archivo de solicitud de firma de certificado
  • Registro de la aplicación para notificaciones push
  • Creación de un perfil de aprovisionamiento para la aplicación
  • Configuración de un Centro de notificaciones para notificaciones push de iOS
  • Prueba de envío de las notificaciones push

Prerrequisitos

  • Suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

  • La versión más reciente de Xcode

  • Un dispositivo compatible con iOS 10 (o una versión posterior)

  • programa para desarrolladores de Apple

  • Visual Studio para Mac

    Nota

    Debido a los requisitos de configuración de las notificaciones push de iOS, debe implementar y probar la aplicación de ejemplo en un dispositivo iOS físico (iPhone o iPad) en lugar de hacerlo en un simulador.

La realización de este tutorial es un requisito previo para todos los demás tutoriales de Notification Hubs para aplicaciones Xamarin.iOS.

Generación del archivo de solicitud de firma de certificado

El servicio Apple Push Notification Service (APNS) utiliza certificados para autenticar las notificaciones push. Siga estas instrucciones para crear el certificado de inserción 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 utiliza Apple para generar un certificado push firmado.

  1. 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.

  2. 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).

    Use Keychain Access to request a new certificate

    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).

  3. 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.

    Required certificate information

  4. 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).

    Choose a file name for the certificate

    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, se registrará la aplicación en Apple, se habilitarán las notificaciones push y se cargará el archivo CSR exportado para crear un certificado de inserción.

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.

  1. 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.

    iOS Provisioning Portal App IDs page

  2. 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.

    iOS Provisioning Portal register new ID page

  3. 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.

      iOS Provisioning Portal register app ID page

    • Notificaciones push: marque la opción Push Notifications (Notificaciones push) en la sección Capabilities (Capacidades).

      Form to register a new App ID

      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.

      Confirm new App ID

      Tras seleccionar Register, (Registrar), verá el nuevo identificador de aplicación como un elemento de línea en la página Certificates, Identifiers & Profiles (Certificados, identificadores y perfiles).

  4. En esta página, en Identifiers (Identificadores), busque el elemento de línea con el identificador de aplicación que acaba de crear y seleccione su fila para mostrar la pantalla Edit your App ID Configuration (Editar la configuración del id. de 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 dos maneras:

  1. Cree un certificado .p12 que se pueda cargar directamente en el centro de notificaciones.
  2. Cree un certificado .p8 que se pueda usar para autenticación basada en tokens (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 token (HTTP/2) para APNs. Sin embargo, se han proporcionado pasos para ambos enfoques.

OPCIÓN 1: Creación de un certificado push .p12 que se pueda cargar directamente en el centro de notificaciones

  1. Desplácese hacia abajo hasta la opción activada Push Notifications (Notificaciones push) y, luego, seleccione Configure (Configurar) para crear el certificado.

    Edit App ID page

  2. Aparece la ventana Apple Push Notification service SSL Certificates (Certificados SSL de Apple Push Notification Service). Seleccione el botón Create Certificate (Crear certificado) en la sección Development SSL Certificate (Certificado SSL de desarrollo).

    Create certificate for App ID button

    Se muestra la pantalla Create a new Certificate (Crear un nuevo certificado).

    Nota

    En este tutorial se usa un certificado de desarrollo, que la aplicación usa para generar un token de dispositivo único. Se usa el mismo proceso cuando se registra un certificado de producción. Asegúrese de usa el mismo tipo de certificado cuando envíe notificaciones.

  3. Seleccione Choose File (Elegir archivo), vaya a la ubicación donde guardó el archivo CSR de la primera tarea y, después, haga doble clic en el nombre del certificado para cargarlo. Después, seleccione Continuar.

  4. 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.

    Generated certificate download page

    El certificado se descarga y se guarda en el equipo en la carpeta de descargas.

    Locate certificate file in the Downloads folder

    Nota:

    De manera predeterminada, el certificado de desarrollo descargado se denomina aps_development.cer.

  5. Haga doble clic en el certificado de inserción aps_development.cer descargado. Esta operación instala el certificado nuevo en la cadena de llaves, tal como se muestra en la siguiente imagen:

    Keychain access certificates list showing new certificate

    Nota:

    Aunque el nombre del certificado puede ser diferente, llevará el prefijo Apple Development iOS Push Services (Servicios push de desarrollo de Apple iOS).

  6. 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).

    Export certificate as p12 format

    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 APNs.

    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 pueda usar para autenticación basada en tokens

  1. Anote los siguientes datos:

    • App ID Prefix (Prefijo de identificador de aplicación) (es un identificador de equipo)
    • Identificador de lote
  2. 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. En tal caso, puede omitir los pasos 3 a 5.

  3. Haga clic en el botón + (o en el botón Crear una clave) para crear una nueva clave.

  4. Proporcione un valor de Key Name (Nombre de clave) adecuado, active la opción Apple Push Notifications service (APNs) y, a continuación, haga clic en Continue (Continuar), seguido de Register (Registrar) en la pantalla siguiente.

  5. Haga clic en Download (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 Done (Listo).

    Nota

    Asegúrese de mantener el archivo .p8 en un lugar seguro (y guardar una copia de seguridad). Después de descargar la clave, no se puede volver a descargar, ya que se quita la copia del servidor.

  6. En Keys (Claves), haga clic en la clave que acaba de crear (o en una clave existente si decide utilizarla en su lugar).

  7. Anote el valor de Key ID (Id. de clave).

  8. Abra el certificado .p8 en una aplicación adecuada, como Visual Studio Code y anote el valor de la 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 de token que se usará más adelante para configurar el centro de notificaciones.

Al completar estos pasos, debe tener la siguiente información para usarla más adelante en Configuración de un 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 de token, es decir, el valor de la clave del certificado .p8 (consulte el paso 8)

Creación de un perfil de aprovisionamiento para la aplicación

  1. 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).

  2. 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).

    Provisioning profile list

  3. Una vez hecho esto, seleccione el identificador de la aplicación que acaba de crear en la lista desplegable App ID (Id. de la aplicación) y, a continuación, seleccione Continuar.

    Select the App ID

  4. 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 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:

    1. Si ve No Certificates are available (No hay certificados disponibles), seleccione Create Certificate(Crear certificado).
    2. En la sección Software, seleccione Apple Development (Desarrollo de Apple). Después, seleccione Continuar.
    3. En la pantalla Create a new Certificate (Crear un nuevo certificado), seleccione Choose File (Elegir archivo).
    4. Vaya al certificado Certificate Signing Request (Solicitud de firma de certificado), selecciónelo y, luego, elija Open (Abrir).
    5. Seleccione Continuar.
    6. Descargue el certificado de desarrollo y recuerde la ubicación donde se ha guardado.
  5. 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).

  6. En la ventana Select certificates (Seleccionar certificados), seleccione el certificado de desarrollo que acaba de crear. Después, seleccione Continuar.

  7. Después, seleccione en los dispositivos que va a usar para la prueba y seleccione Continue (Continuar).

  8. Para terminar, elija un nombre para el perfil en Provisioning Profile Name (Nombre del perfil de aprovisionamiento) y seleccione Generate (Generar).

    Choose a provisioning profile name

  9. Cuando se cree el perfil de aprovisionamiento, seleccione Download (Descargar). Recuerde la ubicación donde se ha guardado.

  10. 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, va a crear un centro de notificaciones y configurar la autenticación con APNs mediante el certificado push .p12 o autenticación basada en tokens. Si desea usar un centro de notificaciones ya creado, puede omitir los pasos hasta el paso 5.

  1. Inicie sesión en Azure Portal.

  2. Seleccione Todos los servicios en el menú de la izquierda. A screenshot showing select All Services for an existing namespace.

  3. Escriba Notification Hubs en el cuadro de texto Filtrar servicios. Seleccione el icono de estrella junto al nombre del servicio para agregarlo a la sección FAVORITOS en el menú de la izquierda. Seleccione Notification Hubs.

    A screenshot showing how to filter for notification hubs.

  4. En la página Notification Hubs, seleccione Crear en la barra de herramientas.

    A screenshot showing how to create a new notification hub.

  5. En la pestaña Básico de la página Centro de notificaciones, siga estos pasos:

    1. En Suscripción, seleccione el nombre de la suscripción de Azure que desea usar y, a continuación, seleccione un grupo de recursos existente o cree uno nuevo.

    2. Escriba un nombre único para el nuevo espacio de nombres en Detalles del espacio de nombres.

    3. Un espacio de nombres contiene uno o varios centros de notificaciones, por lo que debe escribir un nombre para el centro en Detalles del centro de notificaciones.

    4. Seleccione un valor en el cuadro de lista desplegable Ubicación. Este valor especifica la ubicación en la que quiere crear el centro.

      Screenshot showing notification hub details.

    5. Revise la opción Availability Zones. Si elige una región que tiene zonas de disponibilidad, la casilla estará activada de forma predeterminada. Availability Zones es una característica de pago, por lo que se agrega un honorario adicional al nivel.

    6. Elija una opción de Recuperación ante desastres: Ninguna, Región de recuperación emparejada o Región de recuperación flexible. Si elige Región de recuperación emparejada, se mostrará la región de conmutación por error. Si selecciona Región de recuperación flexible, use la lista desplegable para elegir una lista de regiones de recuperación.

      Screenshot showing availability zone details.

    7. Seleccione Crear.

  6. Cuando la implementación se complete, seleccione Ir al grupo de recursos.

Configuración de un centro de notificaciones con información de APNs

En Notification Services (Servicios de notificación), seleccione Apple (APNS) y siga los pasos adecuados en función del enfoque elegido anteriormente en la sección Creación de un certificado para Notification Hubs.

Nota

Si compila la aplicación con App Store o un perfil de distribución ad-hoc, use la opción producción para el modo de aplicación. Esto permitirá que el dispositivo envíe notificaciones push a los usuarios que compraron la aplicación en la tienda.

OPCIÓN 1: Uso de un certificado push .p12

  1. Seleccione Certificado.

  2. Seleccione el icono del archivo.

  3. Seleccione el archivo .p12 que exportó antes y, luego, Open (Abrir).

  4. Si es necesario, especifique la contraseña correcta.

  5. Seleccione el modo Espacio aislado.

    Configure APNs certification in Azure portal

  6. Seleccione Guardar.

OPCIÓN 2: Uso de autenticación basada en tokens

  1. Seleccione Token.

  2. Escriba los siguientes valores adquiridos anteriormente:

    • Identificador de clave
    • Identificador de lote
    • Identificador de equipo
    • Token
  3. Seleccione Sandbox (Espacio aislado).

  4. Seleccione Guardar.

Ahora ya ha configurado el centro de notificaciones con APNs. Tiene también la cadena de conexión para registrar la aplicación y enviar notificaciones push.

Conexión de la aplicación al Centro de notificaciones

Creación de un nuevo proyecto

  1. En Visual Studio, cree un nuevo proyecto de iOS y seleccione la plantilla Aplicación de una vista. A continuación, haga clic en Siguiente.

    Visual Studio - Select Application Type

  2. Escriba el nombre de la aplicación y el identificador de la organización y, a continuación, haga clic en Siguiente y en Crear.

  3. En la vista Solución, haga doble clic en Into.plist y, en Identity (Identidad), asegúrese de que el identificador del conjunto coincida con el que usó al crear el perfil de aprovisionamiento. En Firma, asegúrese de que la cuenta de desarrollador esté seleccionada en Equipo, "Automatically manage signing" (Administrar automáticamente la firma) esté seleccionado, y las opciones Certificado de firma y Perfil de aprovisionamiento estén seleccionadas automáticamente.

    Visual Studio- iOS App Config

  4. En la vista Solución, haga doble clic en Entitlements.plist y asegúrese de que Habilitar notificaciones push esté activado.

    Visual Studio- iOS Entitlements Config

  5. Agregue el paquete de mensajería de Azure. En la vista Solución, haga clic con el botón derecho en el proyecto y seleccione Agregar>Agregar paquetes NuGet. Busque Xamarin.Azure.NotificationHubs.iOS y agregue el paquete al proyecto.

  6. Agregue un nuevo archivo a su clase, asígnele el nombre Constants.cs. A continuación, agregue las siguientes variables y reemplace los marcadores de posición de literal de cadena con los valores hubname y DefaultListenSharedAccessSignature que anotó anteriormente.

    // Azure app-specific connection string and hub path
    public const string ListenConnectionString = "<Azure DefaultListenSharedAccess Connection String>";
    public const string NotificationHubName = "<Azure Notification Hub Name>";
    
  7. En AppDelegate.cs, agregue la siguiente instrucción using:

    using WindowsAzure.Messaging.NotificationHubs;
    using UserNotifications
    
  8. Cree una implementación de MSNotificationHubDelegate en AppDelegate.cs:

    public class AzureNotificationHubListener : MSNotificationHubDelegate
    {
        public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
        {
    
        }
    }
    
  9. En AppDelegate.cs, actualice FinishedLaunching() para que coincida con el código siguiente:

    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        // Set the Message listener
        MSNotificationHub.SetDelegate(new AzureNotificationHubListener());
    
        // Start the SDK
        MSNotificationHub.Start(ListenConnectionString, NotificationHubName);
    
        return true;
    }
    
  10. En AppDelegate.cs, implemente el método DidReceivePushNotification para la clase AzureNotificationHubListener:

    public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
    {
        // This sample assumes { aps: { alert: { title: "Hello", body: "World" } } }
        var alertTitle = message.Title ?? "Notification";
        var alertBody = message.Body;
    
        var myAlert = UIAlertController.Create(alertTitle, alertBody, UIAlertControllerStyle.Alert);
        myAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
        UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(myAlert, true, null);
    }
    
  11. Ejecute la aplicación en el dispositivo.

Prueba de envío de las notificaciones push

Puede probar de recibir notificaciones en la aplicación con la opción Envío de prueba en Azure Portal. Envía una notificación push de prueba al dispositivo.

Azure portal - Test Send

Las notificaciones push se envían normalmente en un servicio back-end como Mobile Apps o ASP.NET mediante una biblioteca compatible. Si no hay disponible ninguna biblioteca para su back-end, también puede usar la API de REST directamente para enviar mensajes de notificación.

Pasos siguientes

En este tutorial ha difundido notificaciones de difusión a todos los dispositivos iOS registrados con el back-end. Para aprender a enviar notificaciones push a dispositivos iOS específicos, pase al siguiente tutorial: