Compartir a través de


Tutorial: Creación de notificaciones de inserción en la aplicación iOS

Este tutorial le guía para crear notificaciones de inserción en la aplicación iOS mediante el SDK de chat de Azure Communication Services.

Las notificaciones de inserción alertan a los usuarios de los mensajes entrantes en una conversación de chat cuando la aplicación móvil no se ejecuta en primer plano. Azure Communication Services admite dos versiones de notificaciones de inserción:

  • Versión básica: aparece un número de distintivo en el icono de la aplicación, el dispositivo reproduce un sonido de notificación y aparece un banner de alerta emergente.

    Captura de pantalla de la versión básica de una notificación de inserción.

  • Versión avanzada: además de las características admitidas en la versión básica, puede personalizar el título y la vista previa del mensaje en el banner de alerta.

    Captura de pantalla de la versión avanzada de una notificación de inserción.

En este tutorial ha:

  • Configurar un certificado de Apple Push Notification Service (APN).
  • Configurar Xcode para notificaciones de inserción.
  • Implementar una versión básica o avanzada de las notificaciones de inserción.
  • Probar las notificaciones en la aplicación.
  • Configurar la renovación automática del registro para las notificaciones de inserción.

Descarga de código

Acceda al código de ejemplo de este tutorial en GitHub.

Requisitos previos

Cree un certificado de APNs .p12 y establézcalo en el centro de notificaciones

Si no es un cliente interno de Microsoft, siga todos los pasos descritos en el procedimiento siguiente.

Si es un cliente interno de Microsoft, envíe una incidencia y proporcione el identificador de lote de la aplicación para obtener un certificado .p12. Después, vaya al último paso del procedimiento siguiente.

  1. Inicie sesión en el Portal para desarrolladores de Apple.

  2. Vaya a Certificados, identificadores y perfiles>Identificadores>Identificadores de aplicación y, después, seleccione el identificador asociado a la aplicación.

    Captura de pantalla en la que se muestran las selecciones para elegir un id. de la aplicación.

  3. En la página del identificador de aplicación, seleccione Funcionalidades>Notificaciones de inserción y, después, seleccione Guardar.

    Captura de pantalla en la que se muestran las opciones para editar una configuración de identificador de aplicación.

  4. En el cuadro de diálogo Modificar funcionalidades de la aplicación que aparece, seleccione Confirmar.

    Captura de pantalla en la que se muestra el botón Confirmar para modificar las funcionalidades de la aplicación.

  5. En la página del identificador de aplicación, seleccione Funcionalidades>Notificaciones de inserción>Configurar y, después, realice la selección siguiente:

    • Para probar las notificaciones de inserción durante el desarrollo de una aplicación iOS, seleccione el botón Crear certificado en Certificado SSL de desarrollo.
    • Para enviar las notificaciones de inserción en producción, seleccione el botón Crear certificado en Certificado SSL de producción.

    Captura de pantalla en la que se muestran las opciones para crear un certificado de desarrollo o un certificado de producción.

  6. El área Crear un nuevo certificado aparece en la página Certificados, identificadores y perfiles.

    Captura de pantalla en la que se muestra la opción para cargar una solicitud de firma de certificado.

    En este área, cargará una solicitud de firma de certificado (CSR):

    1. En una pestaña nueva del explorador, siga esta página de ayuda de Apple para crear una CSR y guardar el archivo como Nombre de la aplicación.cer. Las instrucciones incluyen el uso del Asistente para certificados para solicitar un certificado y rellenar la información del certificado.

      Captura de pantalla en la que se muestran las selecciones para solicitar un certificado a una entidad de certificación.

      Captura de pantalla en la que se muestra un ejemplo de cómo rellenar la información del certificado.

    2. Arrastre el archivo .cer al área Elegir archivo. Después, seleccione Continuar en la esquina superior derecha.

      Captura de pantalla del área para elegir un archivo de certificado.

  7. Seleccione Descargar.

    Captura de pantalla del botón para descargar un certificado.

  8. Guarde el archivo localmente en formato .p12.

    Captura de pantalla en la que se muestra el área para guardar un archivo de certificado.

  9. Abra el archivo .cer que ha descargado. En Acceso a Llaveros, seleccione el certificado, haga clic con el botón derecho y exporte el certificado en formato .p12.

  10. Vaya al centro de notificaciones. En Configuración, seleccione Apple (APNS). Después, rellene los detalles del certificado:

    • En Modo de autenticación, seleccione Certificado.
    • Para Cargar certificado, cargue el archivo .p12 que acaba de crear.
    • En Modo de aplicación, seleccione el modo según lo que necesite.

    Cuando termine de escribir toda la información, seleccione Guardar.

    Captura de pantalla en la que se muestra la configuración de la aplicación y el certificado para un centro de notificaciones.

Configuración de Xcode

  1. En Xcode, vaya a Signing & Capabilities (Firma y funcionalidades).

  2. Para agregar una funcionalidad, seleccione + Capability (+ Funcionalidad) y, a continuación, seleccione Push Notifications (Notificaciones de inserción).

  3. Para agregar otra funcionalidad, seleccione + Capability (+ Funcionalidad) y, a continuación, seleccione Background Modes (Modos en segundo plano).

  4. En Modos en segundo plano, seleccione Notificaciones remotas.

    Captura de pantalla en la que se muestra la adición de notificaciones de inserción y modos en segundo plano en Xcode.

  5. En Destino de pod: AzureCore, establezca Requerir solo la API App-Extension-Safe como No.

Implementación de notificaciones de inserción

Versión básica

Si quiere implementar una versión básica de las notificaciones de inserción, debe registrarse para recibir notificaciones remotas con APNS. Consulte el código de ejemplo para ver la implementación relacionada en AppDelegate.swift.

Versión avanzada

Si quiere implementar una versión avanzada de las notificaciones de inserción, debe incluir los elementos siguientes en la aplicación. El motivo es que el cifrado del contenido del cliente (por ejemplo, el contenido del mensaje de chat y el nombre para mostrar del remitente) en las cargas de notificación de inserción necesita soluciones alternativas.

Almacenamiento de datos para claves de cifrado

Crear almacenamiento de datos persistente en dispositivos iOS. Este almacenamiento de datos debe ser capaz de compartir datos entre la aplicación principal y las extensiones de aplicación.

En el código de ejemplo de este tutorial, elija Grupos de aplicaciones como almacenamiento de datos mediante estas acciones:

  • Agregue la funcionalidad Grupos de aplicaciones a los destinos de la aplicación (aplicación principal y extensiones de aplicación) mediante los pasos del artículo de Apple Adición de funcionalidades a la aplicación.

  • Configure los grupos de aplicaciones mediante los pasos descritos en el artículo de Apple Configuración de grupos de aplicaciones. Asegúrese de que la aplicación principal y las extensiones de aplicación tienen el mismo nombre de contenedor.

Extensión de servicio de notificaciones

Implemente la extensión del servicio de notificaciones agrupada con la aplicación principal. Esta extensión de la aplicación se usa para descifrar la carga de notificación de inserción cuando el dispositivo la recibe.

  1. Vaya a Adición de una extensión de la aplicación de servicio al proyecto en la documentación de Apple y siga los pasos.

  2. Vaya a Implementación de los métodos de controlador de la extensión en la documentación de Apple. Apple proporciona el código predeterminado para descifrar datos y puede seguir la estructura general de este tutorial. Pero como va usar el SDK de Chat para el descifrado, debe reemplazar la parte que empieza por // Try to decode the encrypted message data por lógica personalizada. Consulte el código de ejemplo para ver la implementación relacionada en NotificationService.swift.

Implementación del protocolo PushNotificationKeyStorage

El protocolo PushNotificationKeyStorage es necesario para la versión avanzada de las notificaciones de inserción. Puede usar la clase AppGroupPushNotificationKeyStorage predeterminada que proporciona el SDK de Chat. Si no usa Grupos de aplicaciones como almacenamiento de claves, o bien si quiere personalizar los métodos de almacenamiento de claves, cree una clase propia que se ajuste al protocolo PushNotificationKeyStorage.

PushNotificationKeyStorage define dos métodos:

  • onPersistKey(encryptionKey:expiryTime): este método se usa para conservar la clave de cifrado en el almacenamiento del dispositivo iOS del usuario. El SDK de chat establece 45 minutos como el tiempo de expiración de la clave de cifrado. Si quiere que las notificaciones de inserción surtan efecto durante más de 45 minutos, tiene que programar la llamada a chatClient.startPushNotifications(deviceToken:) con mayor frecuencia (por ejemplo, cada 15 minutos) para que se pueda registrar una nueva clave de cifrado antes de que expire la clave anterior.

  • onRetrieveKeys() -> [String]: este método se usa para recuperar las claves válidas que se han almacenado antes. Tiene la flexibilidad de proporcionar la personalización en función del almacenamiento de datos que haya elegido antes.

En la extensión de protocolo, el SDK de Chat proporciona una implementación del método decryptPayload(notification:) -> PushNotificationEvent que puede usar. Consulte el código de ejemplo para ver la implementación relacionada en NotificationService.swift.

Prueba de las notificaciones

  1. Cree una conversación de chat con el usuario A y el usuario B.

  2. Descargue el repositorio de GitHub de aplicaciones de ejemplo.

  3. Coloque los valores de <ACESS_TOKEN> y <ACS_RESOURCE_ENDPOINT> del usuario A en AppSettings.plist.

  4. Establezca Habilitar bitcode en No para dos destinos de pod: AzureCommunicationChat y Trouter.

  5. Conecte el dispositivo iOS al equipo Mac y ejecute el programa. Cuando se le pida que autorice las notificaciones de inserción en el dispositivo, seleccione Permitir.

  6. Como Usuario B, envíe un mensaje de chat. Confirme que el usuario A recibe una notificación de inserción en el dispositivo iOS.

Implementación de la renovación del registro

Para que Microsoft proporcione un servicio de chat seguro, el registro de notificaciones de inserción en dispositivos iOS es válido durante solo 45 minutos. Para mantener la funcionalidad de las notificaciones push, debe implementar la renovación de registros en la aplicación cliente.

En este tutorial se proponen dos soluciones alineadas con las instrucciones oficiales de Apple. Se recomienda implementar ambas soluciones conjuntamente para aumentar su eficacia.

Nota:

Es posible que varios factores influyan en la eficacia de cualquiera de las soluciones. Por ejemplo, el estado de la batería del dispositivo, las condiciones de red y las restricciones específicas de iOS podrían afectar a la capacidad de la aplicación para ejecutar tareas en segundo plano. Para más información, vea el vídeo Avances en la ejecución en segundo plano de la aplicación y el artículo de Apple Inserción de actualizaciones en segundo plano de la aplicación.

Solución 1: Tareas en segundo plano

Las tareas en segundo plano ofrecen una manera de realizar actividades incluso cuando la aplicación no está en primer plano. Al implementar una tarea en segundo plano, la aplicación puede solicitar tiempo adicional para completar una tarea específica, como renovar el registro de notificaciones de inserción.

En las secciones siguientes se describe cómo puede usar tareas en segundo plano para la renovación del registro.

Configuración de la actualización automática de tokens de acceso de usuario

Para garantizar el acceso ininterrumpido a los servicios de chat, debe mantener tokens de acceso de usuario válidos. Los tokens suelen tener un período de validez predeterminado de 24 horas, después del cual expiran y necesitan ser renovados. La implementación de un mecanismo de actualización automática garantiza que el token sea válido cada vez que se activa la aplicación de chat.

El SDK de chat simplifica la administración de tokens mediante la automatización del proceso de actualización cuando se implementa un actualizador de tokens de acceso personalizado. Complete los pasos siguientes a fin de configurar la aplicación de chat para admitir la actualización automática de tokens:

  1. Para asegurarse de que la aplicación de chat mantiene un acceso de usuario continuo y seguro, debe implementar un nivel de servicio dedicado a emitir tokens. Una opción consiste en usar Azure Functions para este propósito.

    Para crear una función de Azure, vea el artículo Creación de un servicio de acceso de usuarios de confianza mediante Azure Functions. Describe cómo configurar la aplicación de funciones e implementar el código necesario para emitir tokens.

  2. Después de configurar la función de Azure:

    1. Obtenga la dirección URL del emisor de tokens desde Azure Portal. La aplicación de chat usa esta dirección URL para solicitar nuevos tokens.

    2. Cree e integre el actualizador de tokens en la aplicación de chat. Este componente solicita tokens nuevos e inicializa el cliente de chat para la renovación automática de tokens sin problemas.

      El código de ejemplo para el actualizador de tokens y su integración con el cliente de chat está disponible en el repositorio de GitHub de aplicaciones de ejemplo.

Habilitación y programación de tareas en segundo plano

Para activar y programar tareas en segundo plano en la aplicación de iOS, siga los pasos del artículo de Apple Uso de tareas en segundo plano para actualizar la aplicación.

Para obtener una implementación práctica, consulte el repositorio de GitHub de aplicaciones de ejemplo. En el ejemplo proporcionado se usa BGProcessingTask configurado para iniciarse en el plazo de un minuto, lo que muestra cómo capturar datos de forma eficaz en segundo plano.

Solución 2: Notificación remota

Una notificación remota es el mecanismo para que las aplicaciones iOS ejecuten tareas en segundo plano en respuesta a desencadenadores externos. Puede usar las notificaciones remotas para tareas como actualizar registros sin intervención del usuario.

Para usar las notificaciones remotas para ejecutar una tarea en segundo plano:

  1. Implemente un mecanismo de desencadenamiento.

    Por ejemplo, puede usar una aplicación de Azure Functions como mecanismo de desencadenamiento. Le permite ejecutar código en respuesta a varios desencadenadores, incluidas solicitudes HTTP, lo que hace que sea ideales para iniciar notificaciones de inserción silenciosas. Recuerde implementar el registro de dispositivos al final para que la aplicación de funciones sepa dónde entregar las notificaciones.

  2. Configurar un centro de notificaciones.

    El servicio Azure Notification Hubs proporciona una infraestructura de notificaciones de inserción escalable que permite enviar notificaciones a cualquier plataforma (iOS, Android, Windows, etc.) desde cualquier back-end (en la nube o local).

    Puede reutilizar el mismo centro de notificaciones que usa para las notificaciones push normales. Si quiere configurar uno nuevo, vea la documentación de Azure Notification Hubs.

  3. Configuración de la aplicación de Azure Functions para notificaciones normales.

    Ajuste la aplicación de funciones para enviar notificaciones remotas periódicamente mediante el centro de notificaciones. Estas notificaciones se reenvían a Apple Push Notification Service y se dirigen al dispositivo especificado. Para obtener más instrucciones, vea Enlace de salida de Notification Hubs para Azure Functions.

  4. Control de las notificaciones en la aplicación.

    En la aplicación iOS, implemente el método de instancia de aplicación para desencadenar una actualización automática del registro al recibir una notificación silenciosa.

Para más información, vea el artículo de Apple Configuración de un servidor de notificaciones remotas.