Konfigurowanie aplikacji klienckiej Komunikacja w chmurze Firebase (FCM) w języku C++

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

  1. 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 środowiskach buildscript i Sekcje: allprojects.

    .
  2. Utwórz obiekt aplikacji Firebase, przekazując w środowisku JNI Aktywność:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. Zdefiniuj klasę, która implementuje funkcję firebase::messaging::Listener za pomocą prostego interfejsu online.

  4. Zainicjuj FCM, przekazując w aplikacji i utworzony detektor:

    ::firebase::messaging::Initialize(app, listener);

  5. 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+

  1. Jeśli jeszcze nie masz tego za sobą, dodaj Firebase do swojego projektu w C++, Następnie: aby skonfigurować projekt dla usługi FCM:
    1. W pliku Podfile projektu dodaj zależność FCM:
      pod 'FirebaseMessaging'
    2. Przeciągnij firebase.framework i firebase_messaging.framework platformy do projektu Xcode z pakietu SDK Firebase C++.
  2. 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.

  3. Skonfiguruj projekt Xcode, aby włączyć powiadomienia push:

    1. Wybierz projekt w obszarze Nawigator.
    2. W obszarze edycji wybierz miejsce docelowe projektu.
    3. W obszarze edytora wybierz kartę Ogólne.

      1. Przewiń w dół do sekcji Połączone platformy i biblioteki, a potem kliknij kliknij przycisk +, aby dodać platformy.
      2. 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ę.

    4. W obszarze Edytora kliknij kartę Możliwości.

      1. Ustaw Powiadomienia push w pozycji Włączone.
      2. Przewiń w dół do sekcji Tryby w tle i ustaw przełącznik w pozycji Wł.
      3. W sekcji Tryby w tle wybierz Powiadomienia zdalne.
  4. Utwórz obiekt aplikacji Firebase:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. Zdefiniuj klasę, która implementuje funkcję firebase::messaging::Listener za pomocą prostego interfejsu online.

  6. 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.

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