Las notificaciones push son los mensajes que se envían, a una aplicación instalada en un dispositivo, desde un servidor. En el caso de las aplicaciones para iOS, se usa el Servicio de Notificaciones Push de Apple (APN). Hasta ahora, la única forma de probar estas notificaciones era en dispositivos físicos. Sin embargo, esto ha cambiado con la versión beta de Xcode 11.4, con la cual ya podemos probar las notificaciones push en el simulador.

Habilitar las notificaciones en el simulador

En primer lugar, antes de probar las notificaciones push en el simulador, tenemos que pedir permiso al usuario para mostrar las notificaciones. Esto lo podemos hacer incluyendo el siguiente código, por ejemplo, en la clase AppDelegate:

Los valores que pasamos en el parámetro options es una lista con las opciones de autorización para el usuario:

  • badge. Permite actualizar el ‘badge’ de la aplicación.
  • sound. Permite ejecutar sonidos.
  • alert. Permite mostrar alertas.
  • carPlay. Permite mostrar notificaciones en un entorno CarPlay.
  • criticalAlert. Permite ejecutar sonido para alertas críticas. Este valor ignora la opción de ‘No molestar’ del dispositivo, y requiere un permiso especial de Apple para ser utilizado.
  • providesAppNotificationSettings. Permite mostrar un botón en las notificaciones.
  • provisional. Si solo se utiliza esta opción, no requerirá la autorización el usuario, pero se mostrará de forma silenciosa en el Centro de Notificaciones.
  • announcement. Perite a Siri leer los mensajes automáticamente y transmitirlos a los AirPods.
Imagen de una notificación push en el simulador. Nos permitirá probar notificaciones push en el simulador.

En el caso de que el usuario haya dado permiso (granted == true), entonces utilizamos UIApplication.shared.registerForRemoteNotifications() para realizar el registro en el servicio de notificaciones push de Apple. Esta llamada debe hacerse desde el hilo pricipal, para evitar recibir una advertencia de tiempo de ejecución.

También podemos hacer una función que nos permita saber que permisos a dado el usuario por, si una vez dado algún permiso, luego lo ha retirado desde la opción de Ajustes:

Impresión en la consola de los ajustes de notificaciones.
Impresión de los ajustes de las notificaciones.

Esta función nos permitirá saber que permisos a dado o no el usuario y, por tanto, que funciones de la aplicación se podrán habilitar o no en función de dichos permisos. De esta forma solo pediremos permiso al usuario si antes no lo hemos hecho.
Para saber cuál es exactamente el estado del permiso, completamos la función anterior de la siguiente forma:

Si juntamos todo lo visto hasta ahora, obtenemos el siguiente código en AppDelegate.swift:

Envío de notificaciones push al simulador

Una vez tenemos configurados en nuestra aplicación los permisos para recibir notificaciones push, vamos a probar en el simulador el envío de estas notificaciones.
Si nos fijamos en lo que ha publicado Apple para la Beta 2 de XCode 11.4, podemos encontrar:

Simulator supports simulating remote push notifications, including background content fetch notifications. In Simulator, drag and drop an APNs file onto the target simulator. The file must be a JSON file with a valid Apple Push Notification Service payload, including the “aps” key. It must also contain a top-level “Simulator Target Bundle” with a string value that matches the target application‘s bundle identifier.simctl also supports sending simulated push notifications. If the file contains “Simulator Target Bundle” the bundle identifier is not required, otherwise you must provide it as an argument (8164566):

Es decir, podemos simular la notificación de dos maneras diferentes:

  • Crear un fichero APNs y arrastralo direcamente sobre el simulador.
  • Utilizar la terminal para ejecutar el comando mostrado.

Arrastre del fichero APNs

En primer lugar hemos de crear un fichero APNs, tal como muestra Apple en su documentación:

Este fichero se ha modificado con el parámetro Simulator Target Bundle, con el que indicamos al simulador el identificador de nuestra aplicación. Este valor es el que hemos definido al confiurar la aplicación:

Localización en Xcode del Bundle Identifier. Lo necesitamos para probar notificaciones push en el simulador.
Como localizar el identificador de la aplicación.

Ahora podemos probar las notificaciones push simplemente arrastrando el fichero sobre el simulador:

Prueba de notificaciones push por arrastre del fichero apns sobre el simulador.

Envío de notificaciones por línea de comandos

La segunda forma que indica Apple para probar las notificaciones push es a través de la línea de comandos:

Para ello necesitamos dos parámetros:

  • El identificador de la aplicación, que ya hemos obtenido en el caso anterior.
  • El identificador del dispositivo <device> en el simulador. Para ello hemos de ir al menú Window > Devices and Simulators.
Localización en Xcode del menú Devices and Simulators. Lo necesitamos para probar notificaciones push en el simulador.

Después, en la pantalla que aparece seleccionamos la pestaña Simulators y el simulador que estamos utilizando. El parámetro que necesitamos es el que viene indicado como Identifier.

Localización en Xcode del identificador de un simulador. Lo necesitamos para probar notificaciones push en el simulador.

]En el caso que estamos viendo el comando será:

Prueba de notificaciones push a través de la línea de comandos.

Conclusión

Gracias a esta nueva funcionalidad que podemos ver en la versión beta de Xcode 11.4, ya podemos probar las notificaciones push, y el comportamiento de nuestras aplicaciones al recibirlas, desde el propio simulador, sin necesidad de un dispositivo físico.

Categorías: Sin categoría

1 comentario

Construye una aplicación de mapas y rutas con MapKit - Thinking In Swift · 4 mayo 2020 a las 07:04

[…] Hay que tener en cuenta que para poder usar las funciones de localización, antes hemos de pedir permiso al usuario. Para ello, añadimos en el fichero Info.plist, una serie de parámetros (tal como mostré también para utilizar notificaciones): […]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Sígueme en Feedly