Catch up on everthing we announced at this year's Firebase Summit. Learn more

Einrichten einer Firebase Cloud Messaging-Client-App mit Unity

Um Ihre Cross-Plattform Firebase Cloud Messaging Client - Anwendung mit Unity zu schreiben, verwenden Sie die Firebase Cloud Messaging API. Das Unity SDK funktioniert sowohl für Android als auch für Apple, wobei für jede Plattform einige zusätzliche Einstellungen erforderlich sind.

Bevor Sie beginnen

Voraussetzungen

  • Installieren Sie Unity 2017.4 oder höher. Frühere Versionen können ebenfalls kompatibel sein, werden jedoch nicht aktiv unterstützt. Die Unterstützung für Unity 2017.4 gilt als veraltet und wird nach der nächsten Hauptversion nicht mehr aktiv unterstützt.

  • (IOS nur) Installieren der folgenden Eigenschaften :

    • Xcode 9.4.1 oder höher
    • CocoaPods 1.10.0 oder höher
  • Stellen Sie sicher, dass Ihr Unity-Projekt diese Anforderungen erfüllt:

    • Für iOS - zielt auf iOS 10 oder höher
    • Für Android - Targets API - Ebene 19 (KitKat) oder höher

  • Richten Sie ein Gerät ein oder verwenden Sie einen Emulator, um Ihr Unity-Projekt auszuführen.

    • Für iOS - ein physisches iOS - Gerät einrichten führen Sie Ihre Anwendung, und führen Sie die folgenden Aufgaben:

      • Erhalten Sie einen Apple Push Notification - Authentifizierungsschlüssel für Ihr Apple Developer Account .
      • Aktivieren Sie Push Notifications in XCode unter App> Capabilities.
    • Für Android - Emulatoren müssen ein Emulator Bild mit Google Play verwenden.

Wenn Sie nicht bereits über ein Unity - Projekt haben und wollen nur ein Produkt Firebase auszuprobieren, können Sie einen unserer Download quickstart Proben .

Schritt 1: Firebase-Projekt erstellen

Bevor Sie Firebase zu Ihrem Unity-Projekt hinzufügen können, müssen Sie ein Firebase-Projekt erstellen, um eine Verbindung zu Ihrem Unity-Projekt herzustellen. Besuchen Sie verstehen Firebase Projekte mehr über Projekte Firebase zu lernen.

Schritt 2: App bei Firebase registrieren

Sie können eine oder mehrere Apps oder Spiele registrieren, um sich mit Ihrem Firebase-Projekt zu verbinden.

  1. Gehen Sie auf die Firebase Konsole .

  2. Im Zentrum des Projekts Übersichtsseite finden Sie im Unity - Symbol ( ) , um den Setup - Workflow zu starten.

    Wenn Sie bereits eine App zu Ihrem Firebase - Projekt hinzugefügt haben, klicken Sie App Fügen Sie die Plattform - Optionen anzuzeigen.

  3. Wählen Sie aus, welches Build-Ziel Ihres Unity-Projekts Sie registrieren möchten, oder Sie können sogar beide Ziele jetzt gleichzeitig registrieren.

  4. Geben Sie die plattformspezifische(n) ID(s) Ihres Unity-Projekts ein.

    • Für iOS - Geben Sie Ihr iOS - ID des Unity - Projektes in dem iOS - Bundle - ID - Feld.

    • Für Android - Geben Sie Ihr Android - ID des Unity - Projektes im Android Paketnamen Feld.
      Die Begriffe Paketnamen und Anwendungs - ID werden oft synonym verwendet.

  5. (Optional) Geben Sie Ihre Unity - Projekt plattformspezifischen Spitznamen (s).
    Diese Spitznamen sind interne, praktische Kennungen und sind nur für Sie in der Firebase-Konsole sichtbar.

  6. Klicken Sie auf Registrieren App.

Schritt 3: Firebase-Konfigurationsdateien hinzufügen

  1. Rufen Sie Ihre plattformspezifische(n) Firebase-Konfigurationsdatei(en) im Einrichtungsworkflow der Firebase-Konsole ab.

    • Für iOS - Klicken Sie auf Download GoogleService-Info.plist.

    • Für Android - Klicken Sie auf Download google-services.json.

  2. Öffnen Sie das Projektfenster des Unity - Projekt, dann bewegen Sie die Konfigurationsdatei (en) in den Assets Ordner.

  3. Zurück in der Firebase - Konsole im Setup - Workflow, klicken Sie auf Weiter.

Schritt 4: Firebase Unity-SDKs hinzufügen

  1. In der Firebase - Konsole, klicken Sie auf Download Firebase Unity SDK, dann entpacken Sie das SDK irgendwo bequem.

    • Sie können den Download Firebase Unity SDK jederzeit wieder.

    • Das Firebase Unity SDK ist nicht plattformspezifisch.

  2. In Ihrem offenen Unity Projekt Navigieren zu Assets> Import Package> Benutzerdefinierte Package.

  3. Aus dem entpackten SDK, wählen Sie die unterstützten Produkte Firebase , dass Sie in Ihrer Anwendung verwenden möchten.

    Für ein optimales Benutzererlebnis mit Firebase Cloud Messaging, empfehlen wir Google Analytics ermöglicht in Ihrem Projekt. Außerdem müssen Sie beim Einrichten von Analytics das Firebase-Paket für Analytics zu Ihrer App hinzufügen.

    Analytics aktiviert

    • Fügen Sie die Firebase - Paket für Google Analytics: FirebaseAnalytics.unitypackage
    • Fügen Sie das Paket für Firebase Cloud Messaging: FirebaseMessaging.unitypackage

    Analytics nicht aktiviert

    Fügen Sie das Paket für Firebase Cloud Messaging: FirebaseMessaging.unitypackage

  4. Im Importfenster Unity - Paket, klicken Sie auf Importieren.

  5. Zurück in der Firebase - Konsole im Setup - Workflow, klicken Sie auf Weiter.

Schritt 5: Bestätigen Sie die Versionsanforderungen der Google Play-Dienste

Die Firebase Unity - SDK für Android erfordert Google Play - Dienste , die up-to-date sein muss , bevor das SDK verwendet werden kann.

Fügen Sie den folgenden Code zu Beginn Ihrer Anwendung hinzu. Sie können nach Google Play-Diensten suchen und diese optional auf die für das Firebase Unity SDK erforderliche Version aktualisieren, bevor Sie andere Methoden im SDK aufrufen.

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.
  }
});

Ihr Unity-Projekt ist registriert und für die Verwendung von Firebase konfiguriert.

Schritt 7: Framework für Benutzerbenachrichtigungen hinzufügen

  1. Klicken Sie auf das Projekt in Xcode, wählen Sie dann die Registerkarte Allgemein aus dem Bereich Editor.

  2. Scrollen Sie zum Linked Frameworks und Bibliotheken, klicken Sie dann auf die Schaltfläche + einen Rahmen hinzuzufügen.

  3. In dem Fenster , das angezeigt wird , zu UserNotifications.framework bewegen, diesen Eintrag klicken, dann auf Hinzufügen.

Schritt 8: Push-Benachrichtigungen aktivieren

  1. Klicken Sie auf das Projekt in Xcode, wählen Sie dann die Registerkarte Funktionen aus dem Bereich Editor.

  2. Schalten Sie Push - Benachrichtigungen auf Ein .

  3. Blättern Sie zum Background - Modus, schalten Sie es dann auf On.

  4. Wählen Sie die Remote - Benachrichtigungen Kontrollkästchen unter Background - Modi.

Firebase Cloud Messaging initialisieren

Die Firebase Cloud - Nachrichtenbibliothek wird initialisiert werden , wenn Handler für entweder die Zugabe von TokenReceived oder MessageReceived Ereignisse.

Bei der Initialisierung wird ein Registrierungstoken für die Client-App-Instanz angefordert. Die App wird das Token mit der Empfang OnTokenReceived Veranstaltung, die für die spätere Verwendung zwischengespeichert werden soll. Sie benötigen dieses Token, wenn Sie Nachrichten auf dieses bestimmte Gerät ausrichten möchten.

Darüber hinaus müssen Sie für die Registrierung OnMessageReceived Ereignis , wenn Sie wollen eingehende Nachrichten empfangen können.

Das gesamte Setup sieht so aus:

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);
}

Konfigurieren einer Android-Einstiegspunktaktivität

Auf Android Firebase Cloud Messaging ist mit einer benutzerdefinierten Einstiegspunkt Aktivität gebündelt, die den Standard ersetzt UnityPlayerActivity . Wenn Sie keinen benutzerdefinierten Einstiegspunkt verwenden, erfolgt diese Ersetzung automatisch und Sie sollten keine weiteren Maßnahmen ergreifen müssen. Apps , die ihr eigenes nicht den Standardeintrag Punkt Aktivität verwenden oder dass das Angebot Assets/Plugins/AndroidManifest.xml wird zusätzliche Konfiguration benötigen.

Das Firebase Cloud Messaging Unity-Plug-in für Android wird mit zwei zusätzlichen Dateien geliefert:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar enthält eine Aktivität namens MessagingUnityPlayerActivity , die den Standard ersetzt UnityPlayerActivity .
  • Assets/Plugins/Android/AndroidManifest.xml instruiert die App zu nutzen MessagingUnityPlayerActivity als Einstiegspunkt für die App.

Diese Dateien werden zur Verfügung gestellt , da der Standard UnityPlayerActivity nicht verarbeitet onStop , onRestart Aktivität Lifecycle - Übergänge oder die Umsetzung onNewIntent die für Firebase Cloud Messaging korrekt zu verarbeiten eingehende Nachrichten erforderlich ist.

Konfigurieren einer benutzerdefinierten Einstiegspunktaktivität

Wenn Ihre App nicht die Standardkonfiguration verwenden UnityPlayerActivity müssen Sie das mitgelieferte entfernen AndroidManifest.xml und sicherzustellen , dass Ihre benutzerdefinierte Aktivität richtig alle Übergänge der Griffe Android Activity Lifecycle (ein Beispiel dafür , wie dies zu tun ist , siehe unten). Wenn Sie Ihre eigene Aktivität erstreckt UnityPlayerActivity können Sie stattdessen erweitern com.google.firebase.MessagingUnityPlayerActivity welche Geräte alle notwendigen Methoden.

Wenn Sie eine benutzerdefinierte Aktivität verwenden und nicht erstreckt com.google.firebase.MessagingUnityPlayerActivity , sollten Sie die folgenden Schnipsel in Ihrer Aktivität enthalten.

/**
 * 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);
}

Neue Versionen von Firebase C ++ SDK (7.1.0 ab) Verwendung JobIntentService , die in zusätzliche Modifikationen erfordert AndroidManifest.xml Datei.

<service android:name="com.google.firebase.messaging.MessageForwardingService"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" >
</service>

Hinweis zur Nachrichtenzustellung auf Android

Wenn die App überhaupt nicht ausgeführt wird und ein Benutzer auf eine Benachrichtigung tippt, wird die Nachricht standardmäßig nicht über die integrierten Rückrufe von FCM geleitet. In diesem Fall Nachricht Nutzlasten werden über ein empfangene Intent verwendet , um die Anwendung zu starten.

Bei Nachrichten, die empfangen werden, während sich die App im Hintergrund befindet, wird der Inhalt ihres Benachrichtigungsfelds zum Ausfüllen der Taskleistenbenachrichtigung verwendet, aber dieser Benachrichtigungsinhalt wird nicht an FCM übermittelt. Das heißt, FirebaseMessage.Notification wird eine Null sein.

Zusammenfassend:

App-Status Benachrichtigung Daten Beide
Vordergrund Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Hintergrund System Tray Firebase.Messaging.FirebaseMessaging.MessageReceived Benachrichtigung: Taskleiste
Daten: in Extras der Absicht.

Automatische Initialisierung verhindern

FCM generiert ein Registrierungstoken für das Geräte-Targeting. Wenn ein Token generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie vor der Verwendung des Tokens ein explizites Opt-In erhalten möchten, können Sie die Generierung zum Zeitpunkt der Konfiguration verhindern, indem Sie FCM (und auf Android, Analytics) deaktivieren. Dazu fügen Sie einen Metadatenwert für Ihren Info.plist (nicht Ihr GoogleService-Info.plist ) auf Apple oder Ihren AndroidManifest.xml auf 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>

Schnell

FirebaseMessagingAutoInitEnabled = NO

Um FCM wieder zu aktivieren, können Sie einen Laufzeitaufruf tätigen:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

Dieser Wert bleibt über App-Neustarts hinweg bestehen, sobald er festgelegt wurde.

FCM ermöglicht das Senden von Nachrichten mit einem Deep-Link in Ihre App. Um Nachrichten zu empfangen, die einen Deep-Link enthalten, müssen Sie der Aktivität, die Deep-Links für Ihre App verarbeitet, einen neuen Intent-Filter hinzufügen. Der Intent-Filter sollte Deeplinks Ihrer Domain erfassen. Wenn Ihre Nachrichten keinen Deep-Link enthalten, ist diese Konfiguration nicht erforderlich. 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>

Es ist auch möglich, einen Platzhalter anzugeben, um den Intent-Filter flexibler zu gestalten. Zum Beispiel:

<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>

Wenn Benutzer auf eine Benachrichtigung tippen, die einen Link zu dem von Ihnen angegebenen Schema und Host enthält, startet Ihre App die Aktivität mit diesem Absichtsfilter, um den Link zu verarbeiten.

Nächste Schritte

Nachdem Sie die Client-App eingerichtet haben, können Sie Downstream- und Themennachrichten mit Firebase senden. Um mehr zu erfahren, finden Sie in der Schnellstart - Probe , die diese Funktionalität demonstriert.

Um Ihrer App ein anderes, erweitertes Verhalten hinzuzufügen, lesen Sie die Anleitungen zum Senden von Nachrichten von einem App-Server:

Denken Sie daran , dass Sie einen benötigen Server - Implementierung dieser Funktionen zu nutzen.