Questa guida rapida descrive come configurare Firebase Cloud Messaging nelle tue app client web e mobile per poter inviare messaggi in modo affidabile. Per gli ambienti
server, vedi Il tuo ambiente server e
FCM.
Configurare un'app client Firebase Cloud Messaging sulle piattaforme Apple
Per le app client Apple, puoi ricevere notifiche e payload di dati fino a 4096 byte tramite l'interfaccia APN Firebase Cloud Messaging.
Per scrivere il codice client in Objective-C o Swift, ti consigliamo di utilizzare l'API FIRMessaging. L'esempio di guida rapida fornisce codice di esempio per entrambe le lingue.
Prima di iniziare, aggiungi Firebase al tuo progetto Apple.
Swizzling del metodo in Firebase Cloud Messaging
L'SDK FCM esegue lo swizzling dei metodi in due aree chiave: la mappatura del token APN al token di registrazione FCM e l'acquisizione dei dati di analisi durante la gestione del callback dei messaggi downstream. Gli sviluppatori che
preferiscono non utilizzare lo swizzling possono disattivarlo aggiungendo il flag
FirebaseAppDelegateProxyEnabled
nel file Info.plist dell'app e impostandolo su
NO (valore booleano). Le sezioni pertinenti delle guide forniscono esempi di codice, sia
con che senza lo swizzling del metodo abilitato.
Carica la chiave di autenticazione del servizio APN
Carica la chiave di autenticazione del servizio APN su Firebase. Se non hai già una chiave di autenticazione APNs, assicurati di crearne una nel Centro membri sviluppatori Apple.
-
All'interno del progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, seleziona Impostazioni progetto e poi la scheda Cloud Messaging.
-
In Chiave di autenticazione del servizio APN nella sezione Configurazione app per iOS, fai clic sul pulsante Carica per caricare la chiave di autenticazione di sviluppo, la chiave di autenticazione di produzione o entrambe. È obbligatorio indicarne almeno uno.
-
Sfoglia fino alla posizione in cui hai salvato la chiave, selezionala e fai clic su Apri. Aggiungi l'ID chiave (disponibile nel Developer Member Center di Apple) e fai clic su Carica.
Registrarsi per ricevere notifiche da remoto
All'avvio o nel punto desiderato del flusso dell'applicazione, registra la tua app per le notifiche remote. ChiamaregisterForRemoteNotifications
come mostrato di seguito:
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];
Accedere 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. Analogamente al token dispositivo APN, questo token ti consente di inviare notifiche mirate a qualsiasi istanza specifica della tua app.
Nello stesso modo in cui le piattaforme Apple in genere forniscono un token dispositivo APNs all'avvio dell'app,
FCM fornisce un token di registrazione tramite il metodo FIRMessagingDelegate
messaging:didReceiveRegistrationToken:
.
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, l'SDK FCM 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 per i messaggi
Per ricevere i token di registrazione, implementa il protocollo
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, puoi impostare il delegato su application:didFinishLaunchingWithOptions:
su se stesso.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
Recupero del token di registrazione attuale
I token di registrazione vengono inviati tramite il metodo
messaging:didReceiveRegistrationToken:
. Questo metodo viene chiamato in genere 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 è necessario solo per i nuovi abbonamenti o per le situazioni in cui l'utente ha reinstallato l'app.
Puoi recuperare il token direttamente utilizzando token(completion:). Se il recupero del token non è riuscito, viene fornito un errore non nullo.
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; } }];
Puoi utilizzare questo metodo in qualsiasi momento per accedere al token anziché memorizzarlo.
Monitorare l'aggiornamento dei token
Per ricevere una notifica ogni volta che il token viene aggiornato, fornisci un delegato conforme al protocollo del delegato di messaggistica. L'esempio seguente registra il delegato e aggiunge il metodo delegato appropriato:
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. }
In alternativa, puoi ascoltare un NSNotification
denominato
kFIRMessagingRegistrationTokenRefreshNotification
anziché fornire un metodo delegato. La proprietà token ha sempre il
valore del token corrente.
Swizzling disattivato: mappatura del token APNs e del token di registrazione
Se hai disattivato lo swizzling dei metodi o stai creando un'app SwiftUI, devi
mappare esplicitamente il token APNs al token di registrazione FCM. Implementa il metodo
application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
per
recuperare il token APNs e poi imposta la proprietà
apnsToken
di Messaging
:
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; }
Dopo la generazione del token di registrazione FCM, puoi accedervi e ascoltare gli eventi di aggiornamento utilizzando gli stessi metodi di swizzling abilitato.
Impedisci l'inizializzazione automatica
Quando viene generato un token di registrazione FCM, la libreria carica
l'identificatore e i dati di configurazione su Firebase. Se vuoi ottenere prima il consenso esplicito degli utenti, puoi impedire la generazione di token al momento della configurazione disattivando FCM. Per farlo, aggiungi un valore dei metadati a Info.plist
(non a
GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Per riattivare FCM, puoi effettuare una chiamata di runtime:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
Una volta impostato, questo valore viene mantenuto anche dopo il riavvio dell'app.
Inviare un messaggio di notifica
- Installa ed esegui l'app sul dispositivo di destinazione. Sui dispositivi Apple, accetta la richiesta di autorizzazione a ricevere notifiche remote.
- Verifica che l'app sia in esecuzione in background sul dispositivo.
- Nella console Firebase, apri la pagina Messaggistica.
- Se questo è il tuo primo messaggio, seleziona Crea la tua prima campagna.
- Seleziona Messaggi di notifica Firebase e poi Crea.
- In alternativa, nella scheda Campagne, seleziona Nuova campagna e poi Notifiche.
- Inserisci il testo del messaggio.
- Seleziona Invia messaggio di prova dal riquadro a destra.
- Nel campo con l'etichetta Aggiungi un token di registrazione FCM, inserisci il token di registrazione.
- Seleziona Testa.
Dopo aver selezionato Test, il dispositivo client di destinazione, con l'app in background, dovrebbe ricevere la notifica.
Per informazioni sulla distribuzione dei messaggi alla tua app, consulta la dashboard dei report FCM, che registra il numero di messaggi inviati e aperti su dispositivi Apple e Android.
Passaggi successivi
Dopo aver configurato il client Apple, puoi iniziare a ricevere e inviare messaggi ai tuoi utenti: