1. Introduzione
Ultimo aggiornamento: 2020-1-6
Firebase Cloud Messaging (FCM) è una soluzione di messaggistica multipiattaforma che consente di inviare messaggi in modo affidabile senza costi.
Con FCM puoi notificare a un'app client che sono disponibili nuove email o altri dati per la sincronizzazione. Puoi inviare messaggi di notifica per favorire il ricoinvolgimento e la fidelizzazione degli utenti. Per casi d'uso come la messaggistica immediata, un messaggio può trasferire un payload fino a 4 kB a un'app client.
Come funziona?
L'implementazione di FCM include due componenti principali per l'invio e la ricezione:
- Un ambiente affidabile come Cloud Functions for Firebase o un server di app su cui creare, scegliere come target e inviare messaggi.
- Un'app client per iOS, Android o web (JavaScript) che riceve messaggi tramite il servizio di trasporto specifico della piattaforma corrispondente.
Panoramica dell'architettura FCM
FCM si basa sul seguente insieme di componenti che creano, trasportano e ricevono messaggi:
- Strumenti per scrivere o creare richieste di messaggi. Notifications Composer fornisce un'opzione basata su GUI per la creazione di richieste di notifica. Per un'automazione completa e un supporto completo per tutti i tipi di messaggi, devi creare richieste di messaggi in un ambiente server attendibile che supporti l'SDK Admin Firebase o i protocolli server FCM. Potrebbe essere l'ambiente Cloud Functions for Firebase, Google App Engine o il tuo server di app.
- Il backend FCM, che (tra le altre funzioni) accetta richieste di messaggi, esegue il fanout dei messaggi tramite gli argomenti e genera metadati dei messaggi come l'ID messaggio.
- Un livello di trasporto a livello di piattaforma, che instrada il messaggio al dispositivo target, gestisce il recapito dei messaggi e applica la configurazione specifica della piattaforma, ove appropriato. Questo livello di trasporto include:
- Android Transport Layer (ATL) per dispositivi Android con Google Play Services
- Servizio di notifiche push di Apple (APN) per dispositivi iOS
- Protocollo push web per app web
- L'SDK FCM sul dispositivo dell'utente su cui viene visualizzata la notifica o il messaggio viene gestito in base allo stato in primo piano/in background dell'app e a qualsiasi logica dell'applicazione pertinente.
Cosa creerai
In questo codelab, aggiungerai una notifica 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 per eseguire la tua app
- Conoscenza di base di Swift
2. Preparazione
Scarica il codice campione
In questo codelab, creerai la tua app di test, ma se vuoi vedere ed eseguire l'app di esempio esistente, puoi scaricare il codice di esempio della guida rapida.
Esistono due modi per ottenere l'esempio:
- Clona il repository Git:
$ git clone https://github.com/firebase/quickstart-ios.git
- Scarica il file ZIP:
Se scarichi l'origine come file ZIP, decomprimerai il file per ottenere una cartella principale quickstart-ios
.
Creare una nuova app
Crea la tua app di test seguendo questa procedura (i passaggi seguenti sono in XCode 12.3):
- Apri XCode e seleziona Create a new Xcode project (Crea nuovo progetto Xcode).
- Seleziona App e fai clic su Avanti.
- Inserisci il Nome del prodotto (ad es. MessagingExample)
- Seleziona Team (se non hai creato il team, configuralo nell'account sviluppatore Apple).
- Inserisci l'identificatore dell'organizzazione (ad es.
com.
your-name
) - Inserisci un identificatore bundle (ad es.
com.
your-name
.MessagingExample
, deve essere univoca tra tutte le app per iOS). - Seleziona Storyboard dal menu a discesa Interfaccia.
- Seleziona Delega app UIKit nel menu a discesa Ciclo di vita.
- Seleziona Swift in Lingua.
- Fai clic su Avanti.
L'identificatore pacchetto ti servirà quando crei una chiave APN e registri l'app nel tuo progetto Firebase.
3. Configurazione degli APN
Crea la chiave di autenticazione
Questa sezione descrive come generare una chiave di autenticazione per un ID app abilitato per le notifiche push. Se hai già una chiave, puoi utilizzarla invece di generarne una nuova.
Per creare una chiave di autenticazione:
- Nel tuo account sviluppatore, vai a Certificati, identificatori e Profili e vai a 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 chiave, seleziona la casella di controllo APN e fai clic su Continua.
- Fai clic su Registrati, quindi su Scarica. Salva il token in un luogo sicuro. Si tratta di un download singolo 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 all'Apple Developer Member Center 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 il tuo 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 e inserisci l'ID pacchetto.
- Nella sezione Servizi app, assicurati che l'opzione Notifiche push sia selezionata.
- Fai clic su Continua e verifica che i dati inseriti siano corretti:
- Il valore dell'identificatore deve corrispondere alla concatenazione dei valori dell'ID team e dell'ID pacchetto
- Le notifiche push devono essere configurabili
- Fai clic su Registra per creare l'ID app.
Crea il profilo
Per testare la tua app in fase di sviluppo, devi avere un profilo per lo sviluppo in modo da autorizzare i tuoi dispositivi a eseguire un'app non ancora pubblicata sull'App Store.
- Vai all'Apple Developer Member Center 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, quindi vai a Profili.
- Fai clic sul pulsante + per creare un nuovo profilo.
- Seleziona Sviluppo di app iOS come tipo di profilo di provisioning, quindi fai clic su Continua.
- Nel menu a discesa, seleziona l'ID app che vuoi utilizzare e 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) e poi 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. Aggiunta di Firebase al progetto iOS in corso...
Creare un progetto Firebase
Prima di poter aggiungere Firebase alla tua app per iOS, devi creare un progetto Firebase da collegare all'app per iOS. Per saperne di più sui progetti Firebase, consulta Informazioni sui progetti Firebase.
- Nella console Firebase, fai clic su Aggiungi progetto, quindi seleziona o inserisci un Nome progetto.
Se hai già un progetto Google Cloud Platform (Google Cloud), puoi selezionarlo dal menu a discesa per aggiungere risorse Firebase al progetto.
- (Facoltativo) Se stai creando un nuovo progetto, puoi modificare l'ID progetto.
Firebase assegna automaticamente un ID univoco al tuo progetto Firebase. Visita Comprendere i 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 qualsiasi dei seguenti prodotti Firebase:
- Firebase Crashlytics
- Firebase Predictions
- Firebase Cloud Messaging
- Messaggistica in-app Firebase
- Firebase Remote Config
- Firebase A/B Testing
Quando richiesto, scegli se utilizzare un account Google Analytics esistente o crearne uno nuovo. Se scegli di creare un nuovo account, seleziona la posizione dei report di Analytics e poi accetta le impostazioni di condivisione dei dati e i termini di Google Analytics per il tuo progetto.
- Fai clic su Crea progetto (o su Aggiungi Firebase, se utilizzi un progetto della piattaforma Google Cloud esistente).
Firebase esegue automaticamente il provisioning delle risorse per il tuo progetto Firebase. Al termine del processo, verrà visualizzata la pagina Panoramica del progetto Firebase nella console Firebase.
Registrare l'app in Firebase
Dopo aver creato un progetto Firebase, puoi aggiungere la tua app per iOS.
Visita la pagina Informazioni sui progetti Firebase per scoprire di più sulle best practice e le considerazioni per aggiungere app a un progetto Firebase, incluso come gestire più varianti della build.
- Vai alla console Firebase.
- Al centro della pagina di panoramica del progetto, fai clic sull'icona iOS per avviare il flusso di lavoro di 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 pacchetto dell'app nel campo ID pacchetto iOS.
- (Facoltativo) Inserisci altre informazioni sull'app: Nickname app e ID App Store.
- Fai clic su Registra app.
Aggiungere un file di configurazione Firebase
- Fai clic su Scarica GoogleService-Info.plist per recuperare il file di configurazione Firebase per iOS (
GoogleService-Info.plist
). - Sposta il file di configurazione nella radice del progetto Xcode. Se richiesto, scegli di aggiungere il file di configurazione a tutti i target.
Se nel progetto sono presenti più ID pacchetto, devi associare ciascuno di essi 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 della guida rapida, il progetto Xcode e il podfile (con pod) sono già presenti.
$ cd MessagingExample $ pod init
- Al podfile, aggiungi i pod Firebase che vuoi utilizzare nell'app.
Puoi aggiungere uno qualsiasi dei prodotti Firebase supportati alla tua app per iOS.
Nell'esempio della guida rapida, 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 vedere il progetto in Xcode:
$ pod install
- Apri
MessagingExample.xcworkspace
e fai clic su Avanti nella console Firebase.
Inizializza Firebase nella tua app
Devi aggiungere il codice di inizializzazione di Firebase alla tua applicazione.
Importa il modulo Firebase e configura un'istanza condivisa (nell'esempio della guida rapida, il modulo Firebase è già importato).
- Importa il modulo Firebase in
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 Vai alla console.
5. Configurazione del client FCM
Carica la chiave di autenticazione del servizio APN
Carica la chiave di autenticazione del servizio APN in Firebase.
- All'interno del progetto nella console Firebase, seleziona l'icona a forma di ingranaggio, seleziona Impostazioni progetto e poi la scheda Cloud Messaging.
- Nella sezione Chiave di autenticazione del servizio APN in Configurazione app per iOS, fai clic sul pulsante Carica.
- Vai alla posizione in cui hai salvato la chiave, selezionala e fai clic su Apri. Aggiungi l'ID chiave della chiave (disponibile in Certificati, identificatori e profili nell'Apple Developer Member Center) e fai clic su Upload (Carica).
Registrarsi per ricevere notifiche remote
Registra la tua app per le notifiche remote all'avvio o nel punto desiderato del flusso dell'applicazione.
Nell'esempio della 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à delegato di UNUserNotificationCenter
aggiungendo queste righe alla fine del comando 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 la messaggistica
Per ricevere i token di registrazione, implementa il protocollo di delega della messaggistica e imposta la proprietà delegate
di FIRMessaging
dopo aver chiamato [FIRApp configure]
. Ad esempio, se il delegato dell'applicazione è conforme al protocollo del delegato della messaggistica, puoi impostare il delegato su application:didFinishLaunchingWithOptions:
su se stesso (nell'esempio della guida rapida è 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à delegato di FIRMessaging
aggiungendo queste righe alla fine del comando 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)
}
}
Aggiungi funzionalità
Hai aggiunto la funzionalità Notifiche push nella sezione Create an App ID (Crea un ID app), ma devi aggiungerla anche su XCode seguendo i passaggi (i passaggi seguenti sono in XCode 12.3):
- Fai clic sul nome del progetto nell'area di navigazione.
- Fai clic su Accesso e Funzionalità.
- Fai clic su + Capacità.
- Fai doppio clic su Modalità background.
- Fai di nuovo clic su + Capacità.
- Fai doppio clic su Notifiche push.
- Seleziona Notifiche remote nelle sezioni Modalità background.
6. Invia un messaggio di notifica
Per inviare un messaggio di prova:
- Installa ed esegui l'app sul dispositivo di destinazione. Per ricevere notifiche remote, dovrai accettare la richiesta.
- Ottieni il token di registrazione nel log XCode.
- Assicurati che l'app sia in background sul dispositivo.
- Apri Composer delle notifiche e seleziona Nuova notifica.
- Inserisci il testo del messaggio.
- Seleziona Invia messaggio di prova.
- Nel campo Aggiungi un token di registrazione FCM, inserisci il token di registrazione che hai ottenuto nel passaggio 2.
- Fai clic su Testa.
Dopo aver fatto clic su Test, il dispositivo client target (con l'app in background) dovrebbe ricevere la notifica nel centro notifiche.
Per informazioni sul recapito dei messaggi alla tua app, vedi la dashboard dei report FCM, in cui viene registrato il numero di messaggi inviati e aperti sui dispositivi iOS e Android.
7. Complimenti
Congratulazioni, hai inviato correttamente un messaggio di prova.
FCM offre molte altre funzioni e configurazioni, ad esempio la sottoscrizione agli argomenti.
Se ti interessano, consulta il documento ufficiale per gli sviluppatori.
Passaggi successivi
Dai un'occhiata ad alcuni di questi codelab.