Catch up on everthing we announced at this year's Firebase Summit. Learn more

Eine Firebase Cloud Messaging-Client-App mit C++ einrichten

Um Ihre Cross-Plattform Firebase Cloud Messaging Client - Anwendung mit C ++ zu schreiben, verwenden Sie die Firebase Cloud Messaging API. Das C++ SDK funktioniert sowohl für Android- als auch für Apple-Plattformen, wobei für jede Plattform einige zusätzliche Einstellungen erforderlich sind.

Firebase und das FCM SDK einrichten

Android

  1. Wenn Sie nicht bereits haben, fügen Sie Firebase zu Ihrem C ++ Projekt .

    • Lesen Sie in den verlinkten Einrichtungsanweisungen die Geräte- und App-Anforderungen für die Verwendung des Firebase C++ SDK, einschließlich der Empfehlung, CMake zum Erstellen Ihrer App zu verwenden.

    • In Ihrer Projektebene build.gradle Datei, stellen Sie sicher , dass die Google-Maven - Repository in beide enthalten buildscript und allprojects Abschnitte.

  2. Erstellen Sie ein Firebase App - Objekt, vorbei an der JNI - Umgebung und Aktivität:

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

  3. Definieren Sie eine Klasse, die Geräte der firebase::messaging::Listener - Schnittstelle.

  4. Initialisieren FCM, Vorbeigehen in der App und einer umbauten Zuhörer:

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

  5. Apps, die das SDK der Google Play-Dienste verwenden, sollten das Gerät auf ein kompatibles APK für die Google Play-Dienste überprüfen, bevor sie auf die Funktionen zugreifen. Um mehr zu erfahren, siehe Überprüfen Sie für Google Play - Dienste APK .

iOS+

  1. Sie benötigen ein gültiges APNs - Zertifikat. Wenn Sie noch kein Konto haben, stellen Sie sicher , eine in der erstellen Apple Developer Member Center .
  2. Wenn Sie nicht bereits haben, fügen Sie Firebase zu Ihrem C ++ Projekt . So richten Sie Ihr Projekt für FCM ein:
    1. In Ihrem Projekt Podfile, fügen Sie die FCM - Abhängigkeit:
      pod 'Firebase/Messaging'
    2. Ziehen Sie den firebase.framework und firebase_messaging.framework Frameworks in Ihr Xcode - Projekt von der Firebase C ++ SDK .
  3. Konfigurieren Sie Ihr Xcode-Projekt, um Push-Benachrichtigungen zu aktivieren:

    1. Wählen Sie das Projekt aus dem Bereich Navigator.
    2. Wählen Sie das Projektziel aus dem Bereich Editor.
    3. Wählen Sie die Registerkarte Allgemein aus dem Bereich Editor.

      1. Scrollen Sie zum Linked Frameworks und Bibliotheken, klicken Sie dann auf die Schaltfläche + Frameworks hinzuzufügen.
      2. In dem Fenster , das angezeigt wird , auf UserNotifications.framework blättern, klicken Sie auf diesen Eintrag, klicken Sie auf Hinzufügen.

        Dieses Framework erscheint nur in Xcode v8 und höher und wird von dieser Bibliothek benötigt.

    4. Wählen Sie die Registerkarte Funktionen aus dem Bereich Editor.

      1. Schalten Sie Push - Benachrichtigungen auf Ein .
      2. Blättern Sie zum Background - Modus, schalten Sie es dann auf On.
      3. Wählen Sie Remote - Benachrichtigungen unter Background - Modi.
  4. Erstellen Sie ein Firebase App - Objekt:

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

  5. Definieren Sie eine Klasse, die Geräte der firebase::messaging::Listener - Schnittstelle.

  6. Initialisieren Firebase Cloud Messaging, Vorbeigehen in der App und einer umbauten Zuhörer:

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

Greifen Sie auf das Geräteregistrierungstoken zu

Beim Initialisieren der Firebase Cloud Messaging-Bibliothek wird ein Registrierungstoken für die Client-App-Instanz angefordert. Die App wird das Token mit dem Empfang OnTokenReceived Rückruf, die in der Klasse definiert werden sollen , dass Geräte firebase::messaging::Listener .

Wenn Sie auf dieses bestimmte Gerät abzielen möchten, benötigen Sie Zugriff auf dieses Token.

Hinweis zur Nachrichtenzustellung auf Android

Wenn die App überhaupt nicht ausgeführt wird und ein Benutzer auf eine Benachrichtigung tippt, wird die Nachricht standardmäßig nicht über die integrierten Rückrufe von FCM geleitet. In diesem Fall Nachricht Nutzlasten werden über ein empfangene Intent verwendet , um die Anwendung zu starten. Haben FCM uns darauf , diese eingehenden Nachrichten an die C ++ Bibliothek Rückruf, müssen Sie die Methode zu überschreiben onNewIntent in Ihrer Aktivität und den Pass Intent zum 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);
  }
}

Bei Nachrichten, die empfangen werden, während sich die App im Hintergrund befindet, wird der Inhalt ihres Benachrichtigungsfelds zum Ausfüllen der Taskleistenbenachrichtigung verwendet, aber dieser Benachrichtigungsinhalt wird nicht an FCM übermittelt. Das heißt, Message::notification wird eine Null sein.

Zusammenfassend:

App-Status Benachrichtigung Daten Beide
Vordergrund OnMessageReceived OnMessageReceived OnMessageReceived
Hintergrund System Tray OnMessageReceived Benachrichtigung: Taskleiste
Daten: in Extras der Absicht.

Benutzerdefinierte Nachrichtenbehandlung auf Android

In der Standardeinstellung Meldungen an die App gesendet werden , übergeben ::firebase::messaging::Listener::OnMessageReceived , aber in einigen Fällen können Sie das Standardverhalten außer Kraft setzen möchten. Um dies zu tun auf Android müssen Sie benutzerdefinierte Klassen schreiben , die erweitern com.google.firebase.messaging.cpp.ListenerService sowie Aktualisierung Ihres Projekts AndroidManifest.xml .

Außer Kraft setzen ListenerService Methoden.

Die ListenerService ist die Java - Klasse, die fängt eingehende Nachrichten an die App und leitet sie an die C ++ Bibliothek gesendet. Wenn sich die App im Vordergrund befindet (oder wenn die App im Hintergrund ist und sie eine Nur-Daten-Nutzlast empfängt), durchlaufen Nachrichten einen der für diese Klasse bereitgestellten Rückrufe. Um benutzerdefiniertes Verhalten der Nachrichtenbehandlung hinzufügen, müssen Sie FCM-Standard erweitern ListenerService :

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

class MyListenerService extends ListenerService {

Durch das Überschreiben der Methode ListenerService.onMessageReceived , können Sie Aktionen ausführen , auf dem empfangenen Basis RemoteMessage Objekt und die Nachrichtendaten erhalten:

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

ListenerService hat auch ein paar andere Methoden , die weniger häufig verwendet werden. Diese können als auch außer Kraft gesetzt werden, um weitere Informationen zu der sehen FirebaseMessagingService Referenz.

@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);
}

Update AndroidManifest.xml

Sobald Ihre benutzerdefinierten Klassen geschrieben worden sind, müssen sie in der aufgenommen werden AndroidManifest.xml wirksam werden. Stellen Sie sicher , dass das Manifest die merge - Tools enthält in dem das entsprechende Attribut , indem er erklärt <manifest> Tag, etwa so:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

Im firebase_messaging_cpp.aar Archiv gibt es eine AndroidManifest.xml Datei , die Standard - FCM erklärt ListenerService . Dieses Manifest wird in der Regel mit dem projektspezifischen Manifest zusammengefasst , das ist , wie die ListenerService der Lage ist , zu laufen. Diese ListenerService muss mit dem cusom Zuhörer Dienst ersetzt. Das wird durch Entfernen des Standard erreicht ListenerService und das Hinzufügen des benutzerdefinierten Service, der Ihre Projekte mit den folgenden Zeilen durchgeführt werden kann AndroidManifest.xml Datei:

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

Neue Versionen von Firebase C ++ SDK (7.1.0 ab) Verwendung JobIntentService , die in zusätzliche Modifikationen erfordert AndroidManifest.xml Datei.

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

Automatische Initialisierung verhindern

FCM generiert ein Registrierungstoken für das Geräte-Targeting. Wenn ein Token generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie vor der Verwendung des Tokens ein explizites Opt-In erhalten möchten, können Sie die Generierung zum Zeitpunkt der Konfiguration verhindern, indem Sie FCM (und auf Android, Analytics) deaktivieren. Dazu fügen Sie einen Metadatenwert für Ihren Info.plist (nicht Ihr GoogleService-Info.plist ) auf Apple - Plattformen oder Ihre AndroidManifest.xml auf 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>

Schnell

FirebaseMessagingAutoInitEnabled = NO

Um FCM wieder zu aktivieren, können Sie einen Laufzeitaufruf tätigen:

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

Dieser Wert bleibt über App-Neustarts hinweg bestehen, sobald er festgelegt wurde.

FCM ermöglicht das Senden von Nachrichten mit einem Deep-Link in Ihre App. Um Nachrichten zu empfangen, die einen Deep-Link enthalten, müssen Sie der Aktivität, die Deep-Links für Ihre App verarbeitet, einen neuen Intent-Filter hinzufügen. Der Intent-Filter sollte Deeplinks Ihrer Domain erfassen. Wenn Ihre Nachrichten keinen Deep-Link enthalten, ist diese Konfiguration nicht erforderlich. 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>

Es ist auch möglich, einen Platzhalter anzugeben, um den Intent-Filter flexibler zu gestalten. Zum Beispiel:

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

Wenn Benutzer auf eine Benachrichtigung tippen, die einen Link zu dem von Ihnen angegebenen Schema und Host enthält, startet Ihre App die Aktivität mit diesem Absichtsfilter, um den Link zu verarbeiten.

Nächste Schritte

Nachdem Sie die Client-App eingerichtet haben, können Sie Downstream- und Themennachrichten mit der Firebase senden. Um mehr zu erfahren, sehen diese Funktionalität in der gezeigten quickstart Probe , die Sie herunterladen können, laufen, und zu überprüfen.

Informationen zum Hinzufügen weiterer, erweiterter Verhaltensweisen zu Ihrer App finden Sie in den Anleitungen zum Senden von Nachrichten von einem App-Server:

Denken Sie daran , dass Sie einen benötigen Server - Implementierung dieser Funktionen zu nutzen.