Wenn Sie Ihre plattformübergreifende Firebase Cloud Messaging-Clientanwendung mit C++ schreiben möchten, verwenden Sie die Firebase Cloud Messaging API. Das C++ SDK funktioniert sowohl für Android- als auch für Apple-Plattformen. Für jede Plattform ist jedoch eine zusätzliche Einrichtung erforderlich.
Firebase und das FCM SDK einrichten
Android
Fügen Sie Firebase zu Ihrem C++-Projekt hinzu, falls noch nicht geschehen.
In der verlinkten Einrichtungsanleitung finden Sie 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 die Datei
build.gradle
auf Projektebene muss das Maven-Repository von Google in die Abschnittebuildscript
undallprojects
aufgenommen werden.
Erstellen Sie ein Firebase-App-Objekt und übergeben Sie die JNI-Umgebung und die Aktivität:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
Definieren Sie eine Klasse, die die
firebase::messaging::Listener
-Schnittstelle implementiert.Initialisieren Sie FCM und übergeben Sie die App und einen erstellten Listener:
::firebase::messaging::Initialize(app, listener);
Bei Apps, die auf dem Google Play Services SDK basieren, sollte vor dem Zugriff auf die Funktionen geprüft werden, ob auf dem Gerät ein kompatibles Google Play-Dienste-APK vorhanden ist. Weitere Informationen finden Sie unter Google Play-Dienste-APK prüfen.
iOS+
- Fügen Sie Firebase zu Ihrem C++-Projekt hinzu, falls noch nicht geschehen. So richten Sie Ihr Projekt für FCM ein:
- Fügen Sie die FCM-Abhängigkeit in das Podfile Ihres Projekts ein:
pod 'FirebaseMessaging'
- Ziehen Sie die Frameworks
firebase.framework
undfirebase_messaging.framework
aus dem Firebase C++ SDK in Ihr Xcode-Projekt.
- Fügen Sie die FCM-Abhängigkeit in das Podfile Ihres Projekts ein:
Laden Sie Ihren APNs-Authentifizierungsschlüssel in Firebase hoch. Wenn Sie noch keinen APNs-Authentifizierungsschlüssel haben, müssen Sie einen im Apple Developer Member Center erstellen.
-
Wählen Sie in Ihrem Projekt in der Firebase-Konsole das Zahnradsymbol aus, dann Projekteinstellungen und schließlich den Tab Cloud Messaging.
-
Klicken Sie unter Konfiguration der iOS-App bei APNs-Authentifizierungsschlüssel auf die Schaltfläche Hochladen.
-
Suchen Sie nach dem Speicherort, an dem Sie den Schlüssel gespeichert haben, wählen Sie ihn aus und klicken Sie auf Öffnen. Fügen Sie die Schlüssel-ID für den Schlüssel hinzu (verfügbar im Apple Developer Member Center) und klicken Sie auf Hochladen.
-
So konfigurieren Sie Ihr Xcode-Projekt, um Push-Benachrichtigungen zu aktivieren:
- Wählen Sie das Projekt im Navigatorbereich aus.
- Wählen Sie das Projektziel im Editorbereich aus.
Wählen Sie im Editorbereich den Tab Allgemein aus.
- Scrolle nach unten zu Linked Frameworks and Libraries (Verknüpfte Frameworks und Bibliotheken) und klicke dann auf die Schaltfläche +, um Frameworks hinzuzufügen.
Scrollen Sie im angezeigten Fenster zu UserNotifications.framework, klicken Sie auf diesen Eintrag und dann auf Hinzufügen.
Dieses Framework ist nur in Xcode 8 und höher verfügbar und wird von dieser Bibliothek benötigt.
Wählen Sie im Editorbereich den Tab Funktionen aus.
- Stellen Sie Push-Benachrichtigungen auf Ein.
- Scrolle nach unten zu Hintergrundmodi und aktiviere die Option.
- Wählen Sie unter Hintergrundmodi die Option Remote-Benachrichtigungen aus.
Firebase-App-Objekt erstellen:
app = ::firebase::App::Create(::firebase::AppOptions());
Definieren Sie eine Klasse, die die
firebase::messaging::Listener
-Schnittstelle implementiert.Initialisieren Sie Firebase Cloud Messaging und übergeben Sie die App und einen erstellten Listener:
::firebase::messaging::Initialize(app, listener);
Auf das Geräteregistrierungstoken zugreifen
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
-Callback, der in der Klasse definiert werden sollte, die firebase::messaging::Listener
implementiert.
Wenn Sie auf dieses Gerät ausrichten möchten, benötigen Sie Zugriff auf dieses Token.
Hinweis zur Nachrichtenzustellung unter Android
Wenn die App überhaupt nicht ausgeführt wird und ein Nutzer auf eine Benachrichtigung tippt, wird die Nachricht standardmäßig nicht über die integrierten Callbacks von FCM weitergeleitet. In diesem Fall werden Nachrichtennutzlasten über einen Intent
empfangen, der zum Starten der Anwendung verwendet wird. Damit FCM diese eingehenden Nachrichten an den C++-Bibliotheks-Callback weiterleitet, müssen Sie die Methode onNewIntent
in Ihrer Aktivität überschreiben und Intent
an MessageForwardingService
übergeben.
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 die App im Hintergrund ausgeführt wird, wird der Inhalt des Benachrichtigungsfelds verwendet, um die Benachrichtigung in der Taskleiste zu füllen. Dieser Benachrichtigungsinhalt wird jedoch nicht an FCM weitergegeben. Das heißt, Message::notification
ist null.
Zusammenfassung:
App-Status | Benachrichtigung | Daten | Beides |
---|---|---|---|
Vordergrund | OnMessageReceived |
OnMessageReceived |
OnMessageReceived |
Hintergrund | Taskleiste | OnMessageReceived |
Benachrichtigung: Taskleiste Daten: in den Extras des Intents. |
Benutzerdefinierte Nachrichtenverarbeitung unter Android
Standardmäßig werden an die App gesendete Benachrichtigungen an ::firebase::messaging::Listener::OnMessageReceived
übergeben. In einigen Fällen möchten Sie das Standardverhalten jedoch möglicherweise überschreiben. Dazu müssen Sie unter Android benutzerdefinierte Klassen schreiben, die com.google.firebase.messaging.cpp.ListenerService
erweitern, und die AndroidManifest.xml
Ihres Projekts aktualisieren.
Überschreiben Sie die ListenerService
-Methoden.
Die ListenerService
ist die Java-Klasse, die eingehende Nachrichten abfängt, die an die App gesendet werden, und sie an die C++-Bibliothek weiterleitet. Wenn sich die App im Vordergrund befindet (oder wenn sie im Hintergrund ausgeführt wird und eine Nutzlast mit reinen Daten empfängt), werden Nachrichten über einen der in dieser Klasse bereitgestellten Callbacks übergeben. Wenn Sie der Nachrichtenverarbeitung benutzerdefiniertes Verhalten hinzufügen möchten, müssen Sie die Standard-ListenerService
von 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
bietet auch einige andere Methoden, die seltener verwendet werden.
Diese können auch ü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); }
AndroidManifest.xml
aktualisieren
Nachdem Sie die benutzerdefinierten Klassen geschrieben haben, müssen sie in die AndroidManifest.xml
aufgenommen werden, damit sie wirksam werden. Achten Sie darauf, dass das Manifest die Merge-Tools enthält, indem Sie das entsprechende Attribut im <manifest>
-Tag 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 befindet sich eine AndroidManifest.xml
-Datei, in der die Standard-ListenerService
von FCM deklariert werden. Dieses Manifest wird normalerweise mit dem projektspezifischen Manifest zusammengeführt, wodurch die ListenerService
ausgeführt werden kann. ListenerService
muss durch den benutzerdefinierten Listener-Dienst ersetzt werden. Dazu entfernen Sie die Standard-ListenerService
und fügen den benutzerdefinierten Dienst hinzu. Das kann mit den folgenden Zeilen in der AndroidManifest.xml
-Datei Ihres Projekts erfolgen:
<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>
In neuen Versionen des Firebase C++ SDK (ab Version 7.1.0) wird JobIntentService
verwendet. Dies erfordert zusätzliche Änderungen in der Datei AndroidManifest.xml
.
<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 die Geräteausrichtung.
Wenn ein Token generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie vor der Verwendung des Tokens eine explizite Einwilligung einholen möchten, können Sie die Generierung bei der Konfiguration verhindern, indem Sie FCM (und unter Android Analytics) deaktivieren. Fügen Sie dazu einen Metadatenwert zu Ihrem Info.plist
(nicht zu Ihrem GoogleService-Info.plist
) auf Apple-Plattformen oder zu Ihrem AndroidManifest.xml
auf Android hinzu:
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
Wenn Sie FCM wieder aktivieren möchten, können Sie einen Laufzeitaufruf ausführen:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
Dieser Wert bleibt nach dem Festlegen auch nach dem Neustart der App erhalten.
Nachrichten mit Deeplinks auf Android-Geräten verarbeiten
Mit FCM können Nachrichten mit einem Deeplink zu Ihrer App gesendet werden. Wenn Sie Nachrichten mit einem Deeplink empfangen möchten, müssen Sie der Aktivität, die Deeplinks für Ihre App verarbeitet, einen neuen Intent-Filter hinzufügen. Der Intent-Filter sollte Deeplinks Ihrer Domain abfangen. Wenn Ihre Nachrichten keinen Deeplink enthalten, ist diese Konfiguration nicht erforderlich. In der Datei „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>
Sie können auch einen Platzhalter angeben, um den Intent-Filter flexibler zu gestalten. 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 Nutzer auf eine Benachrichtigung tippen, die einen Link zum von Ihnen angegebenen Schema und Host enthält, startet Ihre App die Aktivität mit diesem Intent-Filter, um den Link zu verarbeiten.
Nächste Schritte
Nachdem Sie die Client-App eingerichtet haben, können Sie Downstream- und Themennachrichten mit Firebase senden. Weitere Informationen finden Sie in der Kurzanleitung, die Sie herunterladen, ausführen und ansehen können.
Wenn Sie Ihrer App weitere, komplexere Verhaltensweisen hinzufügen möchten, lesen Sie die Anleitungen zum Senden von Nachrichten von einem App-Server:
Für die Nutzung dieser Funktionen ist eine Serverimplementierung erforderlich.