Ir a la consola

Envía un mensaje de prueba a una app para iOS en segundo plano

Para comenzar a usar FCM, compila el caso práctico más sencillo: enviar un mensaje de notificación desde el Compositor de Notifications a un dispositivo de desarrollo cuando la app se encuentra en segundo plano. En esta página se indican todos los pasos necesarios para lograrlo, desde la configuración hasta la verificación. Es posible que ya hayas realizado algunos de los pasos si configuraste una app cliente en iOS para FCM.

Agrega Firebase a tu proyecto de iOS

Es posible que hayas completado tareas que aparecen en esta sección si ya habilitaste otras funciones de Firebase para tu app. En el caso de FCM, deberás subir tu clave de autenticación de APNS y registrarte para habilitar las notificaciones remotas.

Requisitos previos

  • Instala Xcode 10.1 o una versión más reciente.

  • Instala CocoaPods 1.4.0 o una versión más reciente.

  • Abre tu proyecto en Xcode.

    • Tu proyecto debe orientarse a iOS 8 o una versión más reciente.

    • Los proyectos Swift deben usar la versión 3.0 o una más reciente.

  • Configura un dispositivo iOS físico o un simulador para ejecutar la app.

    • Para Cloud Messaging, necesitarás los siguientes elementos:

      • Un dispositivo iOS físico
      • Una clave de autenticación de notificaciones push de Apple para tu cuenta de desarrollador de Apple
      • En Xcode, habilita las notificaciones push en App > Capabilities
    • En todos los demás productos de Firebase, puedes usar un dispositivo iOS físico o un simulador.

  • Accede a Firebase con tu Cuenta de Google.

Si aún no tienes un proyecto de Xcode, puedes descargar uno de nuestros ejemplos de inicio rápido si solo quieres probar un producto de Firebase.

Crea un proyecto de Firebase

A fin de poder agregar Firebase a tu app para iOS, debes crear un proyecto de Firebase y conectarlo a la app. Consulta Información sobre los proyectos de Firebase para obtener detalles acerca del tema.

Registra tu app en Firebase

Cuando tengas un proyecto de Firebase, podrás agregarle tu app para iOS.

Visita Información sobre los proyectos de Firebase a fin de obtener detalles sobre las recomendaciones y consideraciones para agregar apps a un proyecto de Firebase, incluido cómo manejar diversas variantes de compilación.

  1. En el centro de la página de descripción general del proyecto en Firebase console, haz clic en el ícono de iOS para iniciar el flujo de trabajo de la configuración.

    Si ya agregaste una app a tu proyecto de Firebase, haz clic en Agregar app para que se muestren las opciones de la plataforma.

  2. Ingresa el ID del paquete de la app en el campo ID del paquete de iOS.

    • Abre tu app en Xcode para encontrar el ID del paquete. Luego, accede a la pestaña General en el directorio Runner de nivel superior. El valor del campo Identificador de paquete es el ID del paquete de iOS (por ejemplo, com.yourcompany.yourproject).
  3. Ingresa otra información de la app si el flujo de trabajo de configuración lo solicita (opcional).

  4. Haz clic en Registrar app.

Agrega un archivo de configuración de Firebase

  1. Haz clic en Descargar GoogleService-Info.plist a fin de obtener el archivo de configuración de Firebase para iOS (GoogleService-Info.plist).

  2. Traslada el archivo de configuración al directorio raíz de tu proyecto de Xcode. Si se te solicita, selecciona la opción para agregar el archivo de configuración a todos los destinos.

Si tienes varios ID de paquete en tu proyecto, debes asociar cada uno con una app registrada en Firebase console a fin de que cada app tenga su propio archivo GoogleService-Info.plist.

Agrega los SDK de Firebase a tu app

Te recomendamos que uses CocoaPods para instalar las bibliotecas de Firebase. Si prefieres no usarlo, puedes integrar los marcos de trabajo del SDK directamente.

Ten en cuenta que, si usas una de las muestras de inicio rápido, estas ya contienen el proyecto de Xcode y el Podfile (con pods), pero, de todas formas, debes agregar tu archivo de configuración de Firebase y, luego, instalar los pods.

Puedes agregar cualquiera de los productos de Firebase admitidos a tu app para iOS.

  1. Crea un Podfile si aún no tienes uno. Para ello, ejecuta los siguientes comandos:

    cd your-project-directory
    pod init
  2. En tu Podfile, agrega los pods que deseas usar en tu app.

    pod 'Firebase/Core'
    pod 'Firebase/Messaging'

    Esto agregará las bibliotecas que son necesarias para comenzar a usar Firebase en tu app de iOS.

  3. Instala los pods y abre el archivo .xcworkspace para ver el proyecto en Xcode. Puedes hacerlo con los siguientes comandos:

    pod install
    open your-project.xcworkspace

Sube tu clave de autenticación de APNS

Sube la clave de autenticación del APNS a Firebase. Si aún no tienes una, consulta Configura APNS con FCM.

  1. Dentro del proyecto en Firebase console, selecciona el ícono de ajustes, elige Configuración del proyecto y, luego, la pestaña Cloud Messaging.

  2. En Clave de autenticación de APNS, en Configuración de app para iOS, haz clic en el botón Subir.

  3. Busca la ubicación en la que guardaste la clave, selecciónala y haz clic en Abrir. Agrega el ID de clave correspondiente (disponible en Certificados, identificadores y perfiles en el Centro de miembros desarrolladores de Apple) y haz clic en Subir.

Inicializa Firebase en tu app

Debes agregar el código de inicialización de Firebase a tu aplicación. Importa el módulo de Firebase y configura una instancia compartida de la siguiente manera:

  1. Importa el módulo de Firebase en tu UIApplicationDelegate:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. Configura una instancia compartida de FirebaseApp, generalmente en el método application:didFinishLaunchingWithOptions: de tu app:

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

Regístrate para habilitar las notificaciones remotas

Durante el inicio o en el punto que desees del flujo de tu aplicación, registra tu app para habilitar las notificaciones remotas. Llama a registerForRemoteNotifications de la siguiente manera:

Swift

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 })
} else {
  let settings: UIUserNotificationSettings =
  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Objective-C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

Accede al token de registro

Para enviar mensajes a un dispositivo específico, es necesario conocer el token de registro del dispositivo. Dado que debes ingresar el token en el compositor de Notifications para completar este instructivo, asegúrate de copiar el token o almacenarlo de forma segura cuando lo recuperes.

De forma predeterminada, el SDK de FCM genera un token de registro para la instancia de app del cliente en el inicio de tu app. Al igual que el token de dispositivo de APNS, este token te permite enviar notificaciones orientadas a cualquier instancia específica de tu app.

De la misma manera que iOS suele enviar un token de dispositivo APNS en el inicio de la app, FCM proporciona un token de registro a través del método FIRMessagingDelegate de messaging:didReceiveRegistrationToken:. El SDK de FCM recupera un token nuevo o uno existente durante el lanzamiento inicial de la app y cada vez que el token se actualiza o se invalida. En todos los casos, el SDK de FCM llama a messaging:didReceiveRegistrationToken: con un token válido.

El token de registro puede cambiar en las siguientes situaciones:

  • La app se restablece en un dispositivo nuevo.
  • El usuario desinstala y vuelve a instalar la app.
  • El usuario borra los datos de la app.

Configura el delegado de mensajería

Para recibir tokens de registro, implementa el protocolo de delegado de mensajería y configura la propiedad FIRMessaging de delegate después de llamar a [FIRApp configure]. Por ejemplo, si el delegado de tu aplicación sigue el protocolo de delegado de mensajería, puedes configurarlo en el mismo método application:didFinishLaunchingWithOptions:.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Cómo recuperar el token de registro actual

Los tokens de registro se envían a través del método messaging:didReceiveRegistrationToken:. Por lo general, se llama a este método una sola vez cuando se inicia la app con un token de registro. Cuando se lo llama, es el momento ideal para lo siguiente:

  • Enviarlo al servidor de tu aplicación (si el token de registro es nuevo)
  • Suscribir el token de registro a temas (esto solo es necesario para las suscripciones nuevas o para los casos en que el usuario volvió a instalar la app)

Para recuperar este token directamente, usa instanceIDWithHandler:. Esta devolución de llamada proporciona un InstanceIDResult, que contiene el token. Si la recuperación de InstanceID falla de cualquier manera, se genera un error que no es nulo.

Swift

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

Por lo general, el token está disponible de manera local, por lo que este método no abre una conexión de red. Puedes usarlo en cualquier momento para acceder al token en lugar de almacenarlo.

Supervisa la actualización de tokens

Para recibir notificaciones cada vez que el token se actualice, proporciona un delegado conforme al protocolo de delegado de mensajería. El siguiente ejemplo registra el delegado y agrega el método de delegado apropiado:

Swift

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(fcmToken)")

  let dataDict:[String: String] = ["token": fcmToken]
  NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

Objective-C

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
    [[NSNotificationCenter defaultCenter] postNotificationName:
     @"FCMToken" object:nil userInfo:dataDict];
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

De manera alternativa, puedes escuchar para detectar una NSNotification llamada kFIRMessagingRegistrationTokenRefreshNotification en lugar de proporcionar un método de delegado. La propiedad del token siempre tiene el valor actual del token.

Envía un mensaje de notificación

  1. Instala y ejecuta la app en el dispositivo de destino. Tendrás que aceptar la solicitud de permiso para recibir notificaciones remotas.

  2. Asegúrate de que la app se encuentre en segundo plano en el dispositivo.

  3. Abre el Compositor de Notifications y selecciona Mensaje nuevo.

  4. Ingresa el texto del mensaje.

  5. Selecciona Probar en el dispositivo.

  6. En el campo Agregar un token de registro de FCM, ingresa el token de registro que obtuviste en una sección anterior de esta guía.

  7. Haz clic en Probar.

Después de hacer clic en Enviar mensaje, los dispositivos cliente de destino que tienen la app en segundo plano recibirán la notificación en el centro de notificaciones.

Para obtener estadísticas de la entrega de mensajes a tu app, consulta el panel de mensajes de FCM que registra la cantidad de mensajes enviados y abiertos en dispositivos iOS y Android, junto con datos de “impresiones” (notificaciones vistas por los usuarios) para apps de Android.

Pasos siguientes

Para dejar atrás las notificaciones y agregar otros comportamientos más avanzados a la app, consulta: