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

  1. Ihre Firebase-Projekt-ID
  2. 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.

Displaying the project settings location
Displaying the project ID location

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.

Displaying the project settings location
Displaying the server key location

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

Push Upload on the dashboard

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

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

Add App getting started screen with options for ios, android, web, unity and flutter

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

Form to register your application with your Firebase project, package name is required.

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.

Android studio with project view selected and the google-service.json added in the app module directory

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()
    }
}

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')
}

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")
}

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: