Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Skonfiguruj aplikację kliencką Firebase Cloud Messaging w Unity

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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 Apple, z dodatkową konfiguracją wymaganą dla każdej platformy.

Zanim zaczniesz

Warunki wstępne

  • Zainstaluj Unity 2018.4 lub nowszy. Wcześniejsze wersje mogą być również zgodne, ale nie będą aktywnie wspierane. Wsparcie dla Unity 2018.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 13.3.1 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 wypychane w XCode w obszarze App > Capabilities .
    • W przypadku systemu Androidemulatory muszą używać obrazu emulatora w Google Play.

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

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 zarejestrować oba cele teraz w tym samym czasie.

  4. Wpisz identyfikatory platformy swojego projektu Unity.

    • W przypadku systemu 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) Wpisz 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 konfigurowania Analytics musisz dodać do swojej aplikacji pakiet Firebase dla Analytics.

    Analiza włączona

    • 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ć dostępność usług Google Play i opcjonalnie zaktualizować je 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ślne 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ślnego działania 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 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 implementuje 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 korzystasz z niestandardowej aktywności i nie rozszerzasz com.google.firebase.MessagingUnityPlayerActivity , umieść w swojej aktywności 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 komunikatów są odbierane za pośrednictwem Intent używanej do uruchamiania aplikacji.

Wiadomości otrzymane, gdy aplikacja działa w tle, mają 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 .

,

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 Apple, z dodatkową konfiguracją wymaganą dla każdej platformy.

Zanim zaczniesz

Warunki wstępne

  • Zainstaluj Unity 2018.4 lub nowszy. Wcześniejsze wersje mogą być również zgodne, ale nie będą aktywnie wspierane. Wsparcie dla Unity 2018.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 13.3.1 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 wypychane w XCode w obszarze App > Capabilities .
    • W przypadku systemu Androidemulatory muszą używać obrazu emulatora w Google Play.

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

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 zarejestrować oba cele teraz w tym samym czasie.

  4. Wpisz identyfikatory platformy swojego projektu Unity.

    • W przypadku systemu 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) Wpisz 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 konfigurowania Analytics musisz dodać do swojej aplikacji pakiet Firebase dla Analytics.

    Analiza włączona

    • 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ć dostępność usług Google Play i opcjonalnie zaktualizować je 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ślne 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ślnego działania 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 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 implementuje 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 korzystasz z niestandardowej aktywności i nie rozszerzasz com.google.firebase.MessagingUnityPlayerActivity , umieść w swojej aktywności 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 komunikatów są odbierane za pośrednictwem Intent używanej do uruchamiania aplikacji.

Wiadomości otrzymane, gdy aplikacja działa w tle, mają 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 .

,

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 Apple, z dodatkową konfiguracją wymaganą dla każdej platformy.

Zanim zaczniesz

Warunki wstępne

  • Zainstaluj Unity 2018.4 lub nowszy. Wcześniejsze wersje mogą być również zgodne, ale nie będą aktywnie wspierane. Wsparcie dla Unity 2018.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 13.3.1 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 wypychane w XCode w obszarze App > Capabilities .
    • W przypadku systemu Androidemulatory muszą używać obrazu emulatora w Google Play.

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

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 zarejestrować oba cele teraz w tym samym czasie.

  4. Wpisz identyfikatory platformy swojego projektu Unity.

    • W przypadku systemu 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) Wpisz 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 konfigurowania Analytics musisz dodać do swojej aplikacji pakiet Firebase dla Analytics.

    Analiza włączona

    • 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ć dostępność usług Google Play i opcjonalnie zaktualizować je 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ślne 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ślnego działania 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 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 instructs the app to use MessagingUnityPlayerActivity as the entry point to the app.

These files are provided because the default UnityPlayerActivity does not handle onStop , onRestart activity lifecycle transitions or implement the onNewIntent which is necessary for Firebase Cloud Messaging to correctly handle incoming messages.

Configuring a custom entry point Activity

If your app does not use the default UnityPlayerActivity you will need to remove the supplied AndroidManifest.xml and ensure that your custom activity properly handles all transitions of the Android Activity Lifecycle (an example of how to do this is shown below). If your custom activity extends UnityPlayerActivity you can instead extend com.google.firebase.MessagingUnityPlayerActivity which implements all necessary methods.

If you are using a custom Activity and not extending com.google.firebase.MessagingUnityPlayerActivity , you should include the following snippets in your Activity.

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

New versions of Firebase C++ SDK (7.1.0 onwards) use JobIntentService which requires additional modifications in AndroidManifest.xml file.

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

Note about message delivery on Android

When the app is not running at all and a user taps on a notification, the message is not, by default, routed through FCM's built in callbacks. In this case, message payloads are received through an Intent used to start the application.

Messages received while the app is in the background have the content of their notification field used to populate the system tray notification, but that notification content will not be communicated to FCM. That is, FirebaseMessage.Notification will be a null.

In summary:

App state Notification Data Both
Foreground Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Background System tray Firebase.Messaging.FirebaseMessaging.MessageReceived Notification: system tray
Data: in extras of the intent.

Zapobiegaj automatycznej inicjalizacji

FCM generates a registration token for device targeting. When a token is generated, the library uploads the identifier and configuration data to Firebase. If you want to get an explicit opt-in before using the token, you can prevent generation at configure time by disabling FCM (and on Android, Analytics). To do this, add a metadata value to your Info.plist (not your GoogleService-Info.plist ) on Apple, or your AndroidManifest.xml on 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

To re-enable FCM, you can make a runtime call:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

This value persists across app restarts once set.

FCM allows messages to be sent containing a deep link into your app. To receive messages that contain a deep link, you must add a new intent filter to the activity that handles deep links for your app. The intent filter should catch deep links of your domain. If your messages do not contain a deep link, this configuration is not necessary. 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>

It is also possible to specify a wildcard to make the intent filter more flexible. 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>

When users tap a notification containing a link to the scheme and host you specify, your app will start the activity with this intent filter to handle the link.

Następne kroki

After setting up the client app, you are ready to send downstream and topic messages with Firebase. To learn more, see the quickstart sample which demonstrates this functionality.

To add other, more advanced behavior to your app, see the guides for sending messages from an app server:

Keep in mind that you'll need a server implementation to make use of these features.