Check out what’s new from Firebase at Google I/O 2022. Learn more

Skonfiguruj aplikację kliencką Firebase Cloud Messaging w Unity

Aby napisać wieloplatformową aplikację kliencką Firebase Cloud Messaging w Unity, użyj interfejsu Firebase Cloud Messaging API. Unity SDK działa zarówno na Androidzie, jak i na Apple, a dla każdej platformy wymagana jest dodatkowa konfiguracja.

Zanim zaczniesz

Warunki wstępne

  • Zainstaluj Unity 2017.4 lub nowszy. Wcześniejsze wersje mogą być również kompatybilne, ale nie będą aktywnie wspierane. Wsparcie dla Unity 2017.4 jest uważane za przestarzałe i nie będzie już aktywnie wspierane po kolejnej wersji głównej.

  • (tylko iOS) Zainstaluj następujące elementy:

    • Xcode 12,5 lub nowszy
    • CocoaPods 1.10.0 lub nowszy
  • Upewnij się, że Twój projekt Unity spełnia te wymagania:

    • Dla iOS — przeznaczony dla iOS 10 lub nowszego
    • Dla Androida — docelowy poziom API 19 (KitKat) lub wyższy

  • Skonfiguruj urządzenie lub użyj emulatora, aby uruchomić projekt Unity.

    • W przypadku systemu iOS — skonfiguruj fizyczne urządzenie z systemem iOS do uruchamiania aplikacji i wykonaj następujące czynności:

      • Uzyskaj klucz uwierzytelniania Apple Push Notification dla swojego konta Apple Developer .
      • Włącz powiadomienia push w XCode w menu App > Capabilities .
    • W przypadku systemu AndroidEmulatory muszą używać obrazu emulatora w Google Play.

Jeśli nie masz jeszcze projektu Unity i chcesz tylko wypróbować produkt Firebase, możesz pobrać jeden z naszych przykładów szybkiego startu .

Krok 1: Utwórz projekt Firebase

Zanim dodasz Firebase do projektu Unity, musisz utworzyć projekt Firebase, aby połączyć się z projektem Unity. Odwiedź Zrozumienie projektów Firebase , aby dowiedzieć się więcej o projektach Firebase.

Krok 2. Zarejestruj swoją aplikację w Firebase

Możesz zarejestrować co najmniej jedną aplikację lub grę, aby połączyć się z projektem Firebase.

  1. Przejdź do konsoli Firebase .

  2. Na środku strony przeglądu projektu kliknij ikonę Unity ( ), aby uruchomić przepływ pracy instalacji.

    Jeśli dodałeś już aplikację do projektu Firebase, kliknij Dodaj aplikację , aby wyświetlić opcje platformy.

  3. Wybierz, który cel kompilacji swojego projektu Unity chcesz zarejestrować, lub możesz nawet wybrać, aby zarejestrować oba cele teraz w tym samym czasie.

  4. Wpisz identyfikatory platformy swojego projektu Unity.

    • W przypadku iOS — wprowadź identyfikator iOS projektu Unity w polu Identyfikator pakietu iOS .

    • W przypadku systemu Android — wprowadź identyfikator Androida projektu Unity w polu nazwy pakietu Android .
      Terminy nazwa pakietu i identyfikator aplikacji są często używane zamiennie.

  5. (Opcjonalnie) Wprowadź pseudonimy związane z platformą projektu Unity.
    Te pseudonimy są wewnętrznymi, wygodnymi identyfikatorami i są widoczne tylko dla Ciebie w konsoli Firebase.

  6. Kliknij Zarejestruj aplikację .

Krok 3: Dodaj pliki konfiguracyjne Firebase

  1. Uzyskaj pliki konfiguracyjne Firebase dla konkretnej platformy w procesie konfiguracji konsoli Firebase.

    • W przypadku systemu iOS — kliknij Pobierz GoogleService-Info.plist .

    • W przypadku systemu Android — kliknij Pobierz google-services.json .

  2. Otwórz okno projektu swojego projektu Unity, a następnie przenieś pliki konfiguracyjne do folderu Assets .

  3. Wróć do konsoli Firebase, w procesie konfiguracji kliknij Dalej .

Krok 4. Dodaj pakiety SDK Firebase Unity

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

    • W dowolnym momencie możesz ponownie pobrać pakiet Firebase Unity SDK .

    • Pakiet Firebase Unity SDK nie jest specyficzny dla platformy.

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

  3. Z rozpakowanego pakietu SDK wybierz obsługiwane produkty Firebase , których chcesz używać w swojej aplikacji.

    Aby zapewnić optymalne działanie Firebase Cloud Messaging, zalecamy włączenie Google Analytics w swoim projekcie. Ponadto w ramach konfiguracji Analytics musisz dodać do swojej aplikacji pakiet Firebase dla Analytics.

    Analytics włączone

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

    Analytics nie jest włączone

    Dodaj pakiet dla Firebase Cloud Messaging: FirebaseMessaging.unitypackage

  4. W oknie Importuj pakiet Unity kliknij opcję Importuj .

  5. Wróć 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óre muszą być aktualne, aby można było z niego korzystać.

Dodaj następujący kod na początku aplikacji. Możesz sprawdzić i opcjonalnie zaktualizować Usługi Google Play do wersji wymaganej przez pakiet Firebase Unity SDK przed wywołaniem jakichkolwiek innych metod w pakiecie 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.
  }
});

Twój projekt w Unity jest zarejestrowany i skonfigurowany do korzystania z Firebase.

Krok 7: Dodaj strukturę powiadomień użytkownika

  1. Kliknij projekt w Xcode, a następnie wybierz kartę Ogólne w obszarze Edytor .

  2. Przewiń w dół do Linked Frameworks and Libraries , a następnie kliknij przycisk + , aby dodać framework.

  3. W wyświetlonym oknie przewiń do UserNotifications.framework , kliknij ten wpis, a następnie kliknij Dodaj .

Krok 8: Włącz powiadomienia push

  1. Kliknij projekt w Xcode, a następnie wybierz zakładkę Możliwości w obszarze Edytor .

  2. Przełącz powiadomienia push na Włączone .

  3. Przewiń w dół do opcji Tryby tła , a następnie przełącz ją na Włączone .

  4. Zaznacz pole wyboru Powiadomienia zdalne w sekcji Tryby tła .

Zainicjuj Firebase Cloud Messaging

Biblioteka Firebase Cloud Message zostanie zainicjowana podczas dodawania modułów obsługi zdarzeń TokenReceived lub MessageReceived .

Podczas inicjowania jest wymagany token rejestracji dla wystąpienia aplikacji klienckiej. Aplikacja otrzyma token ze zdarzeniem OnTokenReceived , które należy zbuforować do późniejszego wykorzystania. Będziesz potrzebować tego tokena, jeśli chcesz kierować wiadomości na to konkretne urządzenie.

Ponadto musisz zarejestrować się w zdarzeniu 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 punktu wejścia Android Aktywność

W systemie Android usługa Firebase Cloud Messaging jest dostarczana w pakiecie z niestandardową aktywnością punktu wejścia, która zastępuje domyślną UnityPlayerActivity . Jeśli nie używasz niestandardowego punktu wejścia, ta zamiana odbywa się automatycznie i nie powinieneś podejmować żadnych dodatkowych działań. Aplikacje, które nie korzystają z domyślnej aktywności punktu wejścia lub dostarczają własne zasoby Assets/Plugins/AndroidManifest.xml , będą wymagały dodatkowej konfiguracji.

Wtyczka Firebase Cloud Messaging Unity na Androida jest dostarczana w pakiecie z dwoma dodatkowymi plikami:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar zawiera działanie o nazwie MessagingUnityPlayerActivity , które zastępuje standardowe UnityPlayerActivity .
  • Assets/Plugins/Android/AndroidManifest.xml instruuje aplikację, aby używała MessagingUnityPlayerActivity jako punktu wejścia do aplikacji.

Te pliki są udostępniane, ponieważ domyślna UnityPlayerActivity nie obsługuje przejść cykli życia onStop , onRestart ani implementować onNewIntent , który jest niezbędny do poprawnej obsługi wiadomości przychodzących przez Firebase Cloud Messaging.

Konfigurowanie niestandardowego punktu wejścia Aktywność

Jeśli Twoja aplikacja nie używa domyślnego UnityPlayerActivity , musisz usunąć dostarczony plik AndroidManifest.xml i upewnić się, że Twoja niestandardowa aktywność prawidłowo obsługuje wszystkie przejścia cyklu życia aktywności Androida (przykład, jak to zrobić, pokazano poniżej). Jeśli Twoja niestandardowa aktywność rozszerza UnityPlayerActivity , możesz zamiast tego rozszerzyć com.google.firebase.MessagingUnityPlayerActivity , która implementuje wszystkie niezbędne metody.

Jeśli używasz niestandardowej aktywności i nie rozszerzasz com.google.firebase.MessagingUnityPlayerActivity , w swojej aktywności umieść następujące fragmenty.

/**
 * 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 Firebase C++ SDK (7.1.0 i nowsze) korzystają JobIntentService , która wymaga dodatkowych modyfikacji 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 systemie Android

Gdy aplikacja w ogóle nie działa, a użytkownik kliknie powiadomienie, wiadomość nie jest domyślnie kierowana przez wbudowane wywołania zwrotne FCM. W takim przypadku ładunki wiadomości są odbierane za pośrednictwem Intent używanej do uruchamiania aplikacji.

Wiadomości otrzymane, gdy aplikacja działa w tle, zawierają zawartość pola powiadomienia używanego do wypełniania powiadomienia w zasobniku systemowym, ale ta treść powiadomienia nie zostanie przekazana do FCM. Oznacza to, że FirebaseMessage.Notification będzie miał wartość null.

W podsumowaniu:

Stan aplikacji Powiadomienie Dane Obie
Pierwszoplanowy Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Tło Taca systemowa Firebase.Messaging.FirebaseMessaging.MessageReceived Powiadomienie: taca systemowa
Dane: w dodatkach intencji.

Zapobiegaj automatycznej inicjalizacji

FCM generuje token rejestracji do kierowania na urządzenia. Po wygenerowaniu tokena biblioteka przesyła identyfikator i dane konfiguracyjne do Firebase. Jeśli chcesz uzyskać wyraźną zgodę przed użyciem tokena, możesz zapobiec generowaniu w czasie konfiguracji, wyłączając FCM (a w Androidzie Analytics). Aby to zrobić, dodaj wartość metadanych do pliku Info.plist (nie GoogleService-Info.plist ) w Apple lub do pliku AndroidManifest.xml w systemie 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>

Szybki

FirebaseMessagingAutoInitEnabled = NO

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

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

Ta wartość jest zachowywana po ponownym uruchomieniu aplikacji po ustawieniu.

FCM umożliwia 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 działania, które obsługuje precyzyjne linki dla Twojej aplikacji. Filtr intencji powinien wykrywać precyzyjne linki w Twojej domenie. Jeśli Twoje wiadomości nie zawierają precyzyjnego linku, ta konfiguracja nie jest konieczna. W 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żliwe jest również określenie symbolu wieloznacznego, aby filtr intencji był bardziej elastyczny. Na 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żytkownicy dotkną powiadomienia zawierającego łącze do określonego schematu i hosta, aplikacja rozpocznie działanie z tym filtrem intencji, aby obsłużyć łącze.

Następne kroki

Po skonfigurowaniu aplikacji klienckiej możesz wysyłać wiadomości podrzędne i tematyczne za pomocą Firebase. Aby dowiedzieć się więcej, zobacz przykład szybkiego startu , który demonstruje tę funkcję.

Aby dodać inne, bardziej zaawansowane zachowanie do aplikacji, zapoznaj się z przewodnikami dotyczącymi wysyłania wiadomości z serwera aplikacji:

Pamiętaj, że do korzystania z tych funkcji potrzebna jest implementacja serwera .