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

Para comenzar a usar FCM, crea el caso de uso más sencillo: enviar un mensaje de notificación de prueba 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 de Apple para FCM.

Agrega Firebase a tu proyecto de Apple

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 específico de FCM, deberás subir tu clave de autenticación de APNs y registrarte para habilitar las notificaciones remotas.

Requisitos previos

  • Instala lo siguiente:

    • Xcode 15.2 o una versión posterior
  • Asegúrate de que tu proyecto cumpla con estos requisitos:

    • Se debe seleccionar como objetivo a estas versiones de las plataformas o a otras más recientes:
      • iOS 13
      • macOS 10.15
      • tvOS 13
      • watchOS 7
  • Configura un dispositivo Apple físico para ejecutar tu app y completa las siguientes tareas:

    • Obtén una clave de autenticación de notificaciones push de Apple para tu cuenta de Apple Developer.
    • En Xcode, habilita las notificaciones push en App > Capabilities.

Si solo quieres probar un producto de Firebase, pero aún no tienes un proyecto de Xcode, puedes descargar una de estas muestras de inicio rápido.

Crea un proyecto de Firebase

Antes de que puedas agregar Firebase a tu app para Apple, debes crear un proyecto de Firebase y conectarlo a ella. Visita Información sobre los proyectos de Firebase para obtener más detalles sobre este tema.

Registra tu app en Firebase

Si quieres usar Firebase en tu app para Apple, debes registrar la app en el proyecto de Firebase. El registro de tu app a menudo se conoce como “agregar” la app a tu proyecto.

  1. Ir a Firebase console.

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

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

  3. Ingresa el ID del paquete de la app en el campo ID del paquete.

  4. Ingresa otra información, como el Sobrenombre de la app y el ID de App Store (opcional).

  5. 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 plataformas de Apple (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 IDs de paquete en tu proyecto, debes asociar cada uno de ellos a una app registrada en Firebase console para que cada app tenga su propio archivo GoogleService-Info.plist.

Agrega los SDK de Firebase a tu app

Usa Swift Package Manager para instalar y administrar las dependencias de Firebase.

  1. En Xcode, con tu proyecto de app abierto, navega a File > Add Packages.
  2. Cuando se te solicite, agrega el repositorio del SDK de Firebase para plataformas de Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Elige la biblioteca de Firebase Cloud Messaging.
  5. Agrega la marca -ObjC a la sección Other Linker Flags de la configuración de compilación de tu destino.
  6. Para obtener una experiencia óptima con Firebase Cloud Messaging, te recomendamos habilitar Google Analytics en tu proyecto de Firebase y agregar el SDK de Firebase para Google Analytics a la app. Puedes seleccionar la biblioteca sin la colección de IDFA o con la colección de IDFA.
  7. Cuando termines, Xcode comenzará a resolver y descargar automáticamente tus dependencias en segundo plano.

Sube tu clave de autenticación de APNS

Sube la clave de autenticación de APNS a Firebase. Si aún no tienes una, asegúrate de crearla en el Centro para miembros de Apple Developer.

  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 iOS app configuration, 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 el centro para miembros de Apple Developer) y haz clic en Subir.

Inicializa Firebase en la 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 FirebaseCore en tu UIApplicationDelegate, así como cualquier otro módulo de Firebase que use el delegado de la app. Por ejemplo, para usar Cloud Firestore y Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Configura una instancia compartida de FirebaseApp en el método application(_:didFinishLaunchingWithOptions:) del delegado de la app:

    SwiftUI

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

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Si usas SwiftUI, debes crear un delegado de la aplicación y adjuntarlo al struct de tu App a través de UIApplicationDelegateAdaptor o NSApplicationDelegateAdaptor. También debes inhabilitar el swizzling del delegado de la app. Para obtener más información, consulta las instrucciones de SwiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

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 como se muestra a continuación:

Swift

UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Objective-C

[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[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 segmentadas a cualquier instancia específica de tu app.

De la misma manera que las plataformas de Apple suelen enviar un token de dispositivo APNS al inicio de la app, FCM proporciona un token de registro a través del método messaging:didReceiveRegistrationToken: de FIRMessagingDelegate. 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 delegate de FIRMessaging 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;

Recupera 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 token(completion:). Si este proceso falla de cualquier manera, se genera un error que no es nulo.

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];

Puedes usar este método 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: \(String(describing: 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. En los dispositivos Apple, 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. En Firebase console, abre la página Mensajería.

  4. Si este es tu primer mensaje, selecciona Crear la primera campaña.

    1. Selecciona Mensajes de Firebase Notifications y, luego, Crear.
  5. De lo contrario, en la pestaña Campañas, selecciona Campaña nueva y, luego, Notificaciones.

  6. Ingresa el texto del mensaje. Todos los demás campos son opcionales.

  7. Selecciona Enviar mensaje de prueba en el panel derecho.

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

  9. Selecciona Probar.

Después de seleccionar Probar, los dispositivos cliente de destino que tienen la app en segundo plano recibirán la notificación.

Para obtener información sobre la entrega de mensajes en tu app, consulta el panel de informes de FCM, en el que se registra la cantidad de mensajes que se enviaron y abrieron en dispositivos Apple y Android, junto con datos de "impresiones" (las notificaciones que ven los usuarios) de las apps para Android.

Próximos pasos

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