Per le app client Apple, puoi ricevere payload di notifiche e dati fino a 4096 byte tramite l'interfaccia Firebase Cloud Messaging APN.
Per scrivere il codice client in Objective-C o Swift, ti consigliamo di utilizzare l'API FIRMessaging. L'esempio della guida rapida fornisce codice di esempio per entrambi i linguaggi.
Swizzling del metodo in Firebase Cloud Messaging
L'SDK FCM esegue lo scambio di metodi in due aree chiave:
mappamento del token APNs
al token di registrazione FCM e acquisizione dei dati di analisi durante
la gestione del callback dei messaggi a valle.
Gli sviluppatori che preferiscono non utilizzare lo swizzeling possono disattivarlo 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 attivazione dello scambio di metodi.
Aggiungere Firebase al progetto Apple
Se non lo hai già fatto, aggiungi Firebase al tuo progetto Apple.
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 per gli 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 in Configurazione app per iOS, fai clic sul pulsante Carica.
-
Vai alla posizione in cui hai salvato la chiave, selezionala e fai clic su Apri. Aggiungi l'ID chiave per la chiave (disponibile nel Centro membri Apple Developer) e fai clic su Carica.
Registrati per ricevere le notifiche da remoto
All'avvio o nel punto desiderato del flusso di applicazione, registra la tua app per le notifiche remote. ChiamaregisterForRemoteNotifications
come mostrato:
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 al momento dell'avvio dell'app. Analogamente al token dispositivo APN, questo token ti consente di inviare notifiche mirate a qualsiasi istanza specifica della tua app.
Come le piattaforme Apple in genere forniscono un token 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 il lancio iniziale dell'app e ogni volta che il token viene aggiornato o reso non valido.
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 del delegato per i messaggi e imposta la proprietà delegate
di FIRMessaging
dopo aver chiamato [FIRApp configure]
.
Ad esempio, se il tuo delegato dell'applicazione è conforme al protocollo del delegato per la 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 ogni 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.
- Abbonati al 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:). Viene fornito un errore non nullo se il recupero del token non è riuscito in alcun modo.
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 del 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 del 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
chiamato
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 scambio di metodi o stai creando un'app SwiftUI, dovrai mappare esplicitamente il token APNs al token di registrazione FCM. Implementa il metodo
application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
per recuperare il token APNs, quindi 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 aver generato il token di registrazione FCM, puoi accedervi e ascoltare gli eventi di aggiornamento utilizzando gli stessi metodi di quando lo swizzling è attivo.
Impedire l'inizializzazione automatica
Quando viene generato un token di registrazione FCM, la libreria carica su Firebase i dati di configurazione e di identificazione. Se vuoi prima ottenere un'attivazione esplicita da parte 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 rimane invariato dopo i riavvii dell'app.
Passaggi successivi
Dopo aver configurato il client Apple, puoi aggiungere alla tua app la gestione dei messaggi e altri comportamenti più avanzati. Per saperne di più, consulta queste guide: