Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Richten Sie eine Firebase Cloud Messaging-Client-App mit C ++ ein

Verwenden Sie die Firebase Cloud Messaging- API, um Ihre plattformübergreifende Firebase Cloud Messaging-Client-App mit C ++ zu schreiben. Das C ++ SDK funktioniert sowohl für Android als auch für iOS, wobei für jede Plattform einige zusätzliche Einstellungen erforderlich sind.

Richten Sie Firebase und das FCM SDK ein

Android

  1. Wenn Sie dies noch nicht getan haben, fügen Sie Firebase zu Ihrem C ++ - Projekt hinzu .

    • Überprüfen Sie in den Anweisungen zum verknüpften Setup 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.

    • build.gradle in Ihrer build.gradle Datei auf Projektebene sicher, dass das Maven-Repository von Google sowohl in Ihrem buildscript als auch in Ihrem allprojects Abschnitt enthalten ist.

  2. Erstellen Sie ein Firebase-App-Objekt, indem Sie die JNI-Umgebung und Aktivität übergeben:

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

  3. Definieren Sie eine Klasse, die die Schnittstelle firebase::messaging::Listener implementiert.

  4. Initialisieren Sie FCM, indem Sie die App und einen erstellten Listener übergeben:

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

  5. Apps, die auf dem SDK für Google Play-Dienste basieren, sollten das Gerät vor dem Zugriff auf die Funktionen auf ein kompatibles APK für Google Play-Dienste überprüfen. Weitere Informationen finden Sie unter Überprüfen auf Google Play-Dienste APK .

iOS

  1. Sie benötigen ein gültiges APN- Zertifikat. Wenn Sie noch keine haben, lesen Sie SSL-Zertifikate für Bereitstellungs-APNs .
  2. Wenn Sie dies noch nicht getan haben, fügen Sie Firebase zu Ihrem C ++ - Projekt hinzu . So richten Sie Ihr Projekt für FCM ein:
    1. Fügen Sie im Podfile Ihres Projekts die FCM-Abhängigkeit hinzu:
      pod 'Firebase/Messaging'
    2. Ziehen Sie die Frameworks firebase.framework und firebase_messaging.framework aus dem Firebase C ++ SDK in Ihr Xcode-Projekt.
  3. Konfigurieren Sie Ihr Xcode-Projekt so, dass Push-Benachrichtigungen aktiviert werden:

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

      1. Scrollen Sie nach unten zu Verknüpfte Frameworks und Bibliotheken und klicken Sie auf die Schaltfläche + , um Frameworks hinzuzufügen.
      2. Scrollen Sie im angezeigten Fenster zu UserNotifications.framework , klicken Sie auf diesen Eintrag und dann auf Hinzufügen .

        Dieses Framework wird nur in Xcode v8 und höher angezeigt 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. Scrollen Sie nach unten zu Hintergrundmodi und schalten Sie es dann auf Ein .
      3. Wählen Sie unter Hintergrundmodi die Option Remote-Benachrichtigungen aus .
  4. Erstellen Sie ein Firebase-App-Objekt:

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

  5. Definieren Sie eine Klasse, die die Schnittstelle firebase::messaging::Listener implementiert.

  6. Initialisieren Sie Firebase Cloud Messaging, indem Sie die App und einen erstellten Listener übergeben:

    ::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 erhält das Token mit dem OnTokenReceived Rückruf, der in der Klasse definiert werden sollte, die OnTokenReceived firebase::messaging::Listener implementiert.

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

Hinweis zur Nachrichtenübermittlung unter Android

Wenn die App überhaupt nicht ausgeführt wird und ein Benutzer auf eine Benachrichtigung tippt, wird die Nachricht standardmäßig nicht über die in FCMs integrierten Rückrufe weitergeleitet. In diesem Fall werden Nachrichtennutzdaten über eine Intent empfangen, die zum Starten der Anwendung verwendet wird. Damit FCM diese eingehenden Nachrichten an den Rückruf der C ++ - Bibliothek weiterleitet, müssen Sie die Methode onNewIntent in Ihrer Aktivität überschreiben und die Intent an den 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);
  }
}

Nachrichten, die empfangen werden, während sich die App im Hintergrund befindet, enthalten den Inhalt ihres Benachrichtigungsfelds, mit dem die Benachrichtigung in der Taskleiste ausgefüllt wird. Dieser Benachrichtigungsinhalt wird jedoch nicht an FCM übermittelt. Das heißt, Message::notification ist null.

Zusammenfassend:

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

Benutzerdefinierte Nachrichtenbehandlung unter Android

Standardmäßig werden an die App gesendete Benachrichtigungen an ::firebase::messaging::Listener::OnMessageReceived . In einigen Fällen möchten Sie jedoch möglicherweise das Standardverhalten überschreiben. Um dies unter Android zu tun, müssen Sie benutzerdefinierte Klassen schreiben, die com.google.firebase.messaging.cpp.ListenerService erweitern und die com.google.firebase.messaging.cpp.ListenerService Ihres Projekts AndroidManifest.xml .

ListenerService Methoden überschreiben.

Der ListenerService ist die Java-Klasse, die eingehende Nachrichten, die an die App gesendet werden, abfängt und an die C ++ - Bibliothek weiterleitet. Wenn sich die App im Vordergrund befindet (oder wenn die App der Hintergrund ist und eine reine Datennutzlast empfängt), werden Nachrichten über einen der in dieser Klasse bereitgestellten Rückrufe weitergeleitet. Um der Nachrichtenbehandlung ein benutzerdefiniertes Verhalten hinzuzufügen, müssen Sie den Standard- ListenerService FCM erweitern:

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

class MyListenerService extends ListenerService {

Durch Überschreiben der Methode ListenerService.onMessageReceived können Sie Aktionen basierend auf dem empfangenen RemoteMessage- Objekt ausführen und die Nachrichtendaten abrufen :

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

ListenerService verfügt auch über einige andere Methoden, die weniger häufig verwendet werden. Diese können ebenfalls überschrieben werden. Weitere Informationen finden Sie in der 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);
}

Aktualisieren Sie AndroidManifest.xml

Sobald Ihre benutzerdefinierten Klassen geschrieben wurden, müssen sie in die AndroidManifest.xml , damit sie wirksam werden. Stellen Sie sicher, dass das Manifest die Zusammenführungswerkzeuge enthält, indem Sie das entsprechende Attribut im <manifest> -Tag wie folgt deklarieren:

<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 normalerweise mit dem projektspezifischen Manifest zusammengeführt, mit dem der ListenerService ausgeführt werden kann. Dieser ListenerService muss durch den Cusom Listener Service ersetzt werden. Dies wird erreicht, indem Sie den Standard- ListenerService entfernen und den benutzerdefinierten Service hinzufügen. AndroidManifest.xml kann mit den folgenden Zeilen Ihrer AndroidManifest.xml :

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

Verhindern Sie die automatische Initialisierung

FCM generiert eine Instanz-ID, die als Registrierungstoken in FCM verwendet wird. Wenn eine Instanz-ID generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie vor der Verwendung der Instanz-ID eine explizite Anmeldung erhalten möchten, können Sie die Generierung zum Zeitpunkt der Konfiguration verhindern, indem Sie FCM (und unter Android Analytics) deaktivieren. . Info.plist Sie dazu Ihrer Info.plist (nicht Ihrer GoogleService-Info.plist ) unter iOS oder Ihrer AndroidManifest.xml unter Android einen Metadatenwert AndroidManifest.xml :

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

Um FCM wieder zu aktivieren, können Sie einen Laufzeitaufruf ausführen:

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

Dieser Wert bleibt auch nach dem Festlegen des App-Neustarts erhalten.

Mit FCM können Nachrichten gesendet werden, die einen Deep Link in Ihre App enthalten. 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 Absichtsfilter hinzufügen. Der Absichtsfilter sollte tiefe Links Ihrer Domain abfangen. 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 Absichtsfilter flexibler zu gestalten. Beispielsweise:

<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

Nach dem Einrichten der Client-App können Sie Downstream- und Themennachrichten mit der Firebase senden. Weitere Informationen finden Sie im Schnellstartbeispiel, das Sie herunterladen, ausführen und überprüfen können.

Informationen zum Hinzufügen eines anderen, erweiterten Verhaltens zu Ihrer App finden Sie in den Handbüchern zum Senden von Nachrichten von einem App-Server:

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