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

Aby napisać międzyplatformową aplikację kliencką Firebase Cloud Messaging za pomocą Unity, 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 LTS 2021 lub nowszą wersję. Weźmiemy pod uwagę obsługę Unity 2020 wycofane i nie będą aktywnie obsługiwane po następnej aktualizacji wersji. Wcześniejsze wersje też mogą być zgodne, ale nie będą aktywnie obsługiwane.

  • (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 13 lub nowszy.
    • tvOS – jest kierowana na system tvOS w wersji 13 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. W procesie konfiguracji ponownie w konsoli Firebase kliknij Dalej.

Krok 4. Dodaj pakiety SDK Firebase Unity

  1. W konsoli Firebase kliknij Pobierz pakiet Firebase SDK Unity, a następnie rozpakuj go. z pakietu SDK w dogodnym miejscu.

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

    • 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 w których usługach chcesz korzystać do aplikacji.

    Aby zapewnić optymalne działanie usługi Firebase Cloud Messaging, zalecamy włączam Google Analytics w Twoim projekcie. Podczas konfigurowania usługi Analytics musisz też dodać pakiet Firebase dla Analytics do Twojej aplikacji.

    Włączono: Analytics

    • Dodaj pakiet Firebase dla konta Google Analytics: FirebaseAnalytics.unitypackage
    • Dodaj pakiet Firebase Cloud Messaging: FirebaseMessaging.unitypackage

    Funkcja Analytics nie została włączona

    Dodaj pakiet Firebase Cloud Messaging: FirebaseMessaging.unitypackage

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

  5. W procesie konfiguracji ponownie w konsoli Firebase kliknij Dalej.

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

Pakiet SDK usługi Firebase Unity na Androida wymaga: Google Play services, które musi że pakiet SDK musi być aktualny.

Dodaj instrukcję using i kod inicjowania na początku aplikacji. Możesz sprawdzić i opcjonalnie zaktualizować Google Play services do wersji wymaganej przez pakiet SDK Firebase Unity 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 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 i wybierz 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.

Zainicjuj instancję Firebase Cloud Messaging

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 pakietu Firebase Cloud Messaging dołączany jest 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.

Wtyczka Unity Firebase Cloud Messaging na Androida jest 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 jest wymagane do prawidłowego działania Firebase Cloud Messaging 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 usługi 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ń, że treść powiadomienia nie zostanie przekazana 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

Funkcja 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 Twojej 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ń.