Firebase y Notificaciones Push en iOS

En este artículo utilizaremos Firebase para lanzar notificaciones en una aplicación iOS.

Brevemente los pasos que seguiremos son: generar un certificado desde el portal de desarrollo de Apple,  crear un proyecto de Firebase, configurar nuestra aplicación y configurar el servidor de Firebase para lanzar nuestra primera notificación.

Generación del certificado.

Creación del certificado push desde cero.

Lo primero que debemos hacer es crear un archivo CSR. Para ello entramos en nuestra cuenta de desarrollo de Apple.

Apple Developer Menu

Entramos en Certificates, IDs & Profiles. Una vez dentro, en Identifiers seleccionamos App IDs.

Creamos un nuevo App ID usando el botón +.

new App ID

En el description name pondremos el nombre de nuestra app:

Register App ID

Y en el campo App ID Suffix  se debe incluir el Bundle ID de nuestra aplicación (por ejemplo com.solidgeargroup.FirebaseDemoApp)

Recordemos que nos interesa activar las notificaciones push así que tenemos que habilitar el servicio seleccionando Push Notifications.

Si ya teníamos un App ID para nuestra aplicación deberíamos editarlo para activar las notificaciones push. Le seleccionaremos de la lista de App IDs y pulsaremos el botón que aparece en la parte de abajo “Edit”.


Una vez seleccionado pulsamos el botón “Done”

Una vez tengamos nuestro App ID crearemos el certificado SSL, para ello le seleccionamos y pulsamos el anteriormente mencionado botón “Editar”. Ahora en el apartado que ya tenemos habilitado creamos el certificado.

Push notifications certificate
Al pulsar en Create Certificate veremos que es necesario un Certificate Signing Request (fichero CSR). Para ello Apple nos indica cómo debemos hacerlo en la página que aparece:

Creating CSR

Generación de CSR

Siguiendo las instrucciones:

keychain CSR

Incluimos el mail y elegimos la opción “Saved to disk”.

Certificate Assistant
Ahora subiremos el fichero CSR. Volvemos al Apple Developer center donde nos habíamos quedado y pulsamos “Continue”

En la nueva pantalla subiremos nuestro fichero CSR.

Subimos nuestro fichero usando el botón “Choose File…” y ya tenemos el certificado listo para descargar.

Creación del certificado APN

Crearemos ahora el certificado para las push notifications, APN (Apple Push Notifications). Abrimos el certificado que nos descargamos en el paso anterior usando Keychain Access.

My certificatesElegimos nuestro certificado y lo exportamos usando el menú que se despliega al usar el botón derecho.

Export Apple Development iOS

Lo almacenamos como un fichero con extensión .p12  al que debemos introducir una contraseña.

password
Ya está, tenemos nuestro certificado para usar en Firebase.

Configuración de Firebase.

Creación del proyecto en Firebase y configuración necesaria en nuestra aplicación.

Entramos en https://firebase.google.com/ vamos a la consola en el botón de arriba a la derecha

go to console
y añadimos un nuevo proyecto:

add project

add project

Dentro de nuestro nuevo proyecto pulsamos “Configuración del proyecto”

project configuration

Vemos como Firebase nos informa de que no tenemos ninguna aplicación aún en el proyecto. Pulsamos en el botón iOS

Aparecerá:

Add iOS app to Firebase

En el primer campo deberíamos incluir el identificador de nuestra aplicación (Bundle ID) y pulsamos el botón “Registrar aplicación”. Ahora seguimos las instrucciones. Descargaremos el fichero .plist, que será necesario para nuestro proyecto en Xcode.

download plist

Debemos incluir este fichero en nuestro proyecto Xcode tal como se indica en la imagen superior. Ahora seguimos las instrucciones para añadir la librería de Firebase a nuestro proyecto. Ya que nos encontramos en este punto vamos a añadir “Firebase/Messaging” además de “Firebase/Core”. Para ello en el Podfile añadiremos la línea:

pod 'Firebase/Messaging'

En el siguiente paso añadiremos el siguiente código a la clase AppDelegate de nuestra aplicación. Debemos importar Firebase en esta clase y añadir la línea que se indica el método application.

adding firebase code

Ahora ejecutamos la aplicación para que Firebase compruebe que se está comunicando con sus servidores. Es posible que el procedimiento de error, por lo tanto se puede saltar dándole “Saltar este paso”

Volvemos configuración y navegamos a mensajería en la nube:

clow messaging

Para subir el certificado APNs, pulsamos “Subir” en la sección Certificados APNs que corresponda, en nuestro caso en el primero, que es el de desarrollo. Para enviar la aplicación al App Store el certificado que deberíamos subir es el de producción.

app certificate

y subimos el certificado:

upload certificate

Ya hemos añadido el certificado, ahora en nuestra aplicación activamos las notificaciones push.

enable capabilities

Añadimos el código para las notificaciones push. En la clase AppDelegate.swift incluiremos además del anterior import de Firebase los siguientes:

import UserNotifications
import FirebaseInstanceID
import FirebaseMessaging

Y añadimos los siguientes protocolos:

UNUserNotificationCenterDelegate, MessagingDelegate

Incluimos el siguiente método, requerido por el protocolo FIRMessagingDelegate:

  func applicationReceivedRemoteMessage(_ remoteMessage: MessagingRemoteMessage) {
    print(remoteMessage.appData)
}

Tras este método añadimos el siguiente, que nos servirá para obtener el identificador que usaremos para mandar nuestra notificación:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  InstanceID.instanceID().instanceID { (result, error) in
    if let error = error {
      print("Error: \(error)")
    } else if let result = result {
      print("Instance ID token: \(result.token)")
    }
  }
}

La última modificación que debemos hacer es en el método :application(_:didFinishLaunchingWithOptions:):

if #available(iOS 10.0, *) {
    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: {_, _ in })
    // For iOS 10 data message (sent via FCM)
    Messaging.messaging().delegate = self
} else {
    let settings: UIUserNotificationSettings =
    UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
      application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
FirebaseApp.configure()

Al lanzar la aplicación nos pedirá permiso para habilitar las  notificaciones. Una vez lo permitamos podremos hacer la primera prueba.

Lanzando nuestra primera notificación.

Configuración del servidor de Firebase para lanzar nuestra primera notificación.

En Firebase y seleccionamos nuestro proyecto. En la parte de abajo pulsamos en “Cloud Messaging”:

una vez en esta pantalla pulsamos en “Send your first message”:

cloud messaging

En la siguiente pantalla introducimos el texto que queremos que aparezca en la notificación:

notification 1

Y enviamos un mensaje de prueba:


Nos aparecerá un mensaje que nos indica que debemos agregar un token de registro FCM. El token aparecerá en la consola mientras ejecutemos la aplicación,  debido al segundo método en la clase AppDelegate. Incluimos nuestro token Instance ID token: e85TayizrJM:ADA91bEg3i30… en el campo de texto “Añade un token de registro FCM”

pulsamos el botón de añadir:

add button
y “Testar”:

test button

¡Listo! La notificación debería aparecer en nuestro dispositivo. Otra opción existente para el envío de notificaciones push a través de Firebase en iOS es usar APN Auth key en vez del certificado APN. Pero esto es algo que trataremos en otro artículo.

Deja un comentario

Responsable » Solidgear.
Finalidad » Gestionar los comentarios.
Legitimación » Tu consentimiento.
Destinatarios » Los datos que me facilitas estarán ubicados en los servidores SolidgearGroup dentro de la UE.
Derechos » Podrás ejercer tus derechos, entre otros, a acceder, rectificar, limitar y suprimir tus datos.

¿Necesitas una estimación?

Calcula ahora