Configura un'app client Firebase Cloud Messaging su piattaforme Apple

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 vorticoso in Firebase Cloud Messaging

L'SDK FCM esegue il metodo swizzling in due aree chiave: mappatura del token APN sul token di registrazione FCM e acquisizione di dati analitici durante la gestione del callback del messaggio downstream . Gli sviluppatori che preferiscono non utilizzare 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 il metodo swizzling abilitato.

Aggiungi Firebase al tuo progetto Apple

Se non l'hai già fatto, aggiungi Firebase al tuo progetto Apple .

Carica la chiave di autenticazione APN

Carica la chiave di autenticazione APN su Firebase. Se non disponi già di una chiave di autenticazione APN, assicurati di crearne una nell'Apple Developer Member Center .

  1. All'interno del tuo progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, seleziona Impostazioni progetto e quindi seleziona la scheda Messaggistica cloud .

  2. Nella chiave di autenticazione APN nella configurazione dell'app iOS , fai clic sul pulsante Carica .

  3. Individua la posizione in cui hai salvato la chiave, selezionala e fai clic su Apri . Aggiungi l'ID della chiave (disponibile nel Centro membri per sviluppatori Apple ) e fai clic su Carica .

Registrati per le notifiche remote

All'avvio o nel punto desiderato del flusso dell'applicazione, registra la tua app per le notifiche remote. registerForRemoteNotifications come mostrato:

Veloce


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 APN, questo token ti consente di inviare notifiche mirate a qualsiasi istanza particolare 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 il lancio iniziale dell'app e ogni volta che il token viene aggiornato o invalidato. In tutti i casi, l'SDK di 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 della messaggistica

Per ricevere i token di registrazione, implementare il protocollo delegato di messaggistica e impostare 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.

Veloce

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 chiamato generalmente 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 dell'applicazione.
  • Sottoscrivere il token di registrazione agli argomenti. Ciò è necessario solo per i nuovi abbonamenti o per le situazioni in cui l'utente ha reinstallato l'app.

È possibile recuperare il token direttamente utilizzando token(completion:) . Viene fornito un errore non nullo se il recupero del token non è riuscito in qualche modo.

Veloce

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 corretto:

Veloce

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 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 il metodo swizzling o stai creando un'app SwiftUI, dovrai mappare esplicitamente il token APN al token di registrazione FCM. Implementa il application(_:didRegisterForRemoteNotificationsWithDeviceToken:) per recuperare il token APN, quindi imposta la proprietà apnsToken di Messaging :

Veloce

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 aver generato il token di registrazione FCM, puoi accedervi e ascoltare gli eventi di aggiornamento utilizzando gli stessi metodi dello swizzling abilitato.

Prevenire l'inizializzazione automatica

Quando viene generato un token di registrazione FCM, la libreria carica l'identificatore e i dati di configurazione su Firebase. Se desideri prima ottenere un consenso esplicito da parte degli utenti, puoi impedire la generazione del token in fase di 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:

Veloce

Messaging.messaging().autoInitEnabled = true

Obiettivo-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

Prossimi passi

Dopo aver configurato il client Apple, sei pronto per aggiungere la gestione dei messaggi e altri comportamenti più avanzati alla tua app. Consulta queste guide per ulteriori informazioni: