| Seleziona la piattaforma: | iOS+ Android Web Flutter Unity C++ |
Questa guida descrive come iniziare a utilizzare Firebase Cloud Messaging nelle app client per la piattaforma Apple (ad esempio iOS) in modo da poter inviare messaggi in modo affidabile.
Per le app client Apple, puoi ricevere payload di notifiche e 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 avvio rapido fornisce codice campione per entrambi i linguaggi.
Prima di iniziare, aggiungi Firebase al tuo progetto Apple.
Swizzling del metodo in Firebase Cloud Messaging
L'FCM SDK esegue lo swizzling del metodo in due aree chiave: il mapping del token APN al token di registrazione FCM e l'acquisizione dei dati di Analytics durante la gestione dei 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 aree pertinenti delle guide forniscono esempi di codice, sia con che senza lo swizzling del metodo abilitato.
Carica la chiave di autenticazione APN
Carica la chiave di autenticazione APN su Firebase. Se non hai già una chiave di autenticazione APN, assicurati di crearne una nel Centro membri per sviluppatori Apple.
-
All'interno del progetto nella Firebase console, seleziona l' icona a forma di ingranaggio, seleziona Impostazioni progetto e poi la scheda Cloud Messaging.
-
In Chiave di autenticazione APN nella sezione Configurazione app iOS, fai clic sul pulsante Carica per caricare la chiave di autenticazione di sviluppo, la chiave di autenticazione di produzione o entrambe. È necessaria almeno una chiave.
-
Individua la posizione in cui hai salvato la chiave, selezionala e fai clic Apri. Aggiungi l'ID della chiave (disponibile nel Centro membri per sviluppatori Apple) e fai clic su Carica.
Registrati per ricevere notifiche remote
All'avvio o nel punto desiderato del flusso dell'applicazione, registra l'app per ricevere 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];
Accedi al token di registrazione
Per impostazione predefinita, l'FCM SDK 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.
Proprio come le piattaforme Apple in genere forniscono un token dispositivo APN all'avvio dell'app,
FCM fornisce un token di registrazione tramite il metodo FIRMessagingDelegate's
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.
Imposta il delegato di messaggistica
Per ricevere i token di registrazione, implementa il protocollo del delegato di messaggistica
e imposta la proprietà FIRMessaging's delegate 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;
Recupera il token di registrazione corrente
I token di registrazione vengono forniti 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 dell'applicazione.
- Iscrivi il token di registrazione agli argomenti. Questa operazione è necessaria solo per nuove sottoscrizioni 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 in qualsiasi modo, viene fornito un errore non nullo.
Swift
Messaging.messaging().token { token, error in if let error = error { print("Error fetching remote FCM registration token: \(error)") } else if let token = token { print("Remote instance ID token: \(token)") } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error fetching the remote FCM registration token: %@", error); } else { NSLog(@"Remote FCM registration token: %@", token); NSString* message = [NSString stringWithFormat:@"FCM registration token: %@", token]; // display message NSLog(@"%@", message); } }];
Puoi utilizzare questo metodo in qualsiasi momento per accedere al token anziché memorizzarlo.
Monitora 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))") // 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 del delegato. La proprietà del token ha sempre il
valore del token corrente.
Swizzling disattivato: mapping del token APN e del token di registrazione
Se hai disattivato lo swizzling del metodo o stai creando un'app SwiftUI, devi
mappare esplicitamente il token APN al token di FCM registrazione. Implementa il metodo
application(_:didRegisterForRemoteNotificationsWithDeviceToken:) per recuperare il token APN, quindi imposta la proprietà Messaging's
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; }
Dopo aver generato il token di registrazione FCM, puoi accedervi e ascoltare gli eventi di aggiornamento utilizzando gli stessi metodi di quando lo swizzling è attivato.
Impedisci l'inizializzazione automatica
Quando viene generato un FCM token di registrazione, la libreria carica l'
identificatore e i dati di configurazione su Firebase. Se vuoi ottenere prima un consenso esplicito dagli utenti, puoi impedire la generazione di token al momento della configurazione disattivando FCM. Per farlo, aggiungi un valore di 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 valido anche dopo il riavvio dell'app.
Configura l'estensione del servizio di notifica
Per inviare notifiche che includono immagini ai dispositivi Apple, devi aggiungere un'estensione del servizio di notifica. Questa estensione consente ai dispositivi di visualizzare le immagini fornite nel payload della notifica. Se non prevedi di inviare immagini nelle notifiche, puoi saltare questo passaggio.
Per aggiungere un'estensione del servizio, esegui le attività di configurazione richieste per
modificare e presentare le notifiche
in APN, quindi aggiungi l'API helper dell'estensione FCM in NotificationService.m.
In particolare, anziché completare il callback con self.contentHandler(self.bestAttemptContent);, completalo con FIRMessaging extensionHelper come mostrato di seguito:
@interface NotificationService () <NSURLSessionDelegate>
@property(nonatomic) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property(nonatomic) UNMutableNotificationContent *bestAttemptContent;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// Modify the notification content here as you want
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
self.bestAttemptContent.title];
// Call FIRMessaging extension helper API.
[[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent
withContentHandler:contentHandler];
}
...
Invia 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 background sul dispositivo.
- Nella console Firebase, apri la pagina Messaggi.
- Se è il tuo primo messaggio, seleziona Crea la tua prima campagna.
- Seleziona Messaggi di notifica Firebase e poi Crea.
- In caso contrario, nella scheda Campagne, seleziona Nuova campagna e poi Notifiche.
- Inserisci il testo del messaggio.
- Seleziona Invia messaggio di prova nel riquadro a destra.
- Nel campo Aggiungi un token di registrazione, inserisci il tuo token di registrazione.FCM
- Seleziona Testa.
Dopo aver selezionato Testa, 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 FCM dashboard dei report , che registra il numero di messaggi inviati e aperti su dispositivi Apple e Android .
Passaggi successivi
Dopo aver completato i passaggi di configurazione, ecco alcune opzioni per procedere con FCM per le piattaforme Apple: