1. Introduzione
Ultimo aggiornamento: 2020-1-6
Firebase Cloud Messaging (FCM) è una soluzione di messaggistica multipiattaforma che ti consente di inviare messaggi in modo affidabile e senza costi.
Utilizzando FCM, puoi comunicare a un'app client che sono disponibili nuove email o altri dati da sincronizzare. Puoi inviare messaggi di notifica per favorire il coinvolgimento e la fidelizzazione degli utenti. Per casi d'uso come la messaggistica istantanea, un messaggio può trasferire un payload fino a 4 KB a un'app client.
Come funziona?
Un'implementazione di FCM include due componenti principali per l'invio e la ricezione:
- Un ambiente attendibile come Cloud Functions for Firebase o un server delle app su cui creare, scegliere come target e inviare messaggi.
- Un'app client iOS, Android o web (JavaScript) che riceve messaggi tramite il servizio di trasporto specifico della piattaforma corrispondente.
Panoramica dell'architettura di FCM
FCM si basa sul seguente insieme di componenti che creano, trasportano e ricevono i messaggi:
- Strumenti per comporre o creare richieste di messaggi. Notifications Composer offre un'opzione basata su GUI per la creazione di richieste di notifica. Per l'automazione completa e il supporto di tutti i tipi di messaggi, devi creare richieste di messaggi in un ambiente server attendibile che supporti l'SDK Firebase Admin o i protocolli server FCM. Questo ambiente potrebbe essere Cloud Functions for Firebase, Google App Engine o il tuo server delle app.
- Il backend FCM, che (tra le altre funzioni) accetta le richieste di messaggi, esegue la distribuzione dei messaggi tramite argomenti e genera metadati dei messaggi come l'ID messaggio.
- Un livello di trasporto a livello di piattaforma, che indirizza il messaggio al dispositivo di destinazione, gestisce la consegna dei messaggi e applica la configurazione specifica della piattaforma, se appropriato. Questo livello di trasporto include:
- Livello di trasporto Android (ATL) per dispositivi Android con Google Play Services
- Servizio di notifiche push di Apple (APNS) per i dispositivi iOS
- Protocollo web push per le app web
- L'SDK FCM sul dispositivo dell'utente, in cui viene visualizzata la notifica o il messaggio viene gestito in base allo stato di primo piano/background dell'app e a qualsiasi logica dell'applicazione pertinente.
Cosa creerai
In questo codelab, aggiungerai le notifiche push a un'app per iOS di esempio con FCM.
Cosa imparerai a fare
- Come iscrivere e annullare l'iscrizione di un utente ai messaggi push
- Come gestire i messaggi push in arrivo
- Come visualizzare una notifica
- Come rispondere ai clic sulle notifiche
Che cosa ti serve
- Xcode 11.0 o versioni successive
- CocoaPods 1.9.0 o versioni successive
- Account sviluppatore Apple
- Un dispositivo iOS fisico su cui eseguire l'app
- Conoscenza di base di Swift
2. Preparazione
Scaricare il codice campione
In questo codelab creerai la tua app di test, ma se vuoi visualizzare ed eseguire l'app di esempio esistente, puoi scaricare il codice di esempio della guida rapida.
Esistono due modi per ottenere il campione:
- Clona il repository Git:
$ git clone https://github.com/firebase/quickstart-ios.git
- Scarica il file ZIP:
Se scarichi l'origine come file ZIP, quando lo decomprimi ottieni una cartella principale quickstart-ios
.
Creare una nuova app
Crea la tua app di test seguendo questi passaggi (i passaggi riportati di seguito sono in XCode 12.3):
- Apri Xcode e seleziona Create a new Xcode project (Crea un nuovo progetto Xcode).
- Seleziona App e fai clic su Avanti.
- Inserisci il Nome prodotto (ad es. MessagingExample)
- Seleziona Team (se non hai creato un team, configuralo nell'account sviluppatore Apple).
- Inserisci l'identificatore organizzazione (ad es.
com.
your-name
) - Inserisci l'identificatore bundle (ad es.
com.
your-name
.MessagingExample
, deve essere univoco tra tutte le app per iOS). - Seleziona Storyboard nel menu a discesa Interfaccia.
- Seleziona Delegato app UIKit nel menu a discesa Ciclo di vita.
- Seleziona Swift in Lingua.
- Fai clic su Avanti.
Avrai bisogno dell'identificatore bundle quando crei una chiave APN e registri la tua app nel progetto Firebase.
3. Configurazione di APN
Creare la chiave di autenticazione
Questa sezione descrive come generare una chiave di autenticazione per un ID app abilitato per le notifiche push. Se hai una chiave esistente, puoi utilizzarla anziché generarne una nuova.
Per creare una chiave di autenticazione:
- Nel tuo account sviluppatore, vai a Certificates, Identifiers & Profiles (Certificati, identificatori e profili) e poi a Keys (Chiavi).
- Fai clic sul pulsante Aggiungi (+) nell'angolo in alto a destra.
- Inserisci una descrizione per la chiave di autenticazione del servizio APN
- In Servizi chiavi, seleziona la casella di controllo APN e fai clic su Continua.
- Fai clic su Registrati e poi su Scarica. Salva la chiave in un luogo sicuro. Si tratta di un download una tantum e la chiave non può essere recuperata in un secondo momento.
Creare un ID app
Un ID app è un identificatore che identifica in modo univoco un'app. Per convenzione, è rappresentato da un dominio invertito.
- Vai al Centro membri di Apple Developer e accedi.
- Vai a Certificati, identificatori e profili.
- Vai a Identificatori.
- Fai clic sul pulsante + per creare un nuovo ID app.
- Seleziona il pulsante di opzione ID app e fai clic su Continua.
- Seleziona App e fai clic su Continua.
- Per creare il nuovo ID app:
- Inserisci un nome per l'ID app.
- Inserisci un ID team. Questo valore deve corrispondere all'ID team nella scheda Abbonamento.
- Nella sezione Suffisso ID app, seleziona ID app esplicito, quindi inserisci l'ID bundle.
- Nella sezione Servizi app, assicurati che l'opzione Notifiche push sia selezionata.
- Fai clic su Continua e verifica che l'input sia corretto:
- Il valore di Identifier deve corrispondere alla concatenazione dei valori di Team ID e Bundle ID
- Le notifiche push devono essere configurabili
- Fai clic su Registra per creare l'ID app.
Creare il profilo
Per testare l'app durante lo sviluppo, devi disporre di un profilo per lo sviluppo per autorizzare i tuoi dispositivi a eseguire un'app non ancora pubblicata sull'App Store.
- Vai al Centro membri di Apple Developer e accedi.
- Vai a Certificati, identificatori e profili.
- Nel menu a discesa nell'angolo in alto a sinistra, seleziona iOS, tvOS, watchOS se non è già selezionato, poi vai a Profili.
- Fai clic sul pulsante + per creare un nuovo profilo.
- Seleziona Sviluppo di app per iOS come tipo di profilo di provisioning, poi fai clic su Continua.
- Nel menu a discesa, seleziona l'ID app che vuoi utilizzare, poi fai clic su Continua.
- Seleziona il certificato di sviluppo iOS dell'ID app che hai scelto nel passaggio precedente, quindi fai clic su Continua.
- Seleziona i dispositivi iOS da includere nel profilo di provisioning, quindi fai clic su Continua. Assicurati di selezionare tutti i dispositivi che vuoi utilizzare per i test.
- Inserisci un nome per questo profilo di provisioning (ad es. MessagingExampleProfile), quindi fai clic su Genera.
- Fai clic su Scarica per salvare il profilo di provisioning sul tuo Mac.
- Fai doppio clic sul file del profilo di provisioning per installarlo.
4. Aggiungere Firebase al tuo progetto iOS
Crea un progetto Firebase
Prima di poter aggiungere Firebase alla tua app per iOS, devi creare un progetto Firebase a cui connetterti. Visita la pagina Informazioni sui progetti Firebase per saperne di più.
- Nella console Firebase, fai clic su Aggiungi progetto, quindi seleziona o inserisci un nome progetto.
Se hai un progetto Google Cloud Platform (GCP) esistente, puoi selezionarlo dal menu a discesa per aggiungere risorse Firebase.
- (Facoltativo) Se stai creando un nuovo progetto, puoi modificare l'ID progetto.
Firebase assegna automaticamente un ID univoco al tuo progetto Firebase. Visita la pagina Informazioni sui progetti Firebase per scoprire come Firebase utilizza l'ID progetto.
- Fai clic su Continua.
- Configura Google Analytics per il tuo progetto, in modo da avere un'esperienza ottimale utilizzando uno dei seguenti prodotti Firebase:
- Firebase Crashlytics
- Firebase Predictions
- Firebase Cloud Messaging
- Messaggistica in-app Firebase
- Firebase Remote Config
- Firebase A/B Testing
Quando ti viene chiesto, seleziona l'opzione per utilizzare un account Google Analytics esistente o per crearne uno nuovo. Se scegli di creare un nuovo account, seleziona la posizione dei report di Analytics, quindi accetta le impostazioni di condivisione dei dati e i termini di Google Analytics per il tuo progetto.
- Fai clic su Crea progetto (o Aggiungi Firebase, se utilizzi un progetto Google Cloud esistente).
Firebase esegue automaticamente il provisioning delle risorse per il tuo progetto Firebase. Al termine della procedura, verrà visualizzata la pagina Panoramica del progetto Firebase nella console Firebase.
Registrare l'app con Firebase
Non appena disponi di un progetto Firebase, puoi aggiungervi la tua app iOS.
Visita la pagina Informazioni sui progetti Firebase per scoprire di più sulle best practice e sulle considerazioni da fare per aggiungere app a un progetto Firebase, incluso come gestire più varianti di build.
- Vai alla console Firebase.
- Al centro della pagina di riepilogo del progetto, fai clic sull'icona iOS per avviare il flusso di lavoro della configurazione.
Se hai già aggiunto un'app al tuo progetto Firebase, fai clic su Aggiungi app per visualizzare le opzioni della piattaforma.
- Inserisci l'ID gruppo della tua app nel campo ID gruppo iOS.
- (Facoltativo) Inserisci altre informazioni sull'app: Nickname dell'app e ID App Store.
- Fai clic su Registra app.
Aggiungere un file di configurazione di Firebase
- Fai clic su Scarica GoogleService-Info.plist per ottenere il file di configurazione Firebase iOS (
GoogleService-Info.plist
). - Sposta il file di configurazione nella root del progetto Xcode. Se richiesto, seleziona l'opzione per aggiungere il file di configurazione a tutti i target.
Se nel tuo progetto sono presenti più ID bundle, devi associare ogni ID bundle a un'app registrata nella console Firebase in modo che ogni app possa avere il proprio file GoogleService-Info.plist
.
Chiudi Xcode.
Aggiungi gli SDK Firebase alla tua app
Ti consigliamo di utilizzare CocoaPods per installare le librerie Firebase. Tuttavia, se preferisci non utilizzare CocoaPods, puoi integrare direttamente i framework dell'SDK o utilizzare la versione beta di Swift Package Manager.
- Crea un Podfile se non ne hai già uno. Se utilizzi l'esempio di avvio rapido, il progetto Xcode e il Podfile (con i pod) sono già presenti.
$ cd MessagingExample $ pod init
- Al podfile, aggiungi i pod Firebase che vuoi utilizzare nella tua app.
Puoi aggiungere uno qualsiasi dei prodotti Firebase supportati alla tua app per iOS.
Nell'esempio di avvio rapido sono stati aggiunti gli SDK Google Analytics e Firebase Cloud Messaging.
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics' # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
- Installa i pod, quindi apri il file
.xcworkspace
per visualizzare il progetto in Xcode:
$ pod install
- Apri
MessagingExample.xcworkspace
e fai clic su Avanti nella console Firebase.
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 (nell'esempio di avvio rapido, il modulo Firebase è già importato).
- Importa il modulo Firebase nel tuo
UIApplicationDelegate
:
AppDelegate.swift
import UIKit
import Firebase // Add this line
- Configura un'istanza condivisa di FirebaseApp, in genere nel metodo
application:didFinishLaunchingWithOptions:
della tua app:
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // Add this line
return true
}
- Fai clic su Avanti nella console Firebase.
- Gli SDK Firebase vengono aggiunti alla tua app. Fai clic su Continua alla console.
5. Configurazione del client FCM
Caricare la chiave di autenticazione del servizio APN
Carica la chiave di autenticazione del servizio APN su Firebase.
- 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 nella sezione Configurazione dell'app Apple, fai clic sul pulsante Carica per caricare la chiave di autenticazione di sviluppo, la chiave di autenticazione di produzione o entrambe. È obbligatorio indicarne almeno uno.
- Sfoglia fino alla posizione in cui hai salvato la chiave, selezionala e fai clic su Apri. Aggiungi l'ID chiave (disponibile in Certificati, identificatori e profili nel Member Center di Apple Developer) e fai clic su Carica.
Registrarsi per le notifiche da remoto
All'avvio o nel punto desiderato del flusso dell'applicazione, registra l'app per le notifiche remote.
Nell'esempio di guida rapida, registerForRemoteNotifications
è già stato aggiunto.
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
Assegna la proprietà del delegato di UNUserNotificationCenter
aggiungendo queste righe alla fine di AppDelegate.swift.
AppDelegate.swift
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
// Print full message.
print(userInfo)
// Change this to your preferred presentation option
completionHandler([[.alert, .sound]])
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print full message.
print(userInfo)
completionHandler()
}
}
Impostare il delegato per i messaggi
Per ricevere i token di registrazione, implementa il protocollo di delega dei messaggi e imposta 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:
(nell'esempio di avvio rapido è già impostato).
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self // Add this line
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
Assegna la proprietà del delegato di FIRMessaging
aggiungendo queste righe alla fine di AppDelegate.swift.
AppDelegate.swift
extension AppDelegate : MessagingDelegate {
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)
}
}
Aggiungere funzionalità
Hai aggiunto la funzionalità Notifiche push nella sezione Crea un ID app, ma devi aggiungerla anche in Xcode seguendo questi passaggi (i passaggi riportati di seguito sono in Xcode 12.3):
- Fai clic sul nome del progetto nell'area di navigazione.
- Fai clic su Signing & Capabilities (Firma e funzionalità).
- Fai clic su + Funzionalità.
- Fai doppio clic su Modalità in background.
- Fai di nuovo clic su + Funzionalità.
- Fai doppio clic su Notifiche push.
- Controlla Notifiche da remoto nelle sezioni Modalità in background.
6. Inviare un messaggio di notifica
Per inviare un messaggio di prova, segui questi passaggi:
- Installa ed esegui l'app sul dispositivo di destinazione. Dovrai accettare la richiesta di autorizzazione per ricevere notifiche da remoto.
- Ottieni il token di registrazione nel log di Xcode.
- Assicurati che l'app sia in background sul dispositivo.
- Apri lo strumento di composizione delle notifiche e seleziona Nuova notifica.
- Inserisci il testo del messaggio.
- Seleziona Invia messaggio di prova.
- Nel campo etichettato Aggiungi un token di registrazione FCM, inserisci il token di registrazione ottenuto nel passaggio 2.
- Fai clic su Testa.
Dopo aver fatto clic su Test, il dispositivo client di destinazione (con l'app in background) dovrebbe ricevere la notifica nel centro notifiche.
Per informazioni sulla distribuzione dei messaggi alla tua app, consulta la dashboard dei report FCM, che registra il numero di messaggi inviati e aperti su dispositivi iOS e Android.
7. Complimenti
Congratulazioni, hai inviato correttamente un messaggio di test.
In FCM sono disponibili molte altre funzioni e configurazioni, ad esempio l'iscrizione agli argomenti.
Se ti interessano, consulta la documentazione ufficiale per sviluppatori.
Passaggi successivi
Dai un'occhiata ad alcuni di questi codelab.