Übersicht
Bei Ereignissen wie einem eingehenden Anruf erwartet der Nutzer oft eine Push-Benachrichtigung, wenn die App nicht aktiv ist. Sie können Push-Benachrichtigungen auch integrieren mit ConnectionService um eingehende Anrufe über die System-UI anzuzeigen. Diese Anleitung erklärt, wie Sie Ihre Android-App für den Empfang von Push-Benachrichtigungen vom Client SDK konfigurieren.
Vonage mit Firebase verbinden
Um Push-Benachrichtigungen zu erhalten, müssen Sie Vonage mit Firebase verbinden. Hierfür benötigen Sie Folgendes:
- Ihre Firebase-Projekt-ID
- Ihr Firebase Service Account Schlüssel
Vonage Application ID abrufen
Beziehen Sie Ihre Vonage API Application id. Sie können auf die vorhandenen Applications in der Dashboard. Wenn Sie noch keine Anwendung haben, können Sie eine neue Anwendung erstellen über Vonage CLI.
Eine Firebase-Projekt-ID erhalten
Holen Sie sich Ihre Firebase-Projekt-ID aus der Firebase-Konsole. Navigieren Sie zu Firebase console -> Project settings -> General.


Einen Firebase Service Account Schlüssel erhalten
Holen Sie sich Ihren Firebase Server Key von der Firebase-Konsole. Navigieren Sie zu Firebase console -> Project settings -> Service accounts und erzeugen einen neuen privaten Schlüssel.


Verbinden Sie Ihre Vonage-Applikation mit Firebase
Sie laden Ihre Anmeldedaten über das API-Dashboard zu Vonage hoch. Öffnen Sie Ihre Anwendung auf der Dashboardund öffnen Sie dann die Registerkarte "Push-Benachrichtigungen aktivieren":

Geben Sie Ihre Firebase Project ID ein und laden Sie Ihren Service Account Key aus dem vorherigen Schritt hoch.
Verwendung des Terminals
Sie können den Vonage Backend-Push-Dienst auch über das Terminal mit der Firebase-Anwendung verbinden. Sie benötigen Ihre Vonage Application ID und müssen ein Vonage admin JWT generieren.
# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key
# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
REM A command with parameters
vonage jwt create ^
--app-id='00000000-0000-0000-0000-000000000000' ^
--private-key=./private.key
REM Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
ANMERKUNG Ein Admin-JWT ist ein JWT ohne Sub-Claim. Weitere Einzelheiten zur Erzeugung eines JWT finden Sie in der Authentifizierungsleitfaden.
Füllen Sie VONAGE_APP_ID, VONAGE_JWT, FIREBASE_PROJECT_IDund FIREBASE_SERVICE_ACCOUNT mit den zuvor erhaltenen
Werten und führen Sie den folgenden Befehl aus, um die Anfrage zu senden. Ihr FIREBASE_SERVICE_ACCOUNT sollte der private Schlüssel von
Firebase sein, als Zeichenkette mit escapeten Sonderzeichen:
VONAGE_APP_ID=
VONAGE_JWT=
FIREBASE_PROJECT_ID=
FIREBASE_SERVICE_ACCOUNT=
curl -v -X PUT \
-H "Authorization: Bearer $VONAGE_JWT" \
-H "Content-Type: application/json" \
-d "{\"token\":\"$FIREBASE_SERVICE_ACCOUNT\", \"projectId\":\"$FIREBASE_PROJECT_ID\"}" \
https://api.nexmo.com/v1/applications/$VONAGE_APP_ID/push_tokens/android
Wenn Sie ein vorhandenes Token aktualisieren, löschen Sie zuerst das vorhandene Token, indem Sie eine DELETE Anfrage an denselben
Endpunkt mit der gleichen Authentifizierung.
ANMERKUNG An diesem Endpunkt findet keine Validierung statt. Die 200 Rückgabecode bedeutet, dass Vonage die Daten erhalten und gespeichert
aber nicht überprüft hat, ob die Werte gültig sind.
Firebase-Projekt für Ihre Android-Applikation einrichten
Um Push-Benachrichtigungen für Ihre Android-Anwendung zu aktivieren, müssen Sie Ihre Android-Anwendung konfigurieren.
Konfigurieren Sie Ihr Android-Projekt
Beginnen wir damit, Ihr Android-Projekt mit den erforderlichen Abhängigkeiten zu konfigurieren.
Hinzufügen der Client SDK-Abhängigkeit
Hinzufügen des Client SDK für Ihr Projekt.
Hinzufügen der Firebase-Konfiguration zu Ihrer Applikation
Bevor wir die Push-Benachrichtigungs-spezifische Konfiguration einrichten, müssen Sie einige allgemeine Schritte unternehmen, um Folgendes einzurichten Firebase innerhalb Ihrer Anwendung.
ANMERKUNG dass Sie diesen Schritt überspringen können, wenn Ihre Anwendung bereits andere Firebase-Produkte verwendet.
Klicken Sie in Ihrem Firebase-Projekt auf die Option "Android-App hinzufügen":

Füllen Sie das angezeigte Formular aus, um Ihre Anwendung im Firebase-Projekt zu registrieren

Sie erhalten dann eine Schaltfläche "Download google-services.json", klicken Sie darauf und laden Sie die Datei herunter.
Wechseln Sie nun zur Projektansicht in Android Studio, um Ihr Projektstammverzeichnis zu sehen.
Verschieben Sie die heruntergeladene Datei google-services.json in das Stammverzeichnis Ihres Android-App-Moduls.

Schließlich müssen Sie das Google Services Plugin hinzufügen, das die Datei google-services.json lädt. Ändern Sie Ihre
Projektebene build.gradle Datei, um dies aufzunehmen:
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google()
}
dependencies {
// Add this line
classpath("com.google.gms:google-services:4.3.10")
}
}
allprojects {
repositories {
// Check that you have the following line (if not, add it):
google()
}
}
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// Add this line
classpath 'com.google.gms:google-services:4.3.10'
}
}
allprojects {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
}
Und in Ihrer App-Ebene build.gradle die Firebase BoM-Basis implementieren
plugins {
id("com.android.application")
id("com.google.gms.google-services")
}
dependencies {
// Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:30.1.0')
}
apply plugin: 'com.android.application'
// Add this line
apply plugin: 'com.google.gms.google-services'
dependencies {
// Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:30.1.0')
}
Hinzufügen der Firebase Cloud Messaging-Abhängigkeit
In Ihrer IDE, auf der Ebene Ihrer Anwendung build.gradle Datei (normalerweise app/build.gradle), fügen Sie die firebase-messaging Abhängigkeit:
dependencies{
implementation("com.google.firebase:firebase-messaging:21.0.1")
}
dependencies{
implementation 'com.google.firebase:firebase-messaging:21.0.1'
}
HINWEIS: Die aktuelle Versionsnummer finden Sie in der Firebase-Website.
Push-Token registrieren
Um den Push zu empfangen, müssen Sie das Push-Token des Benutzers im Backend von Vonage registrieren, indem Sie
mit registerDevicePushToken()
val token = "token"
client.createSession(token, null) { error, response ->
when {
error != null -> { println("there was an error: ${error}") }
else -> {
val pushToken: String? = context?.getSharedPreferences("_", com.google.firebase.messaging.FirebaseMessagingService.MODE_PRIVATE)?.getString("fb", "empty");
if (pushToken != null){
client.registerDevicePushToken(pushToken) { err, deviceId ->
if (err != null) {
println("there was an error: $err")
} else {
println("registered device push token successfully - device id: $deviceId")
}
}
}
}
}
}
registerDevicePushToken() gibt eine eindeutige Geräte-ID für das Gerät des Benutzers zurück. Benutzer können mehrere Geräte registrieren.
Die Geräte-ID kann später verwendet werden, um das Gerät des Benutzers vom Empfang zukünftiger Push-Benachrichtigungen auszuschließen.
client.unregisterDevicePushToken("Device_ID") { error ->
if (error == null) {
// device id deleted
}
}
Implementierung eines Firebase-Empfängerdienstes
Um Firebase-Nachrichten zu empfangen, müssen Sie den Firebase-Nachrichtendienst implementieren. Sie müssen auch überprüfen, ob die
Nachricht eine Vonage-Nachricht ist und wenn ja, welcher Typ, indem Sie die getPushNotificationType() Helper-Methode. Wenn es sich um
eine INCOMING_CALL verarbeiten wir entsprechend, indem wir unsere Hilfsmethoden verwenden processPushInvite().
class FirebaseMessagingService: FirebaseMessagingService() {
val invite: CallId?
@RequiresApi(Build.VERSION_CODES.O)
override fun onNewToken(token: String) {
super.onNewToken(token)
println("PUSH TOKEN: $token")
getSharedPreferences("_", MODE_PRIVATE).edit().putString("fb", token).apply();
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
val dataString = remoteMessage.data.toString()
val type: PushType = VoiceClient.getPushNotificationType(dataString)
when (type) {
INCOMING_CALL -> {
this.invite = App.client.processPushCallInvite(dataString)
}
else -> {}
}
}
//...
}
Eingehende Anrufe annehmen
Wenn processPushCallInvite erfolgreich ist, erhalten Sie vom SDK eine Einladung zu einem eingehenden Anruf für Ihre Anwendung. Zum Beantworten
die erhaltene Einladung von der Firebase-Push-Benachrichtigung:
val call: CallId?
invite?.let {
client.answer(it) {
err ->
when {
err != null -> {
print("error answering call")
}
else -> {
call = it
print("call answered: $voiceCall")
}
}
}
}
Abweisen eines eingehenden Anrufs
Um die erhaltene Einladung von der Firebase-Push-Benachrichtigung abzulehnen:
invite?.let {
client.reject(it) { err ->
when {
err != null -> {
print("error rejecting call")
}
else -> {
print("call rejected")
}
}
}
}
Schlussfolgerung
In dieser Anleitung haben Sie gesehen, wie man Push-Benachrichtigungen einrichtet.
Stimme:
- Sie können integrieren ConnectionService in Ihrer Anwendung, die es ermöglicht, Anrufe in die Systemschnittstelle zu integrieren.
- Ansicht der ConnectionService Beispielprojekt auf GitHub.