Configura un'app client Firebase Cloud Messaging su iOS

Per le app client iOS, puoi ricevere notifiche e payload di dati fino a 4000 byte tramite l'interfaccia APN di Firebase Cloud Messaging.

Per scrivere il codice del client in Objective-C o Swift, si consiglia di utilizzare l' API FIRMessaging . L' esempio QuickStart fornisce il codice di esempio per entrambe le lingue.

Per abilitare l'invio di notifiche push tramite APN, è necessario:

  • Una chiave di autenticazione della notifica push di Apple per il tuo account sviluppatore Apple. Firebase Cloud Messaging utilizza questo token per inviare notifiche push all'applicazione identificata dall'App ID.

  • Un profilo di provisioning per questo App ID con notifiche push attivato . Inoltre, per testare l'app durante lo sviluppo, è necessario un profilo di provisioning per lo sviluppo per autorizzare i dispositivi a eseguire un'app non ancora pubblicata sull'App Store.

È possibile creare sia nel Centro membri di Apple Developer .

Metodo swizzling in Firebase Cloud Messaging

Il FCM SDK metodo esegue swizzling in due aree chiave: mappatura di APN di token per la registrazione FCM token e l'acquisizione di dati di analisi durante la movimentazione a valle messaggio di richiamata . Gli sviluppatori che preferiscono non utilizzare swizzling possono disabilitare con l'aggiunta di bandiera FirebaseAppDelegateProxyEnabled nel file Info.plist dell'app e impostandola su NO (valore booleano). Le aree pertinenti delle guide forniscono esempi di codice, sia con che senza metodo swizzling abilitato.

Aggiungi Firebase al tuo progetto iOS

Questa sezione tratta le attività che potresti aver completato se hai già abilitato altre funzionalità di Firebase per la tua app. Per FCM nello specifico, è necessario caricare il tuo chiave di autenticazione APN e registrarsi per le notifiche a distanza .

Prerequisiti

  • Installa quanto segue:

    • Xcode 12.2 o successivo
    • CocoaPods 1.10.0 o successivo
  • Assicurati che il tuo progetto soddisfi questi requisiti:

    • Il tuo progetto deve avere come target iOS 10 o versioni successive.
  • Impostare un dispositivo iOS fisico per eseguire la vostra applicazione, e completare questi compiti:

    • Ottenere una spinta di notifica di Apple chiave di autenticazione per il vostro conto di Apple Developer .
    • Attiva notifiche push in XCode sotto App> Funzionalità.

Se non si dispone già di un progetto Xcode e vogliono solo provare un prodotto Firebase, è possibile scaricare uno dei nostri esempi rapidi .

Crea un progetto Firebase

Prima di poter aggiungere Firebase alla tua app iOS, devi creare un progetto Firebase per connetterti alla tua app iOS. Visita Capire Firebase progetti per saperne di più su progetti Firebase.

Registra la tua app con Firebase

Dopo aver creato un progetto Firebase, puoi aggiungere la tua app iOS.

Visita Capire Firebase Progetti per conoscere meglio le best practice e le considerazioni per l'aggiunta di applicazioni a un progetto Firebase, compreso il modo di gestire molteplici varianti di compilazione.

  1. Vai alla console Firebase .

  2. Al centro della pagina panoramica del progetto, fare clic sull'icona iOS ( ) per lanciare il flusso di lavoro di installazione.

    Se è già stato aggiunto un app per il vostro progetto Firebase, fare clic su Aggiungi app per visualizzare le opzioni di piattaforma.

  3. Inserire l'ID del fascio tua applicazione in iOS fascio campo ID.

  4. (Facoltativo) Immettere altre informazioni app: nick App e App Store ID.

  5. Fare clic su Registra app.

Aggiungi un file di configurazione Firebase

  1. Fare clic su Scarica GoogleService-Info.plist per ottenere il file di configurazione Firebase iOS ( GoogleService-Info.plist ).

  2. Sposta il tuo file di configurazione nella radice del tuo progetto Xcode. Se richiesto, selezionare per aggiungere il file di configurazione a tutte le destinazioni.

Se si dispone di più ID di bundle nel progetto, è necessario associare ogni ID fascio con un'applicazione registrato nella console Firebase in modo che ogni applicazione può avere il proprio GoogleService-Info.plist file.

Aggiungi gli SDK Firebase alla tua app

Si consiglia di utilizzare CocoaPods installare le librerie Firebase. Tuttavia, se si preferisce non utilizzare CocoaPods, è possibile integrare i quadri SDK direttamente o utilizzare Swift Package Manager , invece.

Si sta utilizzando uno dei esempi rapidi ? Il progetto Xcode e Podfile (con baccello) sono già presenti, ma avrete ancora bisogno di aggiungere il file di configurazione Firebase e installare i baccelli.

  1. Crea un Podfile se non ne hai già uno:

    cd your-project-directory
    pod init
  2. Al tuo Podfile, aggiungi i pod Firebase che desideri utilizzare nella tua app.

    È possibile aggiungere uno qualsiasi dei prodotti Firebase supportati al tuo iOS.

    Per un'esperienza ottimale con Firebase nube di messaggistica, si consiglia di consentire a Google Analytics nel progetto. Inoltre, come parte della configurazione di Analytics, devi aggiungere l'SDK Firebase per Analytics alla tua app.

    Analitica abilitata

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    
    # For Analytics without IDFA collection capability, use this pod instead
    # pod ‘Firebase/AnalyticsWithoutAdIdSupport’
    
    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'

    Scopri di più su IDFA, l'identificatore di pubblicità a livello di dispositivo, in Apple la privacy degli utenti e utilizzare i dati e App monitoraggio Trasparenza documentazione.

    Analitica non abilitata

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Installare i baccelli, quindi aprire il .xcworkspace file per vedere il progetto in Xcode:

    pod install
    open your-project.xcworkspace

Carica la tua chiave di autenticazione APNs

Carica la tua chiave di autenticazione APN su Firebase. Se non si dispone già di una chiave di autenticazione APNs, assicuratevi di crearne uno nel Centro membri di Apple Developer .

  1. Dentro il progetto nella console Firebase, selezionare l'icona dell'ingranaggio, selezionare Impostazioni di progetto e quindi selezionare la scheda di messaggistica cloud.

  2. In APN chiave di autenticazione in configurazione iOS, fare clic sul pulsante Carica.

  3. Individuare la posizione in cui è stata salvata la chiave, selezionarlo e fare clic su Apri. Aggiungere l'ID della chiave per la chiave (disponibile nel Stati Developer Center di Apple ) e fare clic su Carica.

Inizializza Firebase nella tua app

Dovrai aggiungere il codice di inizializzazione di Firebase alla tua applicazione. Importa il modulo Firebase e configura un'istanza condivisa come mostrato:

  1. Importare il modulo Firebase nella vostra UIApplicationDelegate :

    Swift

    import Firebase

    Obiettivo-C

    @import Firebase;
  2. Configurare un FirebaseApp istanza condivisa, di solito in della tua app application:didFinishLaunchingWithOptions: Metodo:

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Obiettivo-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

Registrati per le notifiche remote

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

Swift

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: { _, _ in }
  )
} else {
  let settings: UIUserNotificationSettings =
    UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Obiettivo-C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

Accedi al token di registrazione

Per impostazione predefinita, l'SDK di 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 che iOS in genere fornisce un dispositivo APNs gettone su start app, FCM fornisce una registrazione gettone tramite FIRMessagingDelegate 's messaging:didReceiveRegistrationToken: metodo. L'SDK di 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, la FCM SDK 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, l'attuazione del protocollo di messaggistica delegato e impostare FIRMessaging s' delegate proprietà dopo aver chiamato [FIRApp configure] . Ad esempio, se il delegato applicazione conforme al protocollo di messaggistica delegato, è possibile impostare il delegato sulla application:didFinishLaunchingWithOptions: a se stesso.

Swift

Messaging.messaging().delegate = self

Obiettivo-C

[FIRMessaging messaging].delegate = self;

Recupero del token di registrazione corrente

Gettoni di registrazione sono forniti tramite il metodo messaging:didReceiveRegistrationToken: . Questo metodo viene generalmente chiamato 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 tuo 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.

È possibile recuperare il token direttamente tramite gettone (completamento :) . 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)"
  }
}

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 memorizzarlo.

Monitora l'aggiornamento dei token

Per ricevere una notifica ogni volta che il token viene aggiornato, fornire un delegato conforme al protocollo delegato di messaggistica. L'esempio seguente registra il delegato e aggiunge 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.
}

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, è possibile ascoltare un NSNotification nome kFIRMessagingRegistrationTokenRefreshNotification piuttosto che fornire un metodo delegato. La proprietà token ha sempre il valore del token corrente.

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

Se hai disabilitato il metodo swizzling, dovrai mappare esplicitamente il tuo token APN al token di registrazione FCM. Eseguire l'override del metodo didRegisterForRemoteNotificationsWithDeviceToken per recuperare gli APN token e quindi impostare FIRMessaging s' APNSToken proprietà:

Swift

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 che il token di registrazione FCM è stato generato, puoi accedervi e ascoltare gli eventi di aggiornamento utilizzando gli stessi metodi dello 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 desideri ottenere prima un consenso esplicito dagli utenti, puoi impedire la generazione di token al momento della configurazione disabilitando FCM. Per fare questo, aggiungere un valore metadati al tuo Info.plist (non il tuo GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

Per riattivare FCM, puoi effettuare una chiamata di runtime:

Swift

Messaging.messaging().autoInitEnabled = true

Obiettivo-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

Prossimi passi

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