Partilhar via


Configurar chamadas individuais e notificações por push na Biblioteca da Interface do Usuário

A Biblioteca da Interface do Usuário fornece suporte pronto para fazer chamadas individuais usando identificadores de participante dos Serviços de Comunicação do Azure. Para dar suporte a chamadas individuais, a Biblioteca da Interface do Usuário fornece notificações de chamadas de entrada. Você também pode usar os Serviços de Comunicação do Azure como uma fonte de eventos da Grade de Eventos do Azure para chamadas.

Neste artigo, você aprenderá a fazer chamadas um-para-um corretamente usando a biblioteca de interface do usuário em seu aplicativo.

Pré-requisitos

Configurar as funcionalidades

Para obter mais informações, consulte a biblioteca de interface do usuário do Android de código aberto e o código do aplicativo de exemplo.

Configurar permissões para notificações por push

Para configurar notificações push, você precisa de uma conta do Firebase com o Firebase Cloud Messaging (FCM) habilitado. Seu serviço FCM deve estar conectado a uma instância dos Hubs de Notificação do Azure. Para obter mais informações, consulte Notificações dos Serviços de Comunicação. Você também precisa usar o Android Studio versão 3.6 ou posterior para criar seu aplicativo.

Para que o aplicativo Android receba mensagens de notificação do FCM, ele precisa de um conjunto de permissões. No seu AndroidManifest.xml ficheiro, adicione o seguinte conjunto de permissões após a <manifest ...> etiqueta ou </application> .

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

Adicionar notificações de entrada ao seu aplicativo móvel

Os Serviços de Comunicação do Azure integram-se com a Grade de Eventos do Azure e os Hubs de Notificação do Azure, para que possa adicionar notificações por push às suas aplicações no Azure.

Registrar/cancelar o registro para notificações por push do hub de notificação

Para se registrar para notificações por push, o aplicativo precisa chamar registerPushNotification() uma CallComposite instância com um token de registro de dispositivo.

Para obter o token de registro do dispositivo, adicione o SDK do Firebase à instância do módulo do build.gradle aplicativo. Para receber notificações do Firebase, integre os Hubs de Notificação do Azure seguindo as instruções em Notificações dos Serviços de Comunicação.

    val deviceRegistrationToken = "" // From Firebase
    callComposite.registerPushNotification(deviceRegistrationToken).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Lidar com notificações por push recebidas da Grade de Eventos ou do hub de notificação

Para receber notificações por push para chamadas recebidas, chame handlePushNotification uma CallComposite instância com uma carga útil.

Para obter a carga do FCM, comece criando um novo serviço (File>New>Service>Service) que estende a FirebaseMessagingService classe Firebase SDK e substitui o onMessageReceived método. Esse método é o manipulador de eventos chamado quando o FCM entrega a notificação por push ao aplicativo.

    // On Firebase onMessageReceived
    val pushNotification = CallCompositePushNotification(remoteMessage.data)
    callComposite.handlePushNotification(pushNotification).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Registe-se para receber notificações de chamadas

Para receber notificações de chamadas recebidas após handlePushNotification, inscreva-se e CallCompositeIncomingCallEvent CallCompositeIncomingCallCancelledEvent. CallCompositeIncomingCallEvent contém o callId de entrada e as informações do chamador. CallCompositeIncomingCallCancelledEvent contém callId e código de cancelamento de chamada Solução de problemas nos Serviços de Comunicação do Azure.

    private var incomingCallEvent: IncomingCallEvent? = null
    private var incomingCallCancelledEvent: IncomingCallCancelledEvent? = null

    class IncomingCallEvent : CallCompositeEventHandler<CallCompositeIncomingCallEvent> {
        override fun handle(eventArgs: CallCompositeIncomingCallEvent?) {
            // Display incoming call UI to accept/decline a call
            // CallCompositeIncomingCallEvent contains call id and caller information
        }
    }

    class IncomingCallCancelledEvent : CallCompositeEventHandler<CallCompositeIncomingCallCancelledEvent> {
        override fun handle(eventArgs: CallCompositeIncomingCallCancelledEvent?) {
            // Call-ended event when a call is declined or not accepted
        }
    }

    // Event subscription
    incomingCallEvent = IncomingCallEvent()
    callComposite.addOnIncomingCallEventHandler(incomingCallEvent)

    incomingCallCancelledEvent = IncomingCallCancelledEvent()
    callComposite.addOnIncomingCallCancelledEventHandler(incomingCallEndEvent)

    // Event unsubscribe
    callComposite.removeOnIncomingCallEventHandler(incomingCallEvent)
    callComposite.removeOnIncomingCallCancelledEventHandler(incomingCallEndEvent)

Lidar com chamadas

Para aceitar chamadas, ligue para accept. Para recusar chamadas, ligue para reject.

// Accept call
callComposite.accept(applicationContext, incomingCallId, localOptions)

// Decline call
callComposite.reject(incomingCallId)

Disque para outros participantes

Para iniciar chamadas com outros participantes, crie CallCompositeStartCallOptions com IDs brutos dos participantes de CommunicationIdentity e launch.

    val participants: List<CommunicationIdentifier> // participants to dial
    callComposite.launch(context, participants, localOptions)

Para obter mais informações, consulte a biblioteca de interface do usuário do iOS de código aberto e o código de aplicativo de exemplo.

Configurar notificações por push

Uma notificação por push móvel é a notificação pop-up que você recebe no dispositivo móvel. Este artigo concentra-se em notificações push de voz sobre Protocolo Internet (VoIP).

As seções a seguir descrevem como registrar, manipular e cancelar o registro de notificações por push. Antes de iniciar essas tarefas, preencha estes pré-requisitos:

  1. No Xcode, vá para Assinando & Recursos. Adicione uma funcionalidade selecionando + Capacidade e, em seguida, selecione Notificações push.
  2. Adicione outro recurso selecionando + Capacidade e, em seguida, selecione Modos em segundo plano.
  3. Em Modos em segundo plano, marque as caixas de seleção Voz sobre IP e Notificações remotas.

Adicionar notificações de entrada ao seu aplicativo móvel

Os Serviços de Comunicação do Azure integram-se com a Grade de Eventos do Azure e os Hubs de Notificação do Azure, para que possa adicionar notificações por push às suas aplicações no Azure.

Registrar/cancelar o registro para notificações push do hub de notificação

Para se registrar para notificações por push, o aplicativo precisa chamar registerPushNotifications() uma CallComposite instância com um token de registro de dispositivo.

    // to register
    let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
    callComposite.registerPushNotifications(
        deviceRegistrationToken: deviceToken) { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

    // to unregister
    callComposite.unregisterPushNotification()

Lidar com notificações por push recebidas da Grade de Eventos ou do hub de notificação

Para receber notificações por push para chamadas recebidas, chame handlePushNotification() uma CallComposite instância com uma carga útil de dicionário.

Quando você usa handlePushNotification() e as opções do CallKit são definidas, você recebe uma notificação do CallKit para aceitar ou recusar chamadas.

    // App is in the background
    // push notification contains from/to communication identifiers and event type
    let pushNotification = PushNotification(data: payload.dictionaryPayload)
    let callKitOptions = CallKitOptions(...//CallKit options)
    CallComposite.reportIncomingCall(pushNotification: pushNotification,
                                    callKitOptions: callKitOptions) { result in
        if case .success() = result {
            DispatchQueue.global().async {
                // You don't need to wait for a Communication Services token to handle the push because 
                // Communication Services common receives a callback function to get the token with refresh options
                // create call composite and handle push notification
                callComposite.handlePushNotification(pushNotification: pushNotification)
            }
        }
    }

    // App is in the foreground
    let pushNotification = PushNotification(data: dictionaryPayload)
    callComposite.handlePushNotification(pushNotification: pushNotification) { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

Registre-se para receber notificações de chamadas no handle push

Para receber notificações de chamadas recebidas após handlePushNotification, inscreva-se e onIncomingCall onIncomingCallCancelled. IncomingCall contém o callId de entrada e as informações do chamador. IncomingCallCancelled contém callId e código de cancelamento de chamada Solução de problemas nos Serviços de Comunicação do Azure.

    let onIncomingCall: (IncomingCall) -> Void = { [] incomingCall in
        // Incoming call id and caller info
    }
    let onIncomingCallEnded: (IncomingCallCancelled) -> Void = { [] incomingCallCancelled in
        // Incoming call cancelled code with callId
    }
    callComposite.events.onIncomingCall = onIncomingCall
    callComposite.events.onIncomingCallEnded = onIncomingCallEnded

Desativar o push interno para chamadas recebidas

Para receber notificações por push somente de EventGrid e APNS definido disableInternalPushForIncomingCall como true em CallCompositeOptions. Se disableInternalPushForIncomingCall for true, o evento de notificação por push da biblioteca ui recebeu somente quando handlePushNotification será chamado. A opção disableInternalPushForIncomingCall ajuda a parar de receber notificações no modo de CallComposite primeiro plano. Esta definição não controla EventGrid nem NotificationHub as definições.

    let options = CallCompositeOptions(disableInternalPushForIncomingCall: true)

Iniciar o composto na chamada recebida aceita da chamada do SDK CallKit

O SDK do iOS de Chamada dos Serviços de Comunicação do Azure dá suporte à integração do CallKit. Você pode habilitar essa integração na Biblioteca da Interface do Usuário configurando uma instância do CallCompositeCallKitOption. Para obter mais informações, consulte Integrar com o CallKit.

Inscreva-se se o onIncomingCallAcceptedFromCallKit CallKit de chamar o SDK estiver habilitado. Em chamada aceita, inicie callComposite com ID de chamada.

    let onIncomingCallAcceptedFromCallKit: (callId) -> Void = { [] callId in
        // Incoming call accepted call id
    }
    
    callComposite.events.onIncomingCallAcceptedFromCallKit = onIncomingCallAcceptedFromCallKit

    // launch composite with/without local options
    // Note: as call is already accepted, setup screen will not be displayed
    callComposite.launch(callIdAcceptedFromCallKit: callId)

Lidar com chamadas com o CallComposite

Para aceitar chamadas, ligue para accept. Para recusar chamadas, ligue para reject.

// Accept call
callComposite.accept(incomingCallId, 
                     ... // CallKit and local options
                     )

// Decline call
callComposite.reject(incomingCallId)

Disque para outros participantes

Para iniciar chamadas com outros participantes, inicie callComposite com a lista de participantes do CommunicationIdentifier.

    // [CommunicationIdentifier]
    // use createCommunicationIdentifier(fromRawId: "raw id")
    callComposite.launch(participants: <list of CommunicationIdentifier>,
                         localOptions: localOptions)

Próximos passos