Aby napisać wieloplatformową aplikację kliencką Firebase Cloud Messaging w języku C++, użyj Firebase Cloud Messaging API. Pakiet SDK C++ działa zarówno na platformy Android, jak i Apple, wymagana jest dodatkowa konfiguracja dla każdej platformy.
Skonfiguruj Firebase i pakiet SDK FCM
Android
Jeśli jeszcze nie masz tego za sobą, dodaj Firebase do swojego projektu w C++,
W powiązanych instrukcjach konfiguracji sprawdź urządzenie i aplikację. wymagania dotyczące korzystania z pakietu SDK Firebase C++, w tym zalecamy skorzystanie z CMake przy tworzeniu aplikacji.
W pliku
build.gradle
na poziomie projektu umieść dane Repozytorium Google Maven w środowiskachbuildscript
i Sekcje:allprojects
.
Utwórz obiekt aplikacji Firebase, przekazując w środowisku JNI Aktywność:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
Zdefiniuj klasę, która implementuje funkcję
firebase::messaging::Listener
za pomocą prostego interfejsu online.Zainicjuj FCM, przekazując w aplikacji i utworzony detektor:
::firebase::messaging::Initialize(app, listener);
Aplikacje korzystające z pakietu SDK Usług Google Play powinny sprawdzić urządzenie uzyskać dostęp do zgodnego pakietu APK Usług Google Play, zanim uzyskasz dostęp do funkcji. Więcej informacji: Sprawdź pakiet APK Usług Google Play.
iOS+
- Jeśli jeszcze nie masz tego za sobą,
dodaj Firebase do swojego projektu w C++, Następnie:
aby skonfigurować projekt dla usługi FCM:
- W pliku Podfile projektu dodaj zależność FCM:
pod 'FirebaseMessaging'
- Przeciągnij
firebase.framework
ifirebase_messaging.framework
platformy do projektu Xcode z pakietu SDK Firebase C++.
- W pliku Podfile projektu dodaj zależność FCM:
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.
-
Skonfiguruj projekt Xcode, aby włączyć powiadomienia push:
- Wybierz projekt w obszarze Nawigator.
- W obszarze edycji wybierz miejsce docelowe projektu.
W obszarze edytora wybierz kartę Ogólne.
- Przewiń w dół do sekcji Połączone platformy i biblioteki, a potem kliknij kliknij przycisk +, aby dodać platformy.
W wyświetlonym oknie przewiń do UserPowiadomienia.framework, kliknij ten wpis, a następnie kliknij Dodaj.
Ta platforma pojawia się tylko w Xcode w wersji 8 i nowszych i jest wymagane przez tę bibliotekę.
W obszarze Edytora kliknij kartę Możliwości.
- Ustaw Powiadomienia push w pozycji Włączone.
- Przewiń w dół do sekcji Tryby w tle i ustaw przełącznik w pozycji Wł.
- W sekcji Tryby w tle wybierz Powiadomienia zdalne.
Utwórz obiekt aplikacji Firebase:
app = ::firebase::App::Create(::firebase::AppOptions());
Zdefiniuj klasę, która implementuje funkcję
firebase::messaging::Listener
za pomocą prostego interfejsu online.Zainicjuj Komunikację w chmurze Firebase, przekazując do aplikacji i utworzony Detektor:
::firebase::messaging::Initialize(app, listener);
Uzyskiwanie dostępu do tokena rejestracji urządzenia
Po zainicjowaniu biblioteki Komunikacji w chmurze Firebase (FCM) token rejestracji
żądania dla instancji aplikacji klienckiej. Aplikacja otrzyma token z
Wywołanie zwrotne OnTokenReceived
, które powinno być zdefiniowane w klasie implementującej
firebase::messaging::Listener
Jeśli chcesz kierować reklamy na to konkretne urządzenie, potrzebujesz dostępu do tego tokena.
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. Aby usługa FCM przekazywała dalej te przychodzące
do wywołania zwrotnego biblioteki C++, musisz zastąpić tę metodę
onNewIntent
w swojej aktywności i przekazuj Intent
do
MessageForwardingService
import com.google.firebase.messaging.MessageForwardingService; class MyActivity extends Activity { private static final String TAG = "MyActvity"; @Override protected void onNewIntent(Intent intent) { Log.d(TAG, "A message was sent to this app while it was in the background."); 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); } }
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,
Message::notification
będzie mieć wartość null.
W skrócie:
Stan aplikacji | Powiadomienie | Dane | Oba rodzaje |
---|---|---|---|
Pierwszy plan | OnMessageReceived |
OnMessageReceived |
OnMessageReceived |
Tło | Zasobnik systemowy | OnMessageReceived |
Powiadomienie: obszar powiadomień Dane: w dodatkowych celach. |
Niestandardowa obsługa wiadomości na Androidzie
Domyślnie powiadomienia wysyłane do aplikacji są przekazywane do
::firebase::messaging::Listener::OnMessageReceived
, ale w niektórych przypadkach możesz
chcesz zastąpić zachowanie domyślne. Aby to zrobić na Androidzie:
i zapis klas niestandardowych, które rozszerzają
com.google.firebase.messaging.cpp.ListenerService
, i zaktualizuj swoją
AndroidManifest.xml
projektu.
Zastąp ListenerService
metody.
ListenerService
to klasa Java, która przechwytuje wiadomości przychodzące wysyłane do
i przekierowuje do biblioteki C++. Gdy aplikacja działa na pierwszym planie
(lub gdy aplikacja działa w tle i otrzymuje ładunek zawierający tylko dane),
wiadomości będą przekazywane przez jedno z wywołań zwrotnych udostępnionych w tej klasie. Aby dodać
niestandardowe zachowanie w zakresie obsługi wiadomości, musisz rozszerzyć zakres FCM
domyślna wartość ListenerService
:
import com.google.firebase.messaging.cpp.ListenerService; class MyListenerService extends ListenerService {
Zastępując metodę ListenerService.onMessageReceived
, można
wykonywać działania na podstawie otrzymanych
Zdalna_wiadomość
i pobierz dane wiadomości:
@Override public void onMessageReceived(RemoteMessage message) { Log.d(TAG, "A message has been received."); // Do additional logic... super.onMessageReceived(message); }
ListenerService
ma też kilka innych metod, które są rzadziej używane.
Możesz je również zastąpić. Więcej informacji znajdziesz w
FirebaseMessagingService.
odwołania.
@Override public void onDeletedMessages() { Log.d(TAG, "Messages have been deleted on the server."); // Do additional logic... super.onDeletedMessages(); } @Override public void onMessageSent(String messageId) { Log.d(TAG, "An outgoing message has been sent."); // Do additional logic... super.onMessageSent(messageId); } @Override public void onSendError(String messageId, Exception exception) { Log.d(TAG, "An outgoing message encountered an error."); // Do additional logic... super.onSendError(messageId, exception); }
Zaktualizuj: AndroidManifest.xml
Po napisaniu niestandardowych zajęć musisz je umieścić w
AndroidManifest.xml
. Upewnij się, że plik manifestu zawiera
scalać narzędzia, zadeklarując odpowiedni atrybut w tagu <manifest>
.
np.:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.firebase.messaging.cpp.samples" xmlns:tools="http://schemas.android.com/tools">
W archiwum firebase_messaging_cpp.aar
znajduje się AndroidManifest.xml
deklaruje domyślną wartość elementu ListenerService
dla FCM. Ten plik manifestu
jest zwykle scalany z plikiem manifestu konkretnego projektu.
ListenerService
może się wyświetlać. ListenerService
musi zostać zastąpiony przez
dzięki niestandardowemu odbiornikowi. Jest to możliwe przez usunięcie domyślnych
ListenerService
i dodanie usługi niestandardowej, której można użyć za pomocą
następujące wiersze w pliku AndroidManifest.xml
projektów:
<service android:name="com.google.firebase.messaging.cpp.ListenerService" tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service>
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>
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
Twój Info.plist
(nie GoogleService-Info.plist
) na platformach Apple,
lub AndroidManifest.xml
na Androida:
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::SetTokenRegistrationOnInitEnabled(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 za pomocą Firebase. Aby dowiedzieć się więcej, zapoznaj się z tą funkcją. w krótki przewodnik – przykład który można pobrać, uruchomić i sprawdzić.
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ń.