Ir a la consola

Configura una aplicación cliente de Firebase Cloud Messaging en iOS

Para apps cliente iOS, puedes implementar Firebase Cloud Messaging de dos formas complementarias:

  • recibir mensajes push básicos de hasta 4 KB en la interfaz de APNS de Firebase Cloud Messaging

  • enviar mensajes ascendentes o recibir cargas de datos descendentes de hasta 4 KB en apps ubicadas en primer plano

Para escribir tu código de cliente en Objective-C o Swift, te recomendamos que uses la API de FIRMessaging. El ejemplo de inicio rápido proporciona código de muestra para ambos lenguajes.

Referencias de método en Firebase Cloud Messaging

El SDK de FCM ejecuta la referencia de métodos en dos áreas clave: la asignación de tu token de APNS al token de registro de FCM y la captación de los datos de estadísticas durante el manejo de la devolución de llamada de los mensajes descendentes. Los programadores que prefieren no usar las referencias, pueden inhabilitarlas. Para ello, se debe agregar la marca FirebaseAppDelegateProxyEnabled en el archivo Info.plist de la app y configurarla en NO (valor booleano). Las áreas relevantes de las guías proporcionan ejemplos de código, con las referencias de métodos inhabilitadas y habilitadas.

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

Antes de comenzar, debes configurar algunos elementos en tu entorno:

  • Xcode 10.1 o una versión posterior
  • Un proyecto de Xcode para iOS 8 o una versión posterior
  • Los proyectos Swift (deben usar la versión 3.0 o una más reciente)
  • El identificador del paquete de la app
  • CocoaPods 1.4.0 o una versión más reciente
  • Para Cloud Messaging:
    • 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

Si aún no tienes un proyecto de Xcode, puedes descargar una de nuestras muestras de inicio rápido si solo quieres probar una función de Firebase. Si usas un inicio rápido, recuerda obtener el identificador de paquete en la configuración del proyecto, ya que lo necesitarás en el próximo paso.

Agrega Firebase a la app

Es momento de agregar Firebase a la app. Primero, necesitarás un proyecto y un archivo de configuración de Firebase para la app. Consulta el artículo Información sobre los proyectos de Firebase para obtener detalles sobre el tema.

Ahora que tienes un proyecto, puedes agregar la app para iOS:

  1. Haz clic en Agrega Firebase a tu app para iOS y sigue los pasos de configuración. Si importas un proyecto de Google existente, es posible que esto ocurra de forma automática y solo tengas que descargar el archivo de configuración.

  2. Ingresa el ID del paquete de la app cuando se te solicite. Es importante que ingreses el ID del paquete que usa la app. Esta configuración solo puede hacerse cuando agregas la app al proyecto de Firebase.

  3. Agrega el archivo de configuración de Firebase para iOS a la app, como se indica a continuación:

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

      Puedes volver a descargar el archivo de configuración de Firebase para iOS cuando quieras.

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

  4. Después de agregar el código de inicialización, ejecuta tu app para verificar con la consola que instalaste Firebase correctamente.

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.

Agrega el SDK

Si estás configurando un proyecto nuevo, debes instalar el SDK. Es posible que ya lo hayas hecho como parte de la creación de un proyecto de Firebase.

Te recomendamos que uses CocoaPods para instalar las bibliotecas. Para instalar el sistema, sigue las instrucciones. Si prefieres no usarlo, puedes integrar los marcos de trabajo del SDK directamente sin usar CocoaPods.

Si vas a descargar y ejecutar una de las muestras de inicio rápido, estas ya contienen el proyecto de Xcode y el Podfile, pero de todas formas deberás instalar los pods y descargar el archivo GoogleService-Info.plist. Si quieres integrar las bibliotecas de Firebase en uno de tus proyectos, debes agregar los pods para las bibliotecas que vayas a usar.

  1. Si aún no tienes un proyecto de Xcode, crea uno ahora.

  2. Crea un Podfile si aún no tienes uno:

    $ cd your-project directory
    $ pod init
    
  3. Agrega los pods que quieras instalar. Puedes incluir un pod en el Podfile, de la siguiente forma:

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

    Esto agregará las bibliotecas necesarias para comenzar a usar Firebase en la app de iOS junto con Google Analytics para Firebase. A continuación, podrás encontrar una lista de las subespecificaciones y los pods que están disponibles. Esto también se aborda en las guías de configuración específicas de cada característica.

  4. Instala los pods y abre el archivo .xcworkspace para ver el proyecto en Xcode.

    $ pod install
    $ open your-project.xcworkspace
    
  5. Descarga un archivo GoogleService-Info.plist de Firebase console y agrégalo a tu aplicación.

Sube tu clave de autenticación de APNS

Sube la clave de autenticación del APNS a Firebase. Si aún no tienes una clave de autenticación del APNS, consulta cómo configurar el 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 del APN, bajo Configuración de app para iOS, haz clic en el botón Subir.

  3. Busca la ubicación donde 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 aplicación:

    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

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.

Referencias inhabilitadas: asignación de tu token de APNS y de registro

Si inhabilitaste las referencias de métodos, deberás asignar explícitamente tu token de APNS al token de registro de FCM. Anula los métodos didRegisterForRemoteNotificationsWithDeviceToken para recuperar el token del APNS y, luego, configura la propiedad APNSToken de FIRMessaging:

Swift

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  Messaging.messaging().apnsToken = deviceToken
}

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

Después de que se genere el token de registro de FCM, puedes acceder al token y escuchar eventos actualizados usando los mismos métodos que con las referencias habilitadas.

Importa tokens de APNS de usuarios existentes

Si tienes una base de usuarios existentes que deseas incorporar a la app de cliente de FCM, usa la API batchImport que proporciona el ID de instancia. Con esta API, puedes importar en masa los tokens de APNS de iOS existentes a FCM y asignarlos a tokens de registros nuevos y válidos.

Evita la inicialización automática

FCM genera un ID de instancia, que se utiliza como token de registro dentro de FCM. Cuando se genera un ID de instancia, la biblioteca sube el identificador y los datos de configuración a Firebase.Si deseas obtener una habilitación explícita antes de usar un ID de instancia, puedes evitar que se genere en el momento de la configuración si inhabilitas FCM. Para hacerlo, agrega un valor de metadatos a tu Info.plist (no a GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

Para volver a habilitar FCM, realiza una llamada de tiempo de ejecución:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Este valor persiste en todos los reinicios de la aplicación una vez establecido.

Próximos pasos

Una vez que hayas configurado tu cliente iOS, puedes agregar el control de los mensajes y otro comportamiento más avanzado a tu app. Consulta estas guías para obtener más información: