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 Androidem – Emulatory muszą używać funkcji z obrazem emulatora w Google Play.
- Zaloguj się w Firebase, korzystając ze swojego konta Google koncie.
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.
Otwórz konsolę Firebase.
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.
Wybierz środowisko docelowe kompilacji projektu Unity, które chcesz zarejestrować lub zarejestrować oba cele jednocześnie.
Wpisz identyfikatory projektów Unity dla danej platformy.
iOS – w polu Pakiet na iOS Identyfikator .
Android – w polu Pakiet na Androida name.
Często używane są terminy nazwa pakietu i identyfikator aplikacji. zamiennie.
(Opcjonalnie) Wpisz pseudonimy związane z platformą projektu Unity.
Te pseudonimy to wewnętrzne, wygodne identyfikatory, które są widoczne tylko w konsoli Firebase.Kliknij Zarejestruj aplikację.
Krok 3. Dodaj pliki konfiguracji Firebase
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.
Otwórz okno Project (Projekt) w projekcie Unity, a następnie przenieś konfigurację pliki do folderu
Assets
.W procesie konfiguracji ponownie w konsoli Firebase kliknij Dalej.
Krok 4. Dodaj pakiety SDK Firebase Unity
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ą.
W otwartym projekcie Unity przejdź do folderu Komponenty > Importuj pakiet > Pakiet niestandardowy.
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
- Dodaj pakiet Firebase dla konta Google Analytics:
W oknie Import Unity Package (Importuj pakiet Unity) kliknij Import (Importuj).
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
-
W projekcie w konsoli Firebase wybierz ikona koła zębatego, wybierz Ustawienia projektu i wybierz Komunikacja w chmurze.
-
W sekcji Klucz uwierzytelniania APN w sekcji Konfiguracja aplikacji na iOS kliknij przycisk Prześlij Przycisk
-
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
Kliknij projekt w Xcode, a następnie wybierz kartę General (Ogólne) Obszar edycji.
Przewiń w dół do sekcji Połączone platformy i biblioteki, a potem kliknij przycisk +. , aby dodać platformę.
W wyświetlonym oknie przewiń do folderu UserPowiadomienia.framework, kliknij ten wpis i kliknij Dodaj.
Krok 2. Włącz powiadomienia push
Kliknij projekt w Xcode, a następnie wybierz kartę Capabilities (Możliwości) w Obszar edycji.
Ustaw Powiadomienia push w pozycji Włączone.
Przewiń w dół do sekcji Tryby w tle i ustaw przełącznik w pozycji Wł.
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 nazwieMessagingUnityPlayerActivity
, która zastępuje standardowyUnityPlayerActivity
Assets/Plugins/Android/AndroidManifest.xml
nakazuje aplikacji użycieMessagingUnityPlayerActivity
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.
Radzenie sobie z wiadomościami za pomocą precyzyjnych linków na Androidzie
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ń.