Visão geral

Em situações como uma chamada recebida, o usuário geralmente espera receber uma notificação push caso o aplicativo não esteja ativo. Você também pode integrar notificações push com Serviço de Conexão para exibir chamadas recebidas na interface do usuário do sistema. Este guia explica como configurar seu aplicativo Android para receber notificações push do Client SDK.

Conectar o Vonage ao Firebase

Para receber notificações push, é necessário conectar o Vonage ao Firebase. Para isso, você precisará do seguinte:

  1. Seu ID do projeto do Firebase
  2. Sua chave da conta de serviço do Firebase

Obter um ID de aplicativo da Vonage

Obtenha seu ID de aplicativo da API da Vonage. Você pode acessar as aplicações existentes na painel de controle. Se você ainda não tem um aplicativo, pode criar um novo aplicativo por meio de CLI da Vonage.

Obter um ID de projeto do Firebase

Obtenha o ID do seu projeto do Firebase no Console do Firebase. Acesse Firebase console -> Project settings -> General.

Displaying the project settings location
Displaying the project ID location

Obter uma chave de account de serviço do Firebase

Obtenha sua chave de servidor do Firebase no Console do Firebase. Acesse Firebase console -> Project settings -> Service accounts e gerar uma nova chave privada.

Displaying the project settings location
Displaying the server key location

Conecte seu aplicativo Vonage ao Firebase

Você envia suas credenciais para a Vonage usando o Painel da API. Abra seu aplicativo no painel de controle, em seguida, abra a aba “Ativar notificações push”:

Push Upload on the dashboard

Insira o ID do seu projeto do Firebase e envie a chave da sua conta de serviço da etapa anterior.

Como usar o Terminal

Você também pode conectar o serviço de notificações push do backend da Vonage ao aplicativo do Firebase usando o terminal. Você precisará do seu ID de aplicativo da Vonage e deverá gerar um JWT de administrador da 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

NOTA Um JWT de administrador é um JWT sem a reivindicação “sub”. Mais detalhes sobre como gerar um JWT podem ser encontrados no guia de autenticação.

Preencher VONAGE_APP_ID, VONAGE_JWT, FIREBASE_PROJECT_ID, e FIREBASE_SERVICE_ACCOUNT com os valores obtidos anteriormente e execute o comando abaixo para enviar a solicitação. Seu FIREBASE_SERVICE_ACCOUNT deve ser a chave privada do Firebase, na forma de uma string com caracteres especiais escapados:

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  

Se você estiver atualizando um token existente, exclua-o primeiro, executando um DELETE solicitação para o mesmo endpoint com a mesma autenticação.

NOTA Não há validação neste endpoint. O 200 O código de retorno indica que a Vonage recebeu os dados e os armazenou, mas ainda não verificou se os valores são válidos.

Configure o projeto do Firebase para seu aplicativo Android

Para habilitar as notificações push no seu aplicativo para Android, é necessário configurá-lo.

Configure seu projeto Android

Vamos começar configurando seu projeto Android com as dependências necessárias.

Adicionar a dependência do Client SDK

Adicionar o Client SDK ao seu projeto.

Adicione a configuração do Firebase ao seu aplicativo

Antes de definirmos a configuração específica para notificações push, há algumas etapas gerais que você precisa seguir para configurar o Firebase em seu aplicativo.

NOTA que você pode pular esta etapa se seu aplicativo já estiver usando outros produtos do Firebase.

No seu projeto do Firebase, clique na opção “adicionar aplicativo Android”:

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

Preencha o formulário exibido para registrar sua solicitação no projeto do Firebase

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

Em seguida, aparecerá um botão “Baixar google-services.json”; clique nele e baixe o arquivo.

Agora, alterne para a visualização “Projeto” no Android Studio para ver o diretório raiz do seu projeto.

Mova o arquivo google-services.json que você baixou para o diretório raiz do módulo do seu aplicativo Android.

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

Por fim, você precisa adicionar o plug-in dos serviços do Google, que carregará o arquivo google-services.json. Modifique seu arquivo no nível do projeto build.gradle arquivo para incluir o seguinte:

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

E no nível do seu aplicativo build.gradle implementar a BoM básica do Firebase

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

Adicionar a dependência do Firebase Cloud Messaging

No seu IDE, no nível do aplicativo build.gradle arquivo (geralmente app/build.gradle), adicione o firebase-messaging dependência:

dependencies{
    implementation("com.google.firebase:firebase-messaging:21.0.1")
}

NOTA: O número da versão mais recente pode ser encontrado no Site do Firebase.

Registrar token de notificação

Para receber a notificação push, é necessário registrar o token de push do usuário no backend da Vonage, utilizando 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() retornará um ID exclusivo do dispositivo do usuário. Os usuários podem registrar vários dispositivos. O ID do dispositivo pode ser usado posteriormente para cancelar o registro do dispositivo do usuário, impedindo que ele receba futuras notificações push.

client.unregisterDevicePushToken("Device_ID") { error -> 
    if (error == null) {
        // device id deleted
    }
}

Implementar um serviço de recepção do Firebase

Para receber mensagens do Firebase, é necessário implementar o serviço de mensagens do Firebase. Você também precisará verificar se a mensagem recebida é uma mensagem da Vonage e, em caso afirmativo, de que tipo, utilizando o getPushNotificationType() método auxiliar. Se for um INCOMING_CALL processamos adequadamente, utilizando nossos métodos auxiliares 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 -> {}
        }
   }
   //...
}

Atender uma chamada recebida

Se processPushCallInvite Se for bem-sucedido, você receberá um convite de chamada no seu aplicativo proveniente do SDK. Para atender o convite recebido por meio da notificação push do Firebase:

val call: CallId?
invite?.let {
    client.answer(it) {
        err ->
        when {
            err != null -> {
                print("error answering call")
            }
            else -> {
                call = it
                print("call answered: $voiceCall")
            }
        }
    }
}

Rejeitar uma chamada recebida

Para rejeitar o convite recebido por meio da notificação push do Firebase:

invite?.let {
    client.reject(it) { err ->
        when {
            err != null -> {
                print("error rejecting call")
            }
            else -> {
                print("call rejected")
            }
        }
    }
}

Conclusão

Neste guia, você viu como configurar notificações push.

Voz: