Per le app client Apple, puoi ricevere notifiche e payload di dati fino a 4000 byte tramite l'interfaccia APN di Firebase Cloud Messaging.
Per scrivere il codice client in Objective-C o Swift, ti consigliamo di utilizzare l' API FIRMessaging . L' esempio di avvio rapido fornisce codice di esempio per entrambe le lingue.
Metodo veloce in Firebase Cloud Messaging
L'SDK FCM esegue lo swizzling dei metodi in due aree chiave: mappatura del token APNs al token di registrazione FCM e acquisizione dei dati analitici durante la gestione della richiamata dei messaggi a valle . Gli sviluppatori che preferiscono non usare lo swizzling possono disabilitarlo aggiungendo il flag FirebaseAppDelegateProxyEnabled
nel file Info.plist dell'app e impostandolo su NO (valore booleano). Le aree pertinenti delle guide forniscono esempi di codice, sia con che senza metodo swizzling abilitato.
Aggiungi Firebase al tuo progetto Apple
Se non l'hai già fatto, aggiungi Firebase al tuo progetto Apple .
Carica la tua chiave di autenticazione APNs
Carica la tua chiave di autenticazione APN su Firebase. Se non disponi già di una chiave di autenticazione APNs, assicurati di crearne una nell'Apple Developer Member Center .
All'interno del progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, seleziona Impostazioni progetto , quindi seleziona la scheda Cloud Messaging .
Nella chiave di autenticazione APN in Configurazione app iOS , fai clic sul pulsante Carica .
Passare alla posizione in cui è stata salvata la chiave, selezionarla e fare clic su Apri . Aggiungi l'ID chiave per la chiave (disponibile nell'Apple Developer Member Center ) e fai clic su Carica .
Registrati per le notifiche remote
All'avvio o nel punto desiderato nel flusso dell'applicazione, registra la tua app per le notifiche remote. ChiamareregisterForRemoteNotifications
come mostrato:Rapido
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Obiettivo-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
Accedi al token di registrazione
Per impostazione predefinita, l'SDK FCM genera un token di registrazione per l'istanza dell'app client all'avvio dell'app. Simile al token del dispositivo APNs, questo token ti consente di inviare notifiche mirate a qualsiasi particolare istanza della tua app.
Allo stesso modo in cui le piattaforme Apple in genere forniscono un token del dispositivo APN all'avvio dell'app, FCM fornisce un token di registrazione tramite il metodo messaging:didReceiveRegistrationToken:
di FIRMessagingDelegate
. L'SDK FCM recupera un token nuovo o esistente durante l'avvio iniziale dell'app e ogni volta che il token viene aggiornato o invalidato. In tutti i casi, FCM SDK chiama messaging:didReceiveRegistrationToken:
con un token valido.
Il token di registrazione può cambiare quando:
- L'app viene ripristinata su un nuovo dispositivo
- L'utente disinstalla/reinstalla l'app
- L'utente cancella i dati dell'app.
Impostare il delegato della messaggistica
Per ricevere i token di registrazione, implementa il protocollo del delegato di messaggistica e imposta la proprietà delegate
di FIRMessaging
dopo aver chiamato [FIRApp configure]
. Ad esempio, se il delegato dell'applicazione è conforme al protocollo del delegato di messaggistica, è possibile impostare il delegato su application:didFinishLaunchingWithOptions:
su se stesso.
Rapido
Messaging.messaging().delegate = self
Obiettivo-C
[FIRMessaging messaging].delegate = self;
Recupero del token di registrazione corrente
I token di registrazione vengono consegnati tramite il metodo messaging:didReceiveRegistrationToken:
. Questo metodo viene generalmente chiamato una volta per avvio dell'app con il token di registrazione. Quando viene chiamato questo metodo, è il momento ideale per:
- Se il token di registrazione è nuovo, invialo al server delle applicazioni.
- Sottoscrivi il token di registrazione agli argomenti. Questo è richiesto solo per nuovi abbonamenti o per situazioni in cui l'utente ha reinstallato l'app.
Puoi recuperare il token direttamente usando token(completion:) . Viene fornito un errore non nullo se il recupero del token non è riuscito in alcun modo.
Rapido
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)" } }
Obiettivo-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; } }];
Puoi utilizzare questo metodo in qualsiasi momento per accedere al token invece di archiviarlo.
Monitorare l'aggiornamento del token
Per ricevere una notifica ogni volta che il token viene aggiornato, fornire un delegato conforme al protocollo del delegato di messaggistica. L'esempio seguente registra il delegato e aggiunge il metodo delegato appropriato:
Rapido
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. }
Obiettivo-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. }
In alternativa, puoi ascoltare una NSNotification
denominata kFIRMessagingRegistrationTokenRefreshNotification
invece di fornire un metodo delegato. La proprietà token ha sempre il valore del token corrente.
Swizzling disabilitato: mappatura del token APN e del token di registrazione
Se hai disabilitato il metodo swizzling o stai creando un'app SwiftUI, dovrai mappare in modo esplicito il tuo token APNs al token di registrazione FCM. Implementa il application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
per recuperare il token APNs, quindi imposta la proprietà apnsToken
di Messaging
:
Rapido
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Obiettivo-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
Dopo che il token di registrazione FCM è stato generato, puoi accedervi e ascoltare gli eventi di aggiornamento utilizzando gli stessi metodi con lo swizzling abilitato.
Impedisci l'inizializzazione automatica
Quando viene generato un token di registrazione FCM, la libreria carica l'identificatore e i dati di configurazione in Firebase. Se desideri ottenere prima un consenso esplicito dagli utenti, puoi impedire la generazione di token al momento della configurazione disabilitando FCM. Per fare ciò, aggiungi un valore di metadati al tuo Info.plist
(non al tuo GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Per riattivare FCM, puoi effettuare una chiamata di runtime:
Rapido
Messaging.messaging().autoInitEnabled = true
Obiettivo-C
[FIRMessaging messaging].autoInitEnabled = YES;
Questo valore persiste tra i riavvii dell'app una volta impostato.
Prossimi passi
Dopo aver configurato il tuo client Apple, sei pronto per aggiungere la gestione dei messaggi e altri comportamenti più avanzati alla tua app. Consulta queste guide per ulteriori informazioni: