Visión general
Ante eventos como un nuevo mensaje o una llamada entrante, el usuario suele esperar recibir una notificación push. Si la aplicación no está activa (está en segundo plano), las notificaciones push son la única forma de avisar de nuevos eventos.
Esta guía explica cómo configurar su aplicación Android para recibir notificaciones push del Client SDK.
Conecta Vonage a Firebase
Para recibir notificaciones push, debes conectar Vonage con Firebase. Para ello, necesitarás lo siguiente:
- Tu ID de solicitud de Vonage
- La clave privada de tu aplicación de Vonage (método de herramienta de carga) o un JWT de administrador de Vonage (método de terminal)
- ID de su proyecto Firebase
- Su clave de servidor Firebase
Obtener un ID de aplicación de Vonage
Obtén tu Id. de aplicación de API de Vonage. Puedes acceder a las aplicaciones existentes en la sección salpicadero. Si aún no tiene una aplicación, puede crear una nueva a través de CLI de Vonage.
Obtener un ID de proyecto Firebase
Obtenga el identificador de su proyecto Firebase en Consola Firebase. Navegue hasta Firebase console -> Project settings -> General.


Obtener una clave de servidor Firebase
Obtenga su clave de servidor Firebase en Consola Firebase. Navegue hasta Firebase console -> Project settings -> Service accounts y generar una nueva clave privada.


Conecta tu aplicación de Vonage a Firebase
Puedes conectar Vonage con tu aplicación Firebase realizando una solicitud POST. Puedes hacer esta solicitud usando la herramienta de carga o haciendo una solicitud POST directamente.
Uso de la herramienta de carga
La herramienta de carga de certificados Android Push, disponible en GitHuble permite cargar con una interfaz de usuario.
Para utilizar la herramienta tendrás que ejecutarla localmente o desplegarla. Puede seguir las instrucciones de la página del proyecto en GitHub LÉAME.
Una vez que hayas ejecutado la herramienta, ingresa el ID de tu aplicación de Vonage, el archivo de clave privada, el ID del proyecto Firebase y la clave del servidor Firebase y luego haz clic en cargar. El estado de tu carga se mostrará en la página una vez que esté completa:

Uso del terminal
Para conectar el servicio push backend de Vonage con la aplicación Firebase, debes realizar una única solicitud POST. Antes de realizar la solicitud, deberás generar el JWT del desarrollador de Vonage (la herramienta de carga anterior genera este JWT de forma oculta).
NOTA JWTs se utilizan para autenticar a un usuario en el Client SDK.
Para generar un JWT de administrador de Vonage, ejecuta el siguiente comando. Recuerda reemplazar el campo VONAGE_APP_ID con ID de tu aplicación de Vonage:
# 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
NOTA Un JWT admin es un JWT sin una sub-reclamación. Encontrará más información sobre cómo generar un JWT en la sección guía de configuración.
Rellene VONAGE_APP_ID, VONAGE_JWT, FIREBASE_PROJECT_ID y FIREBASE_SERVER_KEY con los valores obtenidos previamente y ejecute el siguiente comando para enviar la solicitud:
NOTA No hay validación en este punto final. La dirección 200 significa que Vonage obtuvo los datos y los almacenó, pero no verificó que los valores sean válidos.
Si todos los valores son correctos debería ver 200 código de respuesta en el terminal.
Configura el proyecto Firebase para tu aplicación Android
Para habilitar las notificaciones push para su aplicación Android, debe configurar su aplicación Android.
Configura tu proyecto Android
Empecemos por configurar tu proyecto Android con las dependencias necesarias.
Añadir la dependencia Client SDK
Añadir el Client SDK a su proyecto.
Añade la configuración de Firebase a tu aplicación
Antes de establecer la configuración específica de las notificaciones push, hay algunos pasos generales que debes seguir para configurar Firebase en tu aplicación.
NOTA que puede omitir este paso si su aplicación ya utiliza otros productos Firebase.
Desde tu proyecto Firebase haz clic en la opción "añadir aplicación Android":

Rellene el formulario que aparece para registrar su aplicación en el proyecto Firebase

Aparecerá el botón "Descargar google-services.json", haz clic en él y descarga el archivo.
Ahora cambia a la vista Proyecto en Android Studio para ver el directorio raíz de tu proyecto.
Mueve el archivo google-services.json que has descargado al directorio raíz del módulo de tu aplicación para Android.

Por último, debes añadir el complemento de servicios de Google, que cargará el archivo google-services.json. Modifica el nivel de tu proyecto build.gradle para incluir esto:
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
}
}
Y en su nivel de aplicación build.gradle implementar la base de Firebase BoM
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')
}
Añadir dependencia de Firebase Cloud Messaging
En su IDE, en el nivel de su aplicación build.gradle (normalmente app/build.gradle), añada el firebase-messaging dependencia:
dependencies{
implementation("com.google.firebase:firebase-messaging:21.0.1")
}
dependencies{
implementation 'com.google.firebase:firebase-messaging:21.0.1'
}
NOTA: El número de la última versión puede consultarse en la página Sitio web de Firebase.
Implementar una clase de servicio personalizada para recibir notificaciones push
Si aún no tiene una, cree una clase (servicio) que extienda FirebaseMessagingService.
Para que Vonage pueda enviar notificaciones push a un dispositivo, el servidor de Vonage tiene que conocer el InstanceID.
En la clase que extiende FirebaseMessagingServiceanular onNewToken() y actualizar el NexmoClient pasando un nuevo token:
class MyFirebaseMessagingService: FirebaseMessagingService() {
// We can retrieve client instance only if it has been already initialized
// NexmoClient.Builder().build(context)
private val client = NexmoClient.get()
override fun onNewToken(token: String) {
super.onNewToken(token)
client.enablePushNotifications(token, object: NexmoRequestListener<Void> {
override fun onSuccess(p0: Void?) { }
override fun onError(apiError: NexmoApiError) {}
})
}
}
public class MyFirebaseMessagingService extends FirebaseMessagingService {
// We can retrieve client instance only if it has been already initialized
// new NexmoClient.Builder().build(context)
private NexmoClient client = NexmoClient.get();
@Override
public void onNewToken(@NonNull String token) {
super.onNewToken(token);
client.enablePushNotifications(token, new NexmoRequestListener<Void>() {
@Override
public void onSuccess(@Nullable Void p0) {}
@Override
public void onError(@NonNull NexmoApiError nexmoApiError) {}
});
}
}
Asegúrese de que su servicio está declarado en su AndroidManifest.xml (normalmente app/src/main/AndroidManifest.xml) añadiendo service etiqueta interior application etiqueta:

<service android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Recibir notificaciones push
Las notificaciones push se reciben en su aplicación de MyFirebaseMessagingServiceel onMessageReceived() método. Puede utilizar NexmoClient.isNexmoPushNotification(message.data)) para determinar si el mensaje se envía desde el servidor de Vonage.
Utilice processPushNotification(message.data, listener) para procesar los datos recibidos de Firebase Cloud Messaging (FCM) en un objeto listo para usar:
class MyFirebaseMessagingService : FirebaseMessagingService() {
// We can retrieve client instance only if it has been already initialized
// in Application class or Activity:
// NexmoClient.Builder().build(context)
private val client = NexmoClient.get()
override fun onNewToken(token: String) {
super.onNewToken(token)
//...
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
// determine if the message is sent from Nexmo server
if (NexmoClient.isNexmoPushNotification(remoteMessage.data)) {
client.processNexmoPush(remoteMessage.data, object : NexmoPushEventListener {
override fun onIncomingCall(call: NexmoCall?) {
Log.d("TAG", "FirebaseMessage:onIncomingCall() with: $call")
}
override fun onNewEvent(event: NexmoEvent?) {
Log.d("TAG", "FirebaseMessage:onNewEvent() with: $event")
}
override fun onError(apiError: NexmoApiError?) {
Log.d("TAG", "FirebaseMessage:onError() with: $apiError")
}
})
}
}
}
public class MyFirebaseMessagingService extends FirebaseMessagingService {
// We can retrieve client instance only if it has been already initialized
// in Application class or Activity:
// new NexmoClient.Builder().build(context)
private NexmoClient client = NexmoClient.get();
@Override
public void onNewToken(@NonNull String token) {
super.onNewToken(token);
//...
}
@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
// determine if the message is sent from Nexmo server
if (NexmoClient.isNexmoPushNotification(remoteMessage.getData())) {
client.processNexmoPush(remoteMessage.getData(), new NexmoPushEventListener() {
@Override
public void onIncomingCall(NexmoCall call) {
Log.d("TAG", "FirebaseMessage:onIncomingCall() with: " + call);
}
@Override
public void onNewEvent(NexmoEvent event) {
Log.d("TAG", "FirebaseMessage:onNewEvent() with: " + event);
}
@Override
public void onError(NexmoApiError apiError) {
Log.d("TAG", "FirebaseMessage:onError() with: " + apiError);
}
});
}
}
}
NOTA: Para procesar la notificación push y aplicar cualquier método en el NexmoCall (por ejemplo, responder, colgar, etc.), el objeto NexmoClient tiene que ser inicializado y el usuario tiene que ser conectado.
Configurar el TTL de las notificaciones push
Puede configurar el tiempo de vida (TTL) de las notificaciones push, lo que impedirá que se envíen notificaciones push obsoletas a un dispositivo cuando ya no sean relevantes. El valor por defecto es de 120 segundos. Para establecer el TTL, configure el parámetro NexmoClient:
// TTL value is in seconds, TTL ranges from 0 to 300.
val nexmoClient = NexmoClient.Builder()
.pushNotificationTTL(30)
.build(context)
// TTL value is in seconds, TTL ranges from 0 to 300.
NexmoClient nexmoClient = new NexmoClient.Builder()
.pushNotificationTTL(30)
.build(this);
Cambios en el NexmoClient debe realizarse antes de la primera llamada a NexmoClient().get().
Ponerlo todo junto
Ahora puedes probar tu configuración de notificaciones push llamando al usuario de tu aplicación. La llamada entrante activará onIncomingCall como se muestra arriba. Si ha registrado un receptor de llamadas entrantes con NexmoClient.addIncomingCallListener en otra parte de su aplicación Android, esta escucha tendrá prioridad sobre onIncomingCallen el NexmoPushEventListener.
Conclusión
En esta guía has visto cómo configurar las notificaciones push. También puedes encontrar un proyecto de ejemplo que utiliza la función Servicio de conexión API y notificaciones push para gestionar una llamada entrante utilizando la interfaz de usuario del sistema Android en GitHub.