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 richieste per ogni piattaforma.
Prima di iniziare
Prerequisiti
Installa Unity 2021 LTS o versioni successive. Il supporto di Unity 2020 è considerato deprecato 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 tuo progetto Unity soddisfi questi requisiti:
- Per iOS: ha come target iOS 13 o versioni successive
- Per tvOS: ha come 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 queste attività:
- Ottieni una chiave di autenticazione del servizio di 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 utilizzando il tuo Account Google.
Se non hai ancora un progetto Unity e vuoi solo provare un prodotto Firebase, puoi scaricare uno dei nostri esempi di avvio rapido.
Passaggio 1: crea un progetto Firebase
Prima di poter aggiungere Firebase al tuo progetto Unity, devi creare un progetto Firebase a cui connetterti. Visita la pagina 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 connettere 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 progetto Unity che vuoi registrare oppure puoi selezionare la registrazione di entrambe le destinazioni contemporaneamente.
Inserisci gli ID specifici per la piattaforma del tuo progetto Unity.
Per iOS: inserisci l'ID iOS del tuo progetto Unity nel campo ID bundle iOS.
Per Android: inserisci l'ID Android del tuo progetto Unity nel campo Nome pacchetto Android.
I termini nome del pacchetto e ID applicazione vengono spesso utilizzati in modo intercambiabile.
(Facoltativo) Inserisci i nickname specifici per la piattaforma del tuo progetto Unity.
Questi nickname sono identificatori interni e pratici e sono visibili solo a te nella console Firebase.Fai clic su Registra app.
Passaggio 3: aggiungi i file di configurazione di Firebase
Ottieni i file di configurazione di Firebase specifici per la piattaforma nel flusso di lavoro di configurazione della console Firebase.
Per iOS: fai clic su Scarica GoogleService-Info.plist.
Per Android: fai clic su Scarica google-services.json.
Apri la finestra Progetto del tuo progetto Unity, quindi sposta i file di configurazione nella cartella
Assets
.Nella console Firebase, nel flusso di lavoro di configurazione, fai clic su Avanti.
Passaggio 4: aggiungi gli SDK Firebase Unity
Nella console Firebase, fai clic su Scarica Firebase Unity SDK, 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 Assets > Import Package > Custom Package (Risorse > 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, nell'ambito della 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 abilitato
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).
Nella console Firebase, nel flusso di lavoro di configurazione, fai clic su Avanti.
Passaggio 5: conferma i requisiti della versione di Google Play Services
Alcuni prodotti dell'SDK Firebase Unity per Android richiedono Google Play services. Scopri quali prodotti hanno questa dipendenza. Google Play services deve essere aggiornato prima di poter utilizzare questi prodotti.
Aggiungi la seguente istruzione using
e il codice di inizializzazione all'inizio dell'applicazione. Puoi controllare e, se vuoi, aggiornare Google Play services alla
versione richiesta 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 tuo progetto Unity è registrato e configurato per utilizzare 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 ancora una chiave di autenticazione APNs, assicurati di crearne una nel Centro membri 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 APN nella sezione Configurazione app iOS, fai clic sul pulsante Carica.
-
Sfoglia fino alla posizione in cui hai salvato la chiave, selezionala e fai clic su Apri. Aggiungi l'ID chiave (disponibile nel Developer Member Center di Apple) e fai clic su Carica.
Attivare le notifiche push sulle piattaforme Apple
Passaggio 1: aggiungi il framework delle notifiche utente
Fai clic sul progetto in Xcode, quindi seleziona la scheda Generale dall'area Editor.
Scorri verso il basso fino a Framework e librerie collegati, poi fai clic sul pulsante + per aggiungere un framework.
Nella finestra visualizzata, scorri fino a UserNotifications.framework, fai clic su questa voce e poi su Aggiungi.
Passaggio 2: attiva le notifiche push
Fai clic sul progetto in Xcode, poi seleziona la scheda Funzionalità dall'area Editor.
Imposta l'opzione Notifiche push su On.
Scorri verso il basso fino a Modalità in background, quindi attiva l'opzione On.
Seleziona la casella di controllo Notifiche da remoto in Modalità in background.
Inizializza Firebase Cloud Messaging
La libreria Firebase Cloud Messaging verrà inizializzata quando aggiungi gestori
per gli eventi TokenReceived
o MessageReceived
.
Al momento dell'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 utilizzo successivo. Avrai bisogno di questo
token se vuoi scegliere come target questo dispositivo specifico per i messaggi.
Inoltre, dovrai registrarti all'evento OnMessageReceived
se
vuoi poter ricevere messaggi in arrivo.
L'intera configurazione ha questo 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à di entry point Android
Su Android, Firebase Cloud Messaging viene fornito in bundle con un'attività di punto di ingresso personalizzato
che sostituisce l'attività UnityPlayerActivity
predefinita. Se non utilizzi
un punto di accesso personalizzato, questa sostituzione avviene automaticamente e non devi
intraprendere ulteriori azioni. Le app che non utilizzano l'attività punto di ingresso predefinita o che forniscono il proprio Assets/Plugins/AndroidManifest.xml
richiedono una configurazione aggiuntiva.
Il plug-in Unity Firebase Cloud Messaging su Android viene fornito in bundle con due file aggiuntivi:
Assets/Plugins/Android/libmessaging_unity_player_activity.jar
contiene un'attività chiamataMessagingUnityPlayerActivity
che sostituisce l'attività standardUnityPlayerActivity
.Assets/Plugins/Android/AndroidManifest.xml
indica all'app di utilizzareMessagingUnityPlayerActivity
come punto di accesso all'app.
Questi file vengono forniti perché UnityPlayerActivity
predefinito non
gestisce le transizioni del ciclo di vita dell'attività onStop
, onRestart
o implementa
onNewIntent
, necessario per Firebase Cloud Messaging per gestire correttamente
i messaggi in arrivo.
Configurazione di un'attività di punto di ingresso personalizzata
Se la tua app non utilizza UnityPlayerActivity
predefinito, dovrai
rimuovere AndroidManifest.xml
fornito e assicurarti che la tua attività personalizzata
gestisca correttamente tutte le transizioni del
ciclo di vita dell'attività Android
(di seguito è riportato un esempio di come farlo). Se la tua attività personalizzata estende UnityPlayerActivity
, puoi invece estendere com.google.firebase.MessagingUnityPlayerActivity
, che implementa tutti i metodi necessari.
Se utilizzi un'attività personalizzata e non estendi
com.google.firebase.MessagingUnityPlayerActivity
, devi includere i
seguenti snippet nell'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++ (7.1.0 e successive) 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="true" > </service>
Nota sulla consegna dei messaggi su Android
Quando l'app non è in esecuzione e un utente tocca una notifica,
il messaggio non viene instradato per impostazione predefinita tramite i callback
integrati di FCM. In questo caso, i payload dei messaggi vengono ricevuti tramite un intent Intent
utilizzato per avviare l'applicazione.
I messaggi ricevuti mentre l'app è in background utilizzano il contenuto
del campo di notifica per popolare la notifica della barra delle applicazioni, ma
il contenuto della notifica non verrà comunicato a FCM. ovvero 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 applicazioni | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Notifica: barra delle notifiche Dati: negli extra dell'intent. |
Impedisci l'inizializzazione automatica
FCM genera un token di registrazione per il targeting dei dispositivi.
Quando viene generato un token, la libreria carica
l'identificatore e i dati di configurazione su Firebase. Se vuoi ottenere un consenso
esplicito prima di utilizzare il token, puoi impedire la generazione al momento della configurazione
disattivando FCM (e su Android, Analytics). 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 viene mantenuto anche dopo il riavvio dell'app.
Gestione dei messaggi con link diretti su Android
FCM consente l'invio di 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 intercettare 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 per 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 che specifichi, 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 downstream e per argomento con Firebase. Per saperne di più, consulta l'esempio di avvio rapido che illustra 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 lato server.