Konfigurowanie aplikacji klienckiej Komunikacja w chmurze Firebase (FCM) w Unity

Aby napisać w Unity swoją wieloplatformową aplikację kliencką Komunikacja w chmurze Firebase, skorzystaj z API Firebase Cloud Messaging API. Pakiet Unity SDK działa zarówno na Androida, jak i na urządzenia Apple, ale wymagana jest dodatkowa konfiguracja. dla każdej platformy.

Zanim zaczniesz

Wymagania wstępne

  • Zainstaluj Unity w wersji 2019.1 lub nowszej. Wcześniejsze wersje również mogą być zgodne, ale nie będą aktywnie obsługiwane. Podejmujemy decyzję o obsłudze Unity 2019.1 wycofane i nie będą aktywnie obsługiwane po następnej aktualizacji wersji.

  • (Tylko platformy Apple) Zainstaluj te elementy:

    • Xcode 13.3.1 lub nowsza wersja
    • CocoaPods w wersji 1.12.0 lub nowszej
  • Sprawdź, czy Twój projekt w Unity spełnia te wymagania:

    • iOS – jest kierowana na system iOS 11 lub nowszy.
    • tvOS – jest kierowana na system tvOS w wersji 12 lub nowszej
    • Android – docelowy poziom interfejsu API 19 (KitKat) lub nowsza
  • Skonfiguruj urządzenie lub użyj emulatora, aby uruchomić projekt w Unity.

    • iOS lub tvOS – skonfiguruj urządzenie fizyczne, aby i wykonaj te czynności:

      • Uzyskaj klucz uwierzytelniania Apple Push Notification do swojego Konto dewelopera Apple.
      • Włącz powiadomienia push w XCode w sekcji App > (Aplikacja >). Potencjał.
    • Na urządzeniu z AndroidemEmulatory muszą używać funkcji z obrazem emulatora w Google Play.

Jeśli nie masz jeszcze projektu Unity i chcesz wypróbować Firebase, możesz pobrać nasze krótkie wprowadzenia.

Krok 1. Utwórz projekt Firebase

Zanim dodasz Firebase do projektu w Unity, musisz utworzyć który chcesz połączyć z projektem w Unity. Odwiedź stronę Informacje o Firebase Projekty, aby dowiedzieć się więcej o projektach Firebase.

Krok 2. Zarejestruj aplikację w Firebase

Aby połączyć konto z Firebase, możesz zarejestrować co najmniej 1 aplikację lub grę w projektach AI.

  1. Otwórz konsolę Firebase.

  2. Na środku strony z opisem projektu kliknij ikonę Unity. () aby rozpocząć proces konfiguracji.

    Jeśli masz już aplikację w projekcie Firebase, kliknij Dodaj aplikację. aby wyświetlić opcje platformy.

  3. Wybierz środowisko docelowe kompilacji projektu Unity, które chcesz zarejestrować lub zarejestrować oba cele jednocześnie.

  4. Wpisz identyfikatory projektów Unity dla danej platformy.

    .
  5. (Opcjonalnie) Wpisz pseudonimy związane z platformą projektu Unity.
    Te pseudonimy to wewnętrzne, wygodne identyfikatory, które są widoczne tylko w konsoli Firebase.

  6. Kliknij Zarejestruj aplikację.

Krok 3. Dodaj pliki konfiguracji Firebase

  1. Pliki konfiguracji Firebase dotyczące danej platformy znajdziesz w Proces konfiguracji konsoli Firebase.

    • iOS – kliknij Pobierz GoogleService-Info.plist.

    • Android – kliknij Pobierz google-services.json.

  2. Otwórz okno Project (Projekt) w projekcie Unity, a następnie przenieś konfigurację pliki do folderu Assets.

  3. Gdy wrócisz do konsoli Firebase, w procesie konfiguracji kliknij Dalej.

Krok 4. Dodaj pakiety SDK Firebase Unity

  1. W konsoli Firebase kliknij Pobierz pakiet SDK Firebase Unity i rozpakuj go. z pakietu SDK w dogodnym miejscu.

    • W każdej chwili możesz ponownie pobrać pakiet Firebase Unity SDK.

    • Pakiet SDK Firebase Unity nie jest związany z konkretną platformą.

  2. W otwartym projekcie Unity przejdź do folderu Komponenty > Importuj pakiet > Pakiet niestandardowy.

  3. W rozpakowanym pakiecie SDK wybierz obsługiwaną usługę Firebase usług, których chcesz używać do aplikacji.

    Aby zapewnić optymalne działanie Komunikacji w chmurze Firebase (FCM), zalecamy włączenie Google Analytics, w Twoim projekcie. Podczas konfigurowania Analytics musisz też dodać pakietu Firebase Analytics do aplikacji.

    Analityka włączona

    • Dodaj pakiet Firebase dla Google Analytics: FirebaseAnalytics.unitypackage
    • Dodaj pakiet do Komunikacji w chmurze Firebase (FCM): FirebaseMessaging.unitypackage

    Statystyki nie są włączone

    Dodaj pakiet do Komunikacji w chmurze Firebase (FCM): FirebaseMessaging.unitypackage

  4. W oknie Import Unity Package (Importuj pakiet Unity) kliknij Import (Importuj).

  5. Gdy wrócisz do konsoli Firebase, w procesie konfiguracji kliknij Dalej.

Krok 5. Potwierdź wymagania dotyczące wersji Usług Google Play

Pakiet Firebase Unity SDK na Androida wymaga: Usług Google Play, których pakiet musi spełniać, że pakiet SDK musi być aktualny.

Dodaj instrukcję using i kod inicjowania na początku aplikacji. Możesz sprawdzić dostępność Usług Google Play i ewentualnie zaktualizować je do wymaganej przez pakiet Firebase Unity SDK przed wywołaniem jakiegokolwiek innego w pakiecie 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.
  }
});

Twój projekt w Unity jest zarejestrowany i skonfigurowany do używania Firebase.

Prześlij klucz uwierzytelniania APNs na potrzeby zespołu pomocy Apple

Prześlij swój klucz uwierzytelniania APNs do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniania APNs, utwórz go w Apple Developer Member Center

  1. W projekcie w konsoli Firebase wybierz ikona koła zębatego, wybierz Ustawienia projektu, a potem wybierz Karta Komunikacja w chmurze.

  2. W sekcji Klucz uwierzytelniania APN w sekcji Konfiguracja aplikacji na iOS kliknij przycisk Prześlij Przycisk

  3. Przejdź do miejsca, w którym masz zapisany klucz, wybierz go i kliknij Otwórz. Dodaj identyfikator klucza (dostępny w sekcji Apple Developer Member Center) i kliknij Prześlij.

Włącz powiadomienia push na platformach Apple

Krok 1. Dodaj platformę powiadomień dla użytkowników

  1. Kliknij projekt w Xcode, a następnie wybierz kartę General (Ogólne) Obszar edycji.

  2. Przewiń w dół do sekcji Połączone platformy i biblioteki, a potem kliknij przycisk +. , aby dodać platformę.

  3. W wyświetlonym oknie przewiń do folderu UserPowiadomienia.framework, kliknij ten wpis i kliknij Dodaj.

Krok 2. Włącz powiadomienia push

  1. Kliknij projekt w Xcode, a następnie wybierz kartę Capabilities (Możliwości) w Obszar edycji.

  2. Ustaw Powiadomienia push w pozycji Włączone.

  3. Przewiń w dół do sekcji Tryby w tle i ustaw przełącznik w pozycji Wł.

  4. Zaznacz pole wyboru Powiadomienia zdalne w sekcji Tryby w tle.

Inicjowanie Komunikacji w chmurze Firebase (FCM)

Biblioteka wiadomości w chmurze Firebase zostanie zainicjowana podczas dodawania modułów obsługi dla zdarzeń TokenReceived lub MessageReceived.

Po zainicjowaniu aplikacji klienckiej wysyłane jest żądanie tokena rejestracji. instancji. Aplikacja otrzyma token ze zdarzeniem OnTokenReceived, który powinien być buforowany w celu późniejszego użycia. Będzie Ci to potrzebne token, jeśli chcesz kierować wiadomości na to konkretne urządzenie.

Dodatkowo musisz zarejestrować się na wydarzenie OnMessageReceived, jeśli chcesz mieć możliwość odbierania wiadomości przychodzących.

Cała konfiguracja wygląda tak:

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

Konfigurowanie aktywności punktu wejścia Androida

Na Androidzie do Komunikacji w chmurze Firebase występuje w pakiecie niestandardowy punkt wejścia. która zastępuje domyślną aktywność (UnityPlayerActivity). Jeśli nie używasz Niestandardowy punkt wejścia ta zamiana odbywa się automatycznie i nie należy nie musi podjąć żadnych dodatkowych działań. Aplikacje, które nie używają domyślnego punktu wejścia Aktywność lub dostawcy własnych zasobów Assets/Plugins/AndroidManifest.xml będą potrzebować dodatkowej konfiguracji.

Wtyczkę Firebase Cloud Messaging Unity na Androida otrzymujesz w pakiecie z 2 elementami. dodatkowe pliki:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar zawiera aktywność o nazwie MessagingUnityPlayerActivity, która zastępuje standardowy UnityPlayerActivity
  • Assets/Plugins/Android/AndroidManifest.xml nakazuje aplikacji użycie MessagingUnityPlayerActivity jako punkt wejścia do aplikacji.

Te pliki zostały udostępnione, ponieważ domyślna właściwość UnityPlayerActivity nie obsługuje przejścia w cyklu życia aktywności onStop i onRestart lub zaimplementuj kod onNewIntent, które są niezbędne do prawidłowego działania Komunikacji w chmurze Firebase obsługi wiadomości przychodzących.

Konfigurowanie działania niestandardowego punktu wejścia

Jeśli aplikacja nie używa domyślnego ustawienia UnityPlayerActivity, musisz: usuń podane AndroidManifest.xml i upewnij się, że niestandardowa aktywność prawidłowo obsługuje wszystkie przejścia Cykl aktywności na Androidzie (poniżej pokazujemy, jak to zrobić). Jeśli Twój niestandardowy aktywność obejmuje UnityPlayerActivity, możesz zamiast tego przedłużyć com.google.firebase.MessagingUnityPlayerActivity, która stosuje wszystkie i nie tylko.

Jeśli korzystasz z aktywności niestandardowej i nie przedłużasz subskrypcji com.google.firebase.MessagingUnityPlayerActivity, umieść w poniżej fragmentów w Twojej aktywności.

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

Nowe wersje pakietu SDK Firebase C++ (od 7.1.0) używają interfejsu JobIntentService, który wymaga dodatkowe modyfikacje w pliku AndroidManifest.xml.

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

Uwaga na temat dostarczania wiadomości w Androidzie

Gdy aplikacja w ogóle nie jest uruchomiona, a użytkownik kliknie powiadomienie, wiadomość nie jest domyślnie przekierowywana przez wbudowane funkcje FCM . W tym przypadku ładunki wiadomości są odbierane przez Intent. używane do uruchomienia aplikacji.

Wiadomości odebrane, gdy aplikacja działa w tle, zawierają w polu powiadomień w obszarze powiadomień w obszarze powiadomień, takie powiadomienia nie zostaną przekazane FCM. To znaczy, FirebaseMessage.Notification będzie mieć wartość null.

W skrócie:

Stan aplikacji Powiadomienie Dane Oba rodzaje
Pierwszy plan Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Tło Zasobnik systemowy Firebase.Messaging.FirebaseMessaging.MessageReceived Powiadomienie: obszar powiadomień
Dane: w dodatkowych celach.

Zapobiegaj automatycznemu inicjowaniu

FCM generuje token rejestracji na potrzeby kierowania na urządzenia. Po wygenerowaniu tokena biblioteka przesyła i danych konfiguracji. Jeśli chcesz zobaczyć wulgaryzmy przed użyciem tokena, możesz zapobiec generowaniu konwersji podczas konfiguracji, wyłączyć FCM (i na Androidzie, Analytics). Aby to zrobić, dodaj wartość metadanych do urządzenie Info.plist (nie GoogleService-Info.plist) w Apple lub AndroidManifest.xml na urządzeniu z Androidem:

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

Aby ponownie włączyć FCM, możesz wykonać wywołanie w czasie działania aplikacji:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

Po ustawieniu ta wartość będzie się utrzymywać w przypadku ponownych uruchomień aplikacji.

FCM zezwala na wysyłanie wiadomości zawierających precyzyjny link do aplikacji. Aby otrzymywać wiadomości zawierające precyzyjny link, musisz dodać nowy filtr intencji do aktywności, która obsługuje precyzyjne linki do Twojej aplikacji. Filtr intencji powinien przechwytywanie precyzyjnych linków w Twojej domenie. Jeśli wiadomości nie zawierają precyzyjnego linku, ta konfiguracja nie jest wymagana. W pliku 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>

Możesz też określić symbol wieloznaczny, aby zwiększyć skuteczność filtra intencji. i elastycznością. Przykład:

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

Gdy użytkownik kliknie powiadomienie zawierające link do schematu i będzie Cię hostować aplikacji, aplikacja rozpocznie aktywność za pomocą tego filtra intencji do obsługi .

Dalsze kroki

Po skonfigurowaniu aplikacji klienckiej możesz rozpocząć wysyłanie danych podrzędnych i tematu wiadomości z Firebase. Aby dowiedzieć się więcej, przeczytaj krótki przewodnik – przykład które ilustruje tę funkcję.

Aby dodać do aplikacji inne, bardziej zaawansowane funkcje, zapoznaj się z przewodnikami z serwera aplikacji:

Pamiętaj, że musisz mieć implementacji serwera, aby mogły korzystać z tych funkcje zabezpieczeń.