Configura un'app client Firebase Cloud Messaging con Unity

Per scrivere il cross-platform Firebase cloud di messaggistica applicazione client con Unity, utilizzare la Firebase cloud Messaging API. L'SDK di Unity funziona sia per Android che per iOS, con alcune configurazioni aggiuntive richieste per ogni piattaforma.

Prima di iniziare

Prerequisiti

  • Installa Unity 2017.4 o successivo. Anche le versioni precedenti potrebbero essere compatibili, ma non saranno supportate attivamente.

  • (solo iOS) installare quanto segue:

    • Xcode 9.4.1 o successivo
    • CocoaPods 1.10.0 o superiore
  • Assicurati che il tuo progetto Unity soddisfi questi requisiti:

    • Per iOS - si rivolge iOS 10 o superiore
    • Per Android - livello target di API 16 (Jelly Bean) o superiore

  • Configura un dispositivo o usa un emulatore per eseguire il tuo progetto Unity.

    • Per iOS - Configurare 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à.
    • Per Android - Emulatori deve usare un'immagine emulatore con Google Play.

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

Passaggio 1: crea un progetto Firebase

Prima di poter aggiungere Firebase al tuo progetto Unity, devi creare un progetto Firebase per connetterti al tuo progetto Unity. Visita Capire Firebase progetti per saperne di più su progetti Firebase.

Passaggio 2: registra la tua app con Firebase

Puoi registrare una o più app o giochi per connetterti al tuo progetto Firebase.

  1. Vai alla console Firebase .

  2. Al centro della pagina panoramica del progetto, fare clic sull'icona Unità ( ) 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. Seleziona quale target di build del tuo progetto Unity desideri registrare, oppure puoi anche scegliere di registrare entrambi i target contemporaneamente.

  4. Inserisci gli ID specifici della piattaforma del tuo progetto Unity.

    • Per iOS - Inserire del progetto Unity iOS ID nel fascio ID iOS campo.

    • Per Android - Inserire del progetto Unity Android ID nel nome del pacchetto Android campo.
      Il nome del pacchetto termini e ID applicazione sono spesso usati come sinonimi.

  5. (Facoltativo) Immettere soprannome specifico per la piattaforma del progetto Unity (s).
    Questi soprannomi sono identificatori interni di convenienza e sono visibili solo a te nella console Firebase.

  6. Fare clic su Registra app.

Passaggio 3: aggiungi i file di configurazione di Firebase

  1. Ottieni i file di configurazione Firebase specifici della piattaforma nel flusso di lavoro di configurazione della console Firebase.

    • Per iOS - Fare clic su Scarica GoogleService-Info.plist.

    • Per Android - Fare clic su Download google-services.json.

  2. Aprire la finestra del progetto del progetto Unity, quindi spostare il file di configurazione (s) nella Assets cartella.

  3. Torna nella console Firebase, nel flusso di lavoro di installazione, fare clic su Avanti.

Passaggio 4: aggiungi gli SDK di Firebase Unity

  1. Nella console Firebase, fare clic su Download Firebase Unità SDK, quindi decomprimere l'SDK posto comodo.

    • È possibile scaricare il Firebase Unity SDK di nuovo in qualsiasi momento.

    • L'SDK di Firebase Unity non è specifico della piattaforma.

  2. Nel progetto aperto Unità, navigare ad Attività> Importa pacchetto> pacchetto personalizzato.

  3. Dal SDK decompresso, selezionare i prodotti Firebase supportati che si desidera utilizzare nella vostra applicazione.

    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 il pacchetto Firebase per Analytics alla tua app.

    Analitica abilitata

    • Aggiungere il pacchetto Firebase per Google Analytics: FirebaseAnalytics.unitypackage
    • Aggiungere il pacchetto per Firebase cloud Messaging: FirebaseMessaging.unitypackage

    Analitica non abilitata

    Aggiungere il pacchetto per Firebase cloud Messaging: FirebaseMessaging.unitypackage

  4. Nella finestra Importa Unità Package, fare clic su Importa.

  5. Torna nella console Firebase, nel flusso di lavoro di installazione, fare clic su Avanti.

Passaggio 5: conferma i requisiti della versione dei servizi di Google Play

Il Firebase Unity SDK per Android richiede Google Play Services , che devono essere up-to-date prima che l'SDK può essere utilizzato.

Aggiungi il seguente codice all'inizio della tua applicazione. Puoi verificare e, facoltativamente, aggiornare i servizi di Google Play alla versione richiesta dall'SDK di Firebase Unity prima di chiamare qualsiasi altro metodo nell'SDK.

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(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.

Passaggio 7: aggiungi il framework delle notifiche utente

  1. Fare clic sul progetto in Xcode, quindi selezionare la scheda Generale dalla zona Editor.

  2. Scorrere verso il basso per Linked quadri e biblioteche, quindi fare clic sul pulsante + per aggiungere un quadro.

  3. Nella finestra che appare, scorrere fino a UserNotifications.framework, fare clic su quella voce, quindi fare clic su Aggiungi.

Passaggio 8: abilita le notifiche push

  1. Fare clic sul progetto in Xcode, quindi selezionare la scheda Funzionalità dall'area Editor.

  2. Passare Notifiche Push On.

  3. Scorrere verso il basso per sfondo modalità, quindi passare a On.

  4. Selezionare la casella di controllo notifiche remote in modalità Background.

Inizializza Firebase Cloud Messaging

La biblioteca Firebase nube messaggio verrà inizializzato quando si aggiungono i gestori sia per la TokenReceived o MessageReceived eventi.

Al momento dell'inizializzazione, viene richiesto un token di registrazione per l'istanza dell'app client. L'applicazione riceverà il token con il OnTokenReceived evento, che dovrebbe essere memorizzato nella cache per un uso successivo. Avrai bisogno di questo token se desideri indirizzare i messaggi a questo dispositivo specifico.

Inoltre, è necessario registrarsi al OnMessageReceived evento se si vuole essere in grado di ricevere i messaggi in arrivo.

L'intera configurazione è simile a questa:

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 punto di ingresso Android Attività

Su Android, Firebase Nuvola Messaging viene fornito in bundle con un'attività punto di ingresso personalizzato che sostituisce il default UnityPlayerActivity . Se non stai utilizzando un punto di ingresso personalizzato, questa sostituzione avviene automaticamente e non dovresti intraprendere alcuna azione aggiuntiva. Le applicazioni che non utilizzano il punto di ingresso di default o di attività che l'offerta i propri Assets/Plugins/AndroidManifest.xml avranno bisogno di configurazione aggiuntiva.

Il plugin Firebase Cloud Messaging Unity su Android viene fornito in bundle con due file aggiuntivi:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar contiene un'attività chiamata MessagingUnityPlayerActivity che sostituisce lo standard UnityPlayerActivity .
  • Assets/Plugins/Android/AndroidManifest.xml incarica all'applicazione di utilizzare MessagingUnityPlayerActivity come punto di ingresso per l'applicazione.

Questi file sono forniti in quanto il difetto UnityPlayerActivity non gestisce onStop , onRestart attività transizioni del ciclo di vita o di implementare onNewIntent che è necessario per Firebase cloud di messaggistica per gestire correttamente i messaggi in arrivo.

Configurazione di un punto di ingresso personalizzato Attività

Se la vostra applicazione non utilizza l'impostazione predefinita UnityPlayerActivity è necessario rimuovere la dotazione AndroidManifest.xml e garantire che la vostra attività personalizzato gestisce correttamente tutte le transizioni del Android attività del ciclo di vita (un esempio di come fare questo è mostrato di seguito). Se la vostra attività personalizzato estende UnityPlayerActivity si può invece estendere com.google.firebase.MessagingUnityPlayerActivity che implementa tutti i metodi necessari.

Se si utilizza un'attività personalizzata e non si estende com.google.firebase.MessagingUnityPlayerActivity , si dovrebbe includere i seguenti frammenti nella vostra 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 di Firebase SDK C ++ (7.1.0 in poi) l'uso JobIntentService che richiede ulteriori modifiche in AndroidManifest.xml di file.

<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 è affatto in esecuzione e un utente tocca una notifica, per impostazione predefinita il messaggio non viene instradato tramite i callback incorporati di FCM. In questo caso, i payload dei messaggi vengono ricevuti attraverso un Intent utilizzato per avviare l'applicazione.

I messaggi ricevuti mentre l'app è in background hanno il contenuto del loro campo di notifica utilizzato per popolare la notifica della barra delle applicazioni, ma quel contenuto di notifica non verrà comunicato a FCM. Cioè, FirebaseMessage.Notification sarà un nullo.

In sintesi:

Stato dell'app Notifica Dati Entrambi
Primo piano Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Sfondo Area di notifica Firebase.Messaging.FirebaseMessaging.MessageReceived Notifica: vassoio di sistema
Dati: in extra dell'intento.

Impedisci l'inizializzazione automatica

FCM genera un token di registrazione per il targeting per dispositivo. Quando viene generato un token, la libreria carica l'identificatore e i dati di configurazione su Firebase. Se desideri ottenere un consenso esplicito prima di utilizzare il token, puoi impedire la generazione al momento della configurazione disabilitando FCM (e su Android, Analytics). Per fare questo, aggiungere un valore metadati al tuo Info.plist (non il tuo GoogleService-Info.plist ) su iOS, o il vostro 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>

iOS

FirebaseMessagingAutoInitEnabled = NO

Per riattivare FCM, puoi effettuare una chiamata di runtime:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

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

FCM consente di inviare messaggi contenenti un collegamento diretto alla tua app. Per ricevere messaggi che contengono un link diretto, devi aggiungere un nuovo filtro di intent all'attività che gestisce i link diretti per la tua app. Il filtro intent dovrebbe catturare i deep link del tuo dominio. Se i tuoi messaggi non contengono un deep link, 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 di intenti. Per 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 collegamento allo schema e all'host che specifichi, la tua app avvierà l'attività con questo filtro di intenti per gestire il collegamento.

Prossimi passi

Dopo aver configurato l'app client, sei pronto per inviare messaggi downstream e topic con Firebase. Per ulteriori informazioni, vedere l' esempio delle Guide rapide che dimostra questa funzionalità.

Per aggiungere altri comportamenti più avanzati alla tua app, consulta le guide per l'invio di messaggi da un server di app:

Tenete a mente che avrete bisogno di un server di attuazione a fare uso di queste caratteristiche.