Per scrivere l'app client Firebase Cloud Messaging multipiattaforma con Unity, utilizza l'API Firebase Cloud Messaging. L'SDK Unity funziona sia per Android che per Apple, con alcune configurazioni aggiuntive necessarie per ogni piattaforma.
Prima di iniziare
Prerequisiti
Installa Unity 2021 LTS o versioni successive. Il supporto di Unity 2020 è considerato ritirato e non sarà più supportato attivamente dopo la prossima release principale. Anche le versioni precedenti potrebbero essere compatibili, ma non saranno supportate attivamente.
(Solo piattaforme Apple) Installa quanto segue:
- Xcode 13.3.1 o versioni successive
- CocoaPods 1.12.0 o versioni successive
Assicurati che il progetto Unity soddisfi questi requisiti:
- Per iOS: target iOS 13 o versioni successive
- Per tvOS: target tvOS 13 o versioni successive
- Per Android: ha come target il livello API 21 (Lollipop) o versioni successive
Configura un dispositivo o utilizza un emulatore per eseguire il progetto Unity.
Per iOS o tvOS: configura un dispositivo fisico per eseguire la tua app e completa le seguenti attività:
- Ottieni una chiave di autenticazione delle notifiche push di Apple per il tuo account sviluppatore Apple.
- Attiva le notifiche push in XCode in App > Funzionalità.
Per Android: gli emulatori devono utilizzare un'immagine dell'emulatore con Google Play.
- Accedi a Firebase con il tuo Account Google.
Se non hai ancora un progetto Unity e vuoi solo provare un prodotto Firebase, puoi scaricare uno dei nostri esempi della guida rapida.
Passaggio 1: crea un progetto Firebase
Prima di poter aggiungere Firebase al tuo progetto Unity, devi creare un progetto Firebase da collegare al progetto Unity. Consulta Informazioni sui progetti Firebase per saperne di più sui progetti Firebase.
Passaggio 2: registra la tua app con Firebase
Puoi registrare una o più app o giochi da collegare al tuo progetto Firebase.
Vai alla console Firebase.
Al centro della pagina di riepilogo del progetto, fai clic sull'icona Unity (
) 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.
Seleziona la destinazione di build del tuo progetto Unity che vuoi registrare oppure puoi anche selezionare la registrazione di entrambe le destinazioni contemporaneamente.
Inserisci gli ID specifici della piattaforma del tuo progetto Unity.
Per iOS: inserisci l'ID iOS del tuo progetto Unity nel ID gruppo iOS.
Per Android: inserisci l'ID Android del progetto Unity nel campo Nome del pacchetto Android.
I termini nome del pacchetto e ID applicazione vengono spesso utilizzati in modo intercambiabile.
(Facoltativo) Inserisci i nickname specifici della piattaforma del tuo progetto Unity.
Questi nickname sono identificatori interni di praticità e sono visibili solo nella console Firebase.Fai clic su Registra app.
Passaggio 3: aggiungi i file di configurazione di Firebase
Ottieni i file di configurazione Firebase specifici della piattaforma nel Firebase flusso di lavoro di configurazione della console.
Per iOS: fai clic su Scarica GoogleService-Info.plist.
Per Android: fai clic su Scarica google-services.json.
Apri la finestra Project(Progetto) del progetto Unity, quindi sposta i file di configurazione nella cartella
Assets
.Torna nella console Firebase e, nel flusso di lavoro di configurazione, fai clic su Avanti.
Passaggio 4: aggiungi gli SDK Firebase Unity
Nella console Firebase, fai clic su Scarica SDK Firebase Unity, quindi decomprimi l'SDK in una posizione comoda.
Puoi scaricare di nuovo l'SDK Firebase Unity in qualsiasi momento.
L'SDK Firebase Unity non è specifico della piattaforma.
Nel tuo progetto Unity aperto, vai a Asset > Importa pacchetto > Pacchetto personalizzato.
Dall'SDK non compresso, seleziona i prodotti Firebase supportati che vuoi utilizzare nella tua app.
Per un'esperienza ottimale con Firebase Cloud Messaging, ti consigliamo di abilitare Google Analytics nel tuo progetto. Inoltre, durante la configurazione di Analytics, devi aggiungere il pacchetto Firebase per Analytics alla tua app.
Analytics abilitato
- Aggiungi il pacchetto Firebase per Google Analytics:
FirebaseAnalytics.unitypackage
- Aggiungi il pacchetto per Firebase Cloud Messaging:
FirebaseMessaging.unitypackage
Analytics non attivato
Aggiungi il pacchetto per Firebase Cloud Messaging:
FirebaseMessaging.unitypackage
- Aggiungi il pacchetto Firebase per Google Analytics:
Nella finestra Import Unity Package (Importa il pacchetto Unity), fai clic su Import (Importa).
Torna nella console Firebase e, nel flusso di lavoro di configurazione, fai clic su Avanti.
Passaggio 5: verifica i requisiti della versione di Google Play Services
L'SDK Firebase Unity per Android richiede Google Play services, che deve essere aggiornato prima che l'SDK possa essere utilizzato.
Aggiungi la seguente dichiarazione using
e il codice di inizializzazione all'inizio della
applicazione. Puoi verificare e, facoltativamente, aggiornare Google Play services alla versione richiesta dall'SDK Firebase Unity prima di chiamare altri metodi nell'SDK.
using Firebase.Extensions;
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
// Create and hold a reference to your FirebaseApp,
// where app is a Firebase.FirebaseApp property of your application class.
app = Firebase.FirebaseApp.DefaultInstance;
// Set a flag here to indicate whether Firebase is ready to use by your app.
} else {
UnityEngine.Debug.LogError(System.String.Format(
"Could not resolve all Firebase dependencies: {0}", dependencyStatus));
// Firebase Unity SDK is not safe to use here.
}
});
Il progetto Unity è registrato e configurato per l'utilizzo di Firebase.
Carica la chiave di autenticazione del servizio APN per l'assistenza Apple
Carica la chiave di autenticazione del servizio APN su Firebase. Se non hai già una chiave di autenticazione APNs, assicurati di crearne una nel Centro per gli sviluppatori Apple.
-
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 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 per la chiave (disponibile nel Centro membri Apple Developer) e fai clic su Carica.
Attivare le notifiche push sulle piattaforme Apple
Passaggio 1: aggiungi il framework di notifiche per gli utenti
Fai clic sul progetto in Xcode, quindi seleziona la scheda Generale dall'area Editor.
Scorri verso il basso fino a Framework e librerie collegate e poi fai clic sul pulsante + per aggiungere un framework.
Nella finestra visualizzata, scorri fino a UserNotifications.framework, fai clic su quella voce e poi su Aggiungi.
Passaggio 2: attiva le notifiche push
Fai clic sul progetto in Xcode, quindi seleziona la scheda Funzionalità dall'area di modifica.
Imposta Notifiche push su On.
Scorri verso il basso fino a Modalità in background, quindi imposta l'opzione su On.
Seleziona la casella di controllo Notifiche remote in Modalità in background.
Inizializza Firebase Cloud Messaging
La libreria Firebase Cloud Messaging verrà inizializzata quando aggiungi gestori per gli eventi TokenReceived
o MessageReceived
.
All'inizializzazione, viene richiesto un token di registrazione per l'istanza dell'app client. L'app riceverà il token con l'evento OnTokenReceived
,
che deve essere memorizzato nella cache per un uso successivo. Ti servirà questo
token se vuoi scegliere come target questo dispositivo specifico per i messaggi.
Inoltre, dovrai registrarti per l'evento OnMessageReceived
se
vuoi poter ricevere messaggi in arrivo.
L'intera configurazione ha il seguente aspetto:
public void Start() { Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; } public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) { UnityEngine.Debug.Log("Received Registration Token: " + token.Token); } public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) { UnityEngine.Debug.Log("Received a new message from: " + e.Message.From); }
Configurazione di un'attività entry point Android
Su Android, Firebase Cloud Messaging è fornito in bundle con un'attività di punto di contatto personalizzato che sostituisce UnityPlayerActivity
predefinito. Se non utilizzi un punto di contatto personalizzato, la sostituzione avviene automaticamente e non devi intraprendere alcuna azione aggiuntiva. Le app che non utilizzano il punto di contatto predefinito Activity o che forniscono il proprio Assets/Plugins/AndroidManifest.xml
richiedono una configurazione aggiuntiva.
Il Firebase Cloud Messaging plug-in Unity su Android è fornito in bundle con due file aggiuntivi:
Assets/Plugins/Android/libmessaging_unity_player_activity.jar
contiene un'attività chiamataMessagingUnityPlayerActivity
che sostituisceUnityPlayerActivity
standard.Assets/Plugins/Android/AndroidManifest.xml
indica all'app di utilizzareMessagingUnityPlayerActivity
come punto di contatto dell'app.
Questi file vengono forniti perché UnityPlayerActivity
predefinito non gestisse le transizioni del ciclo di vita delle attività onStop
e onRestart
o non implementava onNewIntent
, necessario per consentire a Firebase Cloud Messaging di gestire correttamente i messaggi in arrivo.
Configurazione di un'attività punto di contatto personalizzato
Se la tua app non utilizza il valore UnityPlayerActivity
predefinito, dovrai rimuovere il valore AndroidManifest.xml
fornito e assicurarti che l'attività personalizzata gestisca correttamente tutte le transizioni del ciclo di vita dell'attività Android (un esempio di come eseguire questa operazione è mostrato di seguito). Se la tua attività personalizzata estende UnityPlayerActivity
, puoi estendere com.google.firebase.MessagingUnityPlayerActivity
, che implementa tutti i metodi necessari.
Se utilizzi un'attività personalizzata e non espandi com.google.firebase.MessagingUnityPlayerActivity
, devi includere i seguenti snippet nella tua attività.
/** * Workaround for when a message is sent containing both a Data and Notification payload. * * When the app is in the background, if a message with both a data and notification payload is * received the data payload is stored on the Intent passed to onNewIntent. By default, that * intent does not get set as the Intent that started the app, so when the app comes back online * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so * that it sends the intent to the MessageForwardingService which forwards the message to the * FirebaseMessagingService which in turn sends the message to the application. */ @Override protected void onNewIntent(Intent intent) { Intent message = new Intent(this, MessageForwardingService.class); message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT); message.putExtras(intent); message.setData(intent.getData()); // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`. // startService(message); MessageForwardingService.enqueueWork(this, message); } /** * Dispose of the mUnityPlayer when restarting the app. * * This ensures that when the app starts up again it does not start with stale data. */ @Override protected void onCreate(Bundle savedInstanceState) { if (mUnityPlayer != null) { mUnityPlayer.quit(); mUnityPlayer = null; } super.onCreate(savedInstanceState); }
Le nuove versioni dell'SDK Firebase C++ (dalla 7.1.0 in poi) utilizzano JobIntentService
, che richiede modifiche aggiuntive nel file AndroidManifest.xml
.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" > </service>
Nota sulla consegna dei messaggi su Android
Quando l'app non è in esecuzione e un utente tocca una notifica, per impostazione predefinita il messaggio non viene inoltrato tramite i callback integrati di FCM. In questo caso, i payload dei messaggi vengono ricevuti tramite un Intent
utilizzato per avviare l'applicazione.
I messaggi ricevuti quando l'app è in background hanno i contenuti del loro campo di notifica utilizzati per compilare la notifica della barra delle app, ma questi contenuti non verranno comunicati a FCM. In altre parole,
FirebaseMessage.Notification
sarà un valore nullo.
In sintesi:
Stato dell'app | Notifica | Dati | Entrambe |
---|---|---|---|
Primo piano | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
Contesto | Barra delle app | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Notifica: riquadro delle app Dati: negli extra dell'intent. |
Impedire l'inizializzazione automatica
FCM genera un token di registrazione per il targeting per dispositivo.
Quando viene generato un token, la libreria carica su Firebase i dati di configurazione e dell'identificatore. Se vuoi ottenere un'attivazione esplicita prima di utilizzare il token, puoi impedirne la generazione al momento della configurazione disattivando FCM (e Analytics su Android). Per farlo, aggiungi un valore dei metadati al tuo Info.plist
(non al tuo GoogleService-Info.plist
) su Apple o al tuo AndroidManifest.xml
su Android:
Android
<?xml version="1.0" encoding="utf-8"?> <application> <meta-data android:name="firebase_messaging_auto_init_enabled" android:value="false" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="false" /> </application>
Swift
FirebaseMessagingAutoInitEnabled = NO
Per riattivare FCM, puoi effettuare una chiamata di runtime:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
Una volta impostato, questo valore rimane invariato dopo i riavvii dell'app.
Gestione di Messaggi con link diretti su Android
FCM consente di inviare messaggi contenenti un link diretto alla tua app. Per ricevere messaggi contenenti un link diretto, devi aggiungere un nuovo filtro per intent all'attività che gestisce i link diretti per la tua app. Il filtro per intent deve rilevare i link diretti del tuo dominio. Se i tuoi messaggi non contengono un link diretto, questa configurazione non è necessaria. In AndroidManifest.xml:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/> </intent-filter>
È anche possibile specificare un carattere jolly per rendere più flessibile il filtro degli intent. Ad esempio:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="*.example.com" android:scheme="http"/> <data android:host="*.example.com" android:scheme="https"/> </intent-filter>
Quando gli utenti toccano una notifica contenente un link allo schema e all'host specificati, la tua app avvia l'attività con questo filtro per intent per gestire il link.
Passaggi successivi
Dopo aver configurato l'app client, puoi inviare messaggi di downstream e di argomento con Firebase. Per saperne di più, consulta il codice di avvio rapido che mostra questa funzionalità.
Per aggiungere altri comportamenti più avanzati alla tua app, consulta le guide per l'invio di messaggi da un server app:
Tieni presente che per utilizzare queste funzionalità è necessaria un'implementazione del server.