En el caso de las apps cliente de iOS, puedes recibir cargas útiles de notificación y de datos de hasta 4 KB en la interfaz de APNS de Firebase Cloud Messaging.
Para escribir tu código de cliente en Objective-C o Swift, te recomendamos que uses la API de FIRMessaging. En el ejemplo de inicio rápido, se 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 captura de los datos de estadísticas durante el manejo de devoluciones de llamadas de los mensajes descendentes.
Los desarrolladores 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 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 12.2 o una versión más reciente
- CocoaPods 1.10.0 o una versión más reciente
Asegúrate de que tu proyecto cumpla con estos requisitos:
- Tu proyecto debe orientarse a iOS 10 o una versión más reciente.
Configura un dispositivo iOS 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 desarrollador de Apple.
- En Xcode, habilita las notificaciones push en App > Capabilities.
- Accede a Firebase con tu Cuenta de Google.
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 poder agregar Firebase a tu app para iOS, debes crear un proyecto de Firebase y conectarlo a la app. Visita Información sobre los proyectos de Firebase para obtener más detalles sobre este tema.
Registra tu app en Firebase
Cuando tengas un proyecto de Firebase, podrás agregarle tu app para iOS.
Consulta la Información sobre los proyectos de Firebase a fin de obtener detalles sobre prácticas recomendadas y consideraciones que debes tener para agregar apps a un proyecto de Firebase, entre ellas cómo manejar diversas variantes de compilación.
Dirígete a Firebase console.
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 la plataforma.
Ingresa el ID del paquete de la app en el campo ID del paquete de iOS.
Ingresa otra información, como el Sobrenombre de la app y el ID de App Store (opcional).
Haz clic en Registrar app.
Agrega un archivo de configuración de Firebase
Haz clic en Descargar GoogleService-Info.plist a fin de obtener el archivo de configuración de Firebase para iOS (
GoogleService-Info.plist
).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 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
Te recomendamos que uses CocoaPods para instalar las bibliotecas de Firebase. Sin embargo, si prefieres no usarlo, puedes integrar directamente los frameworks del SDK o usar la versión beta de Swift Package Manager.
¿Estás usando una de las muestras de inicio rápido? El proyecto de Xcode y el Podfile (con pods) ya están presentes en las muestras, pero deberás agregar tu archivo de configuración de Firebase y, luego, instalar los pods.
Crea un Podfile si aún no tienes uno:
cd your-project-directory
pod init
En tu Podfile, agrega los pods de Firebase que deseas usar en tu app.
Puedes agregar cualquiera de los productos de Firebase compatibles a tu app para iOS.
Para obtener una experiencia óptima con Firebase Cloud Messaging, recomendamos habilitar Google Analytics en el proyecto. Además, debes agregar el SDK de Firebase para Analytics a la app cuando configures Analytics.
Si Analytics está habilitado
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
# Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'Si Analytics está inhabilitado
# Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
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.
-
Dentro del proyecto en Firebase console, selecciona el ícono de ajustes, elige Configuración del proyecto y, luego, la pestaña Cloud Messaging.
-
En Clave de autenticación de APNS, en Configuración de app para iOS, haz clic en el botón Subir.
-
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 la sección Certificates, Identifiers & Profiles del Centro de miembros desarrolladores de Apple) 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:
- Importa el módulo de Firebase en
UIApplicationDelegate
:Swift
import Firebase
Objective-C
@import Firebase;
- Configura una instancia compartida de
FirebaseApp
, generalmente en el métodoapplication: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 aregisterForRemoteNotifications
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 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.
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 FIRMessaging
de APNSToken
:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 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.
Evita la inicialización automática
Cuando se genera un token de registro de FCM, la biblioteca sube el identificador y los datos de configuración a Firebase. Si deseas obtener una habilitación explícita de un subconjunto de usuarios, puedes evitar la generación de tokens en el momento de la configuración si inhabilitas FCM. Para ello, agrega un valor de metadatos a 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: