Configurazione di un'app client Firebase Cloud Messaging sulle piattaforme Apple

Per le app client di Apple, puoi ricevere notifiche e payload di dati fino a 4096 byte tramite l'interfaccia del servizio 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 un codice campione per entrambi i linguaggi.

Metodo swizzling in Firebase Cloud Messaging

L'SDK FCM esegue swizzling del metodo in due aree principali: mappatura del token APNs al token di registrazione FCM e acquisizione dei dati di analisi durante gestione del callback dei messaggi downstream. Gli sviluppatori che preferiscono non utilizzare la vibrazione possono disattivarla 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, con e senza la rotazione dei metodi attivata.

Aggiungi Firebase al tuo progetto Apple

Se non l'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 in Firebase. Se non hai ancora una chiave di autenticazione del servizio APN, assicurati di crearne una nell'Apple Developer Member Center.

  1. All'interno del progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, seleziona Impostazioni progetto e poi la scheda Cloud Messaging.

  2. In Chiave di autenticazione del servizio APN, in Configurazione app per iOS, fai clic sul pulsante Carica.

  3. Vai alla posizione in cui hai salvato la chiave, selezionala e fai clic su Apri. Aggiungi l'ID della chiave (disponibile nell' Apple Developer Member Center) e fai clic su Carica.

Registrati per ricevere notifiche remote

All'avvio o nel punto desiderato del flusso dell'applicazione, registra la tua app per le notifiche remote. Chiama registerForRemoteNotifications 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 all'avvio dell'app. Analogamente al token del dispositivo del servizio APN, questo token consente di inviare notifiche mirate a qualsiasi istanza specifica della tua app.

Allo stesso modo in cui le piattaforme Apple in genere inviano 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, 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 la messaggistica

Per ricevere i token di registrazione, implementa il protocollo del delegato della messaggistica e imposta la proprietà delegate di FIRMessaging dopo aver chiamato [FIRApp configure]. Ad esempio, se il delegato della tua applicazione è conforme al protocollo del delegato della 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 corrente

I token di registrazione vengono inviati con il metodo messaging:didReceiveRegistrationToken:. Questo metodo viene chiamato in genere una volta per ogni app avviata 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.
  • Sottoscrivere il token di registrazione agli argomenti. Questa operazione è necessaria soltanto per i nuovi abbonamenti o per le situazioni in cui l'utente ha reinstallato l'app.

Puoi recuperare il token direttamente utilizzando token(Complete:). Se il recupero del token non è riuscito, viene visualizzato un errore "non null".

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é archiviarlo.

Monitora l'aggiornamento dei token

Per ricevere una notifica ogni volta che il token viene aggiornato, fornisci un delegato che soddisfi il protocollo del delegato di messaggistica. Nell'esempio seguente viene registrato il delegato e viene aggiunto il metodo delegato corretto:

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 rimanere in ascolto per un NSNotification denominato kFIRMessagingRegistrationTokenRefreshNotification anziché fornire un metodo delegato. La proprietà token ha sempre il valore token corrente.

Swizzling disabilitato: mappatura del token APN e del token di registrazione

Se hai disabilitato la funzione swizzling del metodo o stai creando un'app SwiftUI, devi mappare esplicitamente il token del servizio APN al token di registrazione FCM. Implementa il metodo application(_:didRegisterForRemoteNotificationsWithDeviceToken:) per recuperare il token del servizio APN, 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 della funzione swizzling abilitata.

Impedisci inizializzazione automatica

Quando viene generato un token di registrazione FCM, la libreria carica i dati di identificazione e configurazione in Firebase. Se vuoi ottenere prima un'attivazione esplicita dagli utenti, puoi impedire la generazione del 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;

Questo valore persiste per tutti i riavvii dell'app una volta impostato.

Passaggi successivi

Dopo aver configurato il client Apple, puoi aggiungere alla tua app la gestione dei messaggi e altri comportamenti più avanzati. Consulta queste guide per saperne di più: