Configurar una aplicación cliente de Firebase Cloud Messaging en plataformas Apple

Para las aplicaciones cliente de Apple, puede recibir notificaciones y cargas de datos de hasta 4000 bytes a través de la interfaz APN de Firebase Cloud Messaging.

Para escribir su código de cliente en Objective-C o Swift, le recomendamos que utilice la API FIRMessaging . El ejemplo de inicio rápido proporciona código de muestra para ambos idiomas.

Método que cambia en Firebase Cloud Messaging

El SDK de FCM realiza cambios de métodos en dos áreas clave: asignar su token de APN al token de registro de FCM y capturar datos analíticos durante el manejo de devolución de llamadas de mensajes posteriores . Los desarrolladores que prefieran no utilizar swizzling pueden desactivarlo agregando el indicador FirebaseAppDelegateProxyEnabled en el archivo Info.plist de la aplicación y configurándolo en NO (valor booleano). Las áreas relevantes de las guías proporcionan ejemplos de código, con y sin método swizzling habilitado.

Agrega Firebase a tu proyecto de Apple

Si aún no lo has hecho, agrega Firebase a tu proyecto de Apple .

Cargue su clave de autenticación de APN

Cargue su clave de autenticación de APN en Firebase. Si aún no tiene una clave de autenticación de APN, asegúrese de crear una en el Centro de miembros desarrolladores de Apple .

  1. Dentro de su proyecto en Firebase console, seleccione el ícono de ajustes, seleccione Configuración del proyecto y luego seleccione la pestaña Mensajería en la nube .

  2. En la clave de autenticación de APN en la configuración de la aplicación iOS , haga clic en el botón Cargar .

  3. Busque la ubicación donde guardó su clave, selecciónela y haga clic en Abrir . Agregue el ID de la clave (disponible en el Centro de miembros desarrolladores de Apple ) y haga clic en Cargar .

Regístrese para recibir notificaciones remotas

Ya sea al inicio o en el punto deseado del flujo de su aplicación, registre su aplicación para recibir notificaciones remotas. Llame registerForRemoteNotifications como se muestra:

Rápido


UNUserNotificationCenter.current().delegate = self

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

application.registerForRemoteNotifications()

C objetivo


[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

De forma predeterminada, el SDK de FCM genera un token de registro para la instancia de la aplicación cliente al iniciar la aplicación. Similar al token de dispositivo APN, este token le permite enviar notificaciones específicas a cualquier instancia particular de su aplicación.

De la misma manera que las plataformas Apple normalmente entregan un token de dispositivo APN al iniciar la aplicación, 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 existente durante el inicio inicial de la aplicación y cada vez que el token se actualiza o invalida. En todos los casos, el SDK de FCM llama messaging:didReceiveRegistrationToken: con un token válido.

El token de registro podrá cambiar cuando:

  • La aplicación se restaura en un nuevo dispositivo.
  • El usuario desinstala/reinstala la aplicación.
  • El usuario borra los datos de la aplicación.

Configurar el delegado de mensajería

Para recibir tokens de registro, implemente el protocolo de delegado de mensajería y establezca la propiedad delegate de FIRMessaging después de llamar a [FIRApp configure] . Por ejemplo, si el delegado de su aplicación cumple con el protocolo del delegado de mensajería, puede configurar el delegado en application:didFinishLaunchingWithOptions: a sí mismo.

Rápido

Messaging.messaging().delegate = self

C objetivo

[FIRMessaging messaging].delegate = self;

Obteniendo el token de registro actual

Los tokens de registro se entregan mediante el método messaging:didReceiveRegistrationToken: Este método se llama generalmente una vez por inicio de aplicación con el token de registro. Cuando se llama a este método, es el momento ideal para:

  • Si el token de registro es nuevo, envíelo a su servidor de aplicaciones.
  • Suscribe el token de registro a los temas. Esto solo es necesario para suscripciones nuevas o para situaciones en las que el usuario ha reinstalado la aplicación.

Puede recuperar el token directamente usando token(completion:) . Se proporciona un error no nulo si la recuperación del token falló de alguna manera.

Rápido

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)"
  }
}

C objetivo

[[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;
  }
}];

Puede utilizar este método en cualquier momento para acceder al token en lugar de almacenarlo.

Supervisar la actualización del token

Para recibir una notificación cada vez que se actualice el token, proporcione un delegado que cumpla con el protocolo de delegado de mensajería. El siguiente ejemplo registra al delegado y agrega el método de delegado adecuado:

Rápido

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

C objetivo

- (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.
}

Alternativamente, puede escuchar una NSNotification denominada kFIRMessagingRegistrationTokenRefreshNotification en lugar de proporcionar un método delegado. La propiedad del token siempre tiene el valor del token actual.

Swizzling deshabilitado: mapeo de su token APN y token de registro

Si ha deshabilitado el método swizzling o está creando una aplicación SwiftUI, deberá asignar explícitamente su token APN al token de registro de FCM. Implemente el application(_:didRegisterForRemoteNotificationsWithDeviceToken:) para recuperar el token de APN y luego configure la propiedad apnsToken de Messaging :

Rápido

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

C objetivo

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

Una vez generado el token de registro de FCM, puede acceder a él y escuchar eventos de actualización utilizando los mismos métodos que con swizzling habilitado.

Prevenir la inicialización automática

Cuando se genera un token de registro de FCM, la biblioteca carga el identificador y los datos de configuración en Firebase. Si primero desea obtener una suscripción explícita de los usuarios, puede evitar la generación de tokens en el momento de la configuración desactivando FCM. Para hacer esto, agregue un valor de metadatos a su Info.plist (no a su GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

Para volver a habilitar FCM, puede realizar una llamada en tiempo de ejecución:

Rápido

Messaging.messaging().autoInitEnabled = true

C objetivo

[FIRMessaging messaging].autoInitEnabled = YES;

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

Próximos pasos

Una vez que haya configurado su cliente Apple, estará listo para agregar manejo de mensajes y otros comportamientos más avanzados a su aplicación. Consulte estas guías para obtener más información: