Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Skonfiguruj aplikację kliencką Firebase Cloud Messaging w języku C ++

Aby napisać wieloplatformową aplikację kliencką Firebase Cloud Messaging w języku C ++, użyj interfejsu Firebase Cloud Messaging API. C ++ SDK działa zarówno na Androida, jak i iOS, przy czym dla każdej platformy wymagana jest dodatkowa konfiguracja.

Skonfiguruj Firebase i FCM SDK

Android

  1. Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do projektu C ++ .

    • W połączonych instrukcjach konfiguracji zapoznaj się z wymaganiami dotyczącymi urządzenia i aplikacji w zakresie korzystania z pakietu SDK Firebase C ++, w tym z zaleceniem użycia narzędzia CMake do tworzenia aplikacji.

    • Upewnij się, że w pliku build.gradle poziomie projektu uwzględniono repozytorium Google Maven zarówno w sekcji buildscript i w sekcji allprojects .

  2. Utwórz obiekt aplikacji Firebase, przekazując środowisko JNI i działanie:

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

  3. Zdefiniuj klasę, która implementuje interfejs firebase::messaging::Listener .

  4. Zainicjuj FCM, przekazując aplikację i skonstruowany odbiornik:

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

  5. Aplikacje korzystające z pakietu SDK usług Google Play powinny sprawdzać urządzenie pod kątem kompatybilnego pakietu APK usług Google Play przed uzyskaniem dostępu do funkcji. Aby dowiedzieć się więcej, zapoznaj się z plikiem APK usługi Google Play .

iOS

  1. Potrzebujesz ważnego certyfikatu APNs . Jeśli jeszcze go nie masz, zapoznaj się z tematem Udostępnianie certyfikatów SSL APN .
  2. Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do projektu C ++ . Następnie, aby skonfigurować projekt dla FCM:
    1. W pliku podfile projektu dodaj zależność FCM:
      pod 'Firebase/Messaging'
    2. Przeciągnij struktury firebase.framework i firebase_messaging.framework do projektu Xcode z zestawu Firebase C ++ SDK .
  3. Skonfiguruj projekt Xcode, aby włączyć powiadomienia push:

    1. Wybierz projekt z obszaru Nawigatora .
    2. Wybierz cel projektu z obszaru edytora .
    3. Wybierz kartę Ogólne z obszaru Edytor .

      1. Przewiń w dół do Połączonych struktur i bibliotek , a następnie kliknij przycisk + , aby dodać struktury.
      2. W wyświetlonym oknie przewiń do UserNotifications.framework , kliknij ten wpis, a następnie kliknij przycisk Dodaj .

        Ta struktura pojawia się tylko w Xcode v8 i nowszych i jest wymagana przez tę bibliotekę.

    4. Wybierz kartę Możliwości z obszaru Edytor .

      1. Switch powiadomień push Wł.
      2. Przewiń w dół do tła Tryby, a następnie przełączyć ją na Wł.
      3. Wybierz Zdalne powiadomienia w Tryby w tle .
  4. Utwórz obiekt aplikacji Firebase:

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

  5. Zdefiniuj klasę, która implementuje interfejs firebase::messaging::Listener .

  6. Zainicjuj komunikację w chmurze Firebase, przekazując aplikację i skonstruowany odbiornik:

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

Uzyskaj dostęp do tokena rejestracji urządzenia

Po zainicjowaniu biblioteki Firebase Cloud Messaging żądany jest token rejestracji dla instancji aplikacji klienckiej. Aplikacja otrzyma token z wywołaniem zwrotnym OnTokenReceived , które należy zdefiniować w klasie implementującej firebase::messaging::Listener .

Jeśli chcesz kierować reklamy na to konkretne urządzenie, potrzebujesz dostępu do tego tokena.

Uwaga dotycząca dostarczania wiadomości w systemie Android

Gdy aplikacja w ogóle nie działa, a użytkownik dotyka powiadomienia, 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. Aby mieć FCM naprzód tych wiadomości przychodzących do biblioteki C ++ zwrotnego, trzeba zastąpić metodę onNewIntent w swojej działalności i przekazać 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());
    startService(message);
  }
}

W wiadomościach odebranych, gdy aplikacja działa w tle, zawartość pola powiadomień jest używana do zapełniania powiadomienia na pasku zadań, ale treść powiadomienia nie będzie przekazywana do FCM. Oznacza to, że Message::notification będzie miała wartość null.

W podsumowaniu:

Stan aplikacji Powiadomienie Dane Obie
Pierwszoplanowy OnMessageReceived OnMessageReceived OnMessageReceived
tło Zasobnik systemowy OnMessageReceived Powiadomienie: zasobnik systemowy
Dane: w dodatkach intencji.

Obsługa niestandardowych wiadomości w systemie Android

Domyślnie powiadomienia wysyłane do aplikacji są przekazywane do ::firebase::messaging::Listener::OnMessageReceived , ale w niektórych przypadkach możesz chcieć przesłonić domyślne zachowanie. Aby to zrobić na Androidzie, musisz napisać niestandardowe klasy, które rozszerzają com.google.firebase.messaging.cpp.ListenerService a także zaktualizować AndroidManifest.xml projektu.

Zastąp metody ListenerService .

ListenerService to klasa Java, która przechwytuje wiadomości przychodzące wysyłane do aplikacji i kieruje je do biblioteki C ++. Gdy aplikacja jest na pierwszym planie (lub gdy aplikacja działa w tle i odbiera ładunek zawierający tylko dane), komunikaty będą przechodzić przez jedno z wywołań zwrotnych w tej klasie. Aby dodać niestandardowe zachowanie do obsługi wiadomości, musisz rozszerzyć domyślną ListenerService FCM:

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

Zastępując metodę ListenerService.onMessageReceived , możesz wykonać akcje na podstawie odebranego obiektu RemoteMessage i pobrać dane komunikatu:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService ma również kilka innych metod, które są używane rzadziej. Można je również zastąpić. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą usługi FirebaseMessagingService .

@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 klas należy je uwzględnić w AndroidManifest.xml aby AndroidManifest.xml skutek. Upewnij się, że manifest zawiera narzędzia do scalania, deklarując odpowiedni atrybut wewnątrz tagu <manifest> , na przykład:

<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ę plik AndroidManifest.xml , który deklaruje domyślną ListenerService FCM. Ten manifest jest zwykle scalany z manifestem specyficznym dla projektu, w ten sposób można uruchomić ListenerService . Ta usługa ListenerService musi zostać zastąpiona przez usługę nasłuchiwania cusom. Można to osiągnąć, usuwając domyślną ListenerService i dodając niestandardową usługę, co można zrobić za pomocą następujących wierszy 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>

Zapobiegaj automatycznej inicjalizacji

FCM generuje identyfikator wystąpienia, który jest używany jako token rejestracji w FCM. Po wygenerowaniu identyfikatora instancji biblioteka prześle identyfikator i dane konfiguracyjne do Firebase.Jeśli chcesz uzyskać wyraźną zgodę przed użyciem identyfikatora instancji, możesz uniemożliwić generowanie w czasie konfiguracji, wyłączając FCM (a na Androidzie Analytics) . Aby to zrobić, dodaj wartość metadanych do swojego Info.plist (nie GoogleService-Info.plist ) w systemie iOS lub do GoogleService-Info.plist 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>

iOS

FirebaseMessagingAutoInitEnabled = NO

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

::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);

Po ustawieniu ta wartość utrzymuje się po ponownym uruchomieniu aplikacji.

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 obsługującego precyzyjne linki w Twojej aplikacji. Filtr intencji powinien wychwytywać precyzyjne linki do Twojej domeny. Jeśli Twoje wiadomości nie zawierają głębokiego 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żytkownik dotknie powiadomienia zawierającego łącze do schematu i hosta określonego przez użytkownika, 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 przychodzące i tematować za pomocą Firebase. Aby dowiedzieć się więcej, zobacz tę funkcję przedstawioną w przykładzie szybkiego startu, który można pobrać, uruchomić i przejrzeć.

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

Pamiętaj, że aby korzystać z tych funkcji, potrzebujesz implementacji serwera .