Ativar notificações push para chamadas
As notificações push enviam informações do seu aplicativo para os dispositivos dos usuários. Você pode usar notificações por push para mostrar uma caixa de diálogo, reproduzir um som ou exibir chamadas de entrada na camada de interface do usuário do aplicativo.
Neste artigo, você aprenderá a habilitar notificações por push para chamadas dos Serviços de Comunicação do Azure. Os Serviços de Comunicação fornecem integrações com a Grade de Eventos do Azure e os Hubs de Notificação do Azure que permitem adicionar notificações por push aos seus aplicativos.
Visão geral dos tokens TTL
O token de tempo de vida (TTL) é uma configuração que determina o período de tempo em que um token de notificação permanece válido antes de se tornar inválido. Essa configuração é útil para aplicativos em que o envolvimento do usuário não requer interação diária, mas permanece crítico por períodos mais longos.
A configuração TTL permite a gestão do ciclo de vida das notificações push. Ele reduz a necessidade de renovações frequentes de tokens, ajudando a garantir que o canal de comunicação entre o aplicativo e seus usuários permaneça aberto e confiável por longos períodos.
Atualmente, o valor máximo para TTL é de 180 dias (15.552.000 segundos), e o valor mínimo é de 5 minutos (300 segundos). Você pode inserir esse valor e ajustá-lo para atender às suas necessidades. Se você não fornecer um valor, o valor padrão será 24 horas (86.400 segundos).
Depois que a API de notificação por push de registro é chamada, as informações do token do dispositivo são salvas no registrador. Após o término da duração do TTL, as informações do ponto de extremidade do dispositivo são excluídas. Quaisquer chamadas recebidas nesses dispositivos não poderão ser entregues aos dispositivos se esses dispositivos não chamarem a API de Notificação por Push de Registro novamente.
Se quiser revogar uma identidade, siga este processo. Depois que a identidade for revogada, a entrada do registrador deve ser excluída.
Nota
Para um usuário do Microsoft Teams, o valor máximo de TTL é de 24 horas (86.400 segundos). Não há como aumentar esse valor. Você deve ativar o aplicativo a cada 24 horas em segundo plano e registrar o token do dispositivo.
Para ativar o aplicativo, buscar o novo token e realizar o registro, siga as instruções para a plataforma iOS ou as instruções para a plataforma Android.
Pré-requisitos
Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
Um recurso de Serviços de Comunicação implantado. Crie um recurso de Serviços de Comunicação.
Um token de acesso de usuário para habilitar o cliente chamador. Para obter mais informações, consulte Criar e gerenciar tokens de acesso.
Opcional: conclusão do início rápido para adicionar chamadas de voz ao seu aplicativo.
Siga o guia de início rápido
As notificações por push da Web por meio do SDK de Chamada na Web dos Serviços de Comunicação do Azure estão em visualização e estão disponíveis como parte da versão 1.12.0-beta.2+.
Importante
Esta funcionalidade dos Serviços de Comunicação do Azure está atualmente em pré-visualização.
As APIs e SDKs de visualização são fornecidos sem um contrato de nível de serviço. Recomendamos que você não os use para cargas de trabalho de produção. Alguns recursos podem não ser suportados ou podem ter recursos restritos.
Para obter mais informações, consulte Termos de Utilização Suplementares para Pré-visualizações do Microsoft Azure.
Para obter instruções passo a passo, consulte o início rápido no GitHub.
Uma conta do Firebase com o Firebase Cloud Messaging (FCM) habilitado e com seu serviço FCM 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.
Android Studio versão 3.6 ou posterior para criar seu aplicativo.
Um conjunto de permissões para permitir que o aplicativo Android receba mensagens de notificação do FCM. No seu
AndroidManifest.xml
ficheiro, adicione as seguintes permissões logo após<manifest ...>
ou abaixo da</application>
etiqueta:<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" />
Importante
Em 20 de junho de 2023, o Google anunciou que desativou o envio de mensagens usando as APIs herdadas do FCM e começaria a remover o FCM legado do serviço em junho de 2024. O Google recomenda a migração de APIs herdadas do FCM para o FCM HTTP v1.
Se o recurso dos Serviços de Comunicação ainda estiver usando as APIs herdadas do FCM, siga este guia de migração.
Considerações para notificações push móveis
As notificações push móveis são as notificações pop-up que aparecem em dispositivos móveis. Para chamadas, este artigo se concentra em notificações por push de voz sobre protocolo Internet (VoIP).
Nota
Quando o aplicativo se registra para notificações por push e lida com as notificações por push de entrada para um usuário do Teams, as APIs são as mesmas. As APIs descritas neste artigo também podem ser invocadas CommonCallAgent
na classe ou TeamsCallAgent
.
Instale o SDK
Localize seu arquivo no nível build.gradle
do projeto e adicione mavenCentral()
à lista de repositórios em buildscript
e allprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Em seguida, no arquivo de nível build.gradle
de módulo, adicione as seguintes linhas à dependencies
seção:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Inicializar os objetos necessários
Para criar uma CallAgent
instância, você precisa chamar o createCallAgent
método em uma CallClient
instância. Essa chamada retorna de forma assíncrona um objeto de CallAgent
instância.
O createCallAgent
método toma CommunicationUserCredential
como um argumento, que encapsula um token de acesso.
Para acessar DeviceManager
o , você deve criar uma callAgent
instância primeiro. Então você pode usar o CallClient.getDeviceManager
método para obter DeviceManager
.
String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
Para definir um nome de exibição para o chamador, use este método alternativo:
String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();
Registe-se para receber notificações push
Para se registrar para notificações por push, o aplicativo precisa chamar registerPushNotification()
uma CallAgent
instância usando um token de registro de dispositivo.
Para obter o token de registro do dispositivo, adicione o SDK do Firebase ao arquivo do módulo do build.gradle
aplicativo adicionando as seguintes linhas na dependencies
seção (se as linhas ainda não estiverem lá):
// Add the SDK for Firebase Cloud Messaging
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-messaging:20.2.4'
No arquivo de nível de build.gradle
projeto, adicione a seguinte linha na dependencies
seção se ela ainda não estiver lá:
classpath 'com.google.gms:google-services:4.3.3'
Adicione o seguinte plug-in ao início do arquivo se ele ainda não estiver lá:
apply plugin: 'com.google.gms.google-services'
Na barra de ferramentas, selecione Sincronizar agora. Adicione o seguinte trecho de código para obter o token de registro de dispositivo que o Firebase Cloud Messaging SDK gerou para a instância do aplicativo cliente. Certifique-se de adicionar as seguintes importações ao cabeçalho da atividade principal da instância para recuperar o token.
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;
Adicione este trecho para recuperar o token:
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.w("PushNotification", "getInstanceId failed", task.getException());
return;
}
// Get the new instance ID token
String deviceToken = task.getResult().getToken();
// Log
Log.d("PushNotification", "Device Registration token retrieved successfully");
}
});
Registre o token de registro do dispositivo com o SDK dos Serviços de Chamada para notificações por push de chamadas de entrada:
String deviceRegistrationToken = "<Device Token from previous section>";
try {
callAgent.registerPushNotification(deviceRegistrationToken).get();
}
catch(Exception e) {
System.out.println("Something went wrong while registering for Incoming Calls Push Notifications.")
}
Lidar com notificações por push
Para receber notificações push de chamadas de entrada, chame handlePushNotification()
uma CallAgent
instância com uma carga útil.
Para obter a carga do Firebase Cloud Messaging, comece criando um novo serviço (selecione File>New>Service>Service) que estenda a FirebaseMessagingService
classe Firebase SDK e substitua o onMessageReceived
método. Esse método é o manipulador de eventos chamado quando o Firebase Cloud Messaging entrega a notificação por push ao aplicativo.
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private java.util.Map<String, String> pushNotificationMessageDataFromFCM;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// Check if the message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d("PushNotification", "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
else {
pushNotificationMessageDataFromFCM = remoteMessage.getData();
}
}
}
Adicione a seguinte definição de serviço ao AndroidManifest.xml
arquivo, dentro da <application>
tag :
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Depois de recuperar a carga, você pode passá-la para o SDK dos Serviços de Comunicação para ser analisada em um objeto interno IncomingCallInformation
. Este objeto manipula a chamada do handlePushNotification
método em uma CallAgent
instância. Você cria uma CallAgent
instância chamando o createCallAgent(...)
método na CallClient
classe.
try {
IncomingCallInformation notification = IncomingCallInformation.fromMap(pushNotificationMessageDataFromFCM);
Future handlePushNotificationFuture = callAgent.handlePushNotification(notification).get();
}
catch(Exception e) {
System.out.println("Something went wrong while handling the Incoming Calls Push Notifications.");
}
Quando o processamento da mensagem de notificação por push é bem-sucedido e todos os manipuladores de eventos são registrados corretamente, o aplicativo toca.
Cancelar o registro de notificações push
Os aplicativos podem cancelar o registro da notificação por push a qualquer momento. Para cancelar o registro, chame o unregisterPushNotification()
método em callAgent
:
try {
callAgent.unregisterPushNotification().get();
}
catch(Exception e) {
System.out.println("Something went wrong while un-registering for all Incoming Calls Push Notifications.")
}
Desativar notificações push internas para uma chamada recebida
A carga de push de uma chamada recebida pode ser entregue ao destinatário de duas maneiras:
- Usando o FCM e registrando o token do dispositivo com a API mencionada anteriormente,
registerPushNotification
emCallAgent
ouTeamsCallAgent
- Registrando o SDK com um serviço interno após a criação ou
CallAgent
TeamsCallAgent
para obter a carga útil push entregue
Usando a propriedade setDisableInternalPushForIncomingCall
em CallAgentOptions
ou TeamsCallAgentOptions
, é possível instruir o SDK a desativar a entrega da carga por push por meio do serviço de push interno:
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisableInternalPushForIncomingCall(true);
Considerações para notificações push móveis
As notificações push móveis são as notificações pop-up que aparecem em dispositivos móveis. Para chamadas, este artigo se concentra em notificações por push de voz sobre protocolo Internet (VoIP). Para obter um guia sobre a integração do CallKit em seu aplicativo iOS, consulte Integrar com o CallKit.
Nota
Quando o aplicativo se registra para notificações por push e lida com as notificações por push de entrada para um usuário do Teams, as APIs são as mesmas. As APIs descritas neste artigo também podem ser invocadas CommonCallAgent
na classe ou TeamsCallAgent
.
Configure o seu sistema
Siga estes passos para configurar o seu sistema.
Criar o projeto Xcode
No Xcode, crie um novo projeto iOS e selecione o modelo Single View App . Este artigo usa a estrutura SwiftUI, portanto, você deve definir Language como Swift e Interface como SwiftUI.
Você não vai criar testes neste artigo. Sinta-se à vontade para desmarcar a caixa de seleção Incluir testes .
Instale o pacote e as dependências usando o CocoaPods
Crie um Podfile para seu aplicativo, como este exemplo:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
Execute o
pod install
.Abra
.xcworkspace
usando o Xcode.
Solicitar acesso ao microfone
Para acessar o microfone do dispositivo, você precisa atualizar a lista de propriedades de informações do seu aplicativo usando NSMicrophoneUsageDescription
. Defina o valor associado para uma cadeia de caracteres incluída na caixa de diálogo que o sistema usa para solicitar acesso do usuário.
Clique com o botão direito do mouse na entrada Info.plist da árvore do projeto e selecione Abrir como>código-fonte. Adicione as seguintes linhas na secção de nível <dict>
superior e, em seguida, guarde o ficheiro.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Configurar a estrutura do aplicativo
Abra o arquivo do ContentView.swift
seu projeto. Adicione uma import
declaração à parte superior do arquivo para importar a AzureCommunicationCalling
biblioteca. Além disso, importe AVFoundation
. Você precisa dele para solicitações de permissão de áudio no código.
import AzureCommunicationCalling
import AVFoundation
Inicializar o CallAgent
Para criar uma CallAgent
instância a partir do CallClient
, você precisa usar um callClient.createCallAgent
método que retorna de forma assíncrona um CallAgent
objeto depois que ele é inicializado.
Para criar um cliente de chamada, passe um CommunicationTokenCredential
objeto:
import AzureCommunication
let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
updates("Couldn't created Credential object", false)
initializationDispatchGroup!.leave()
return
}
// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
let newToken = self.tokenProvider!.fetchNewToken()
onCompletion(newToken, nil)
}
Passe o CommunicationTokenCredential
objeto que você criou para CallClient
e defina o nome para exibição:
self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS Azure Communication Services User"
self.callClient!.createCallAgent(userCredential: userCredential!,
options: callAgentOptions) { (callAgent, error) in
if error == nil {
print("Create agent succeeded")
self.callAgent = callAgent
} else {
print("Create agent failed")
}
})
Configurar notificações por push
Antes de iniciar as tarefas de registro, tratamento e cancelamento de registro de notificações por push, conclua esta tarefa de configuração:
- No Xcode, vá para Assinando & Recursos. Adicione uma funcionalidade selecionando + Capacidade e, em seguida, selecione Notificações push.
- Adicione outro recurso selecionando + Capacidade e, em seguida, selecione Modos em segundo plano.
- Em Modos em segundo plano, marque as caixas de seleção Voz sobre IP e Notificações remotas.
Registe-se para receber notificações push
Para se registrar para notificações por push, chame registerPushNotification()
uma CallAgent
instância usando um token de registro de dispositivo.
O registro para notificações por push precisa acontecer após a inicialização bem-sucedida. Quando o callAgent
objeto é destruído, logout
é chamado, o que automaticamente cancela o registro de notificações push.
let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
callAgent.registerPushNotifications(deviceToken: deviceToken!) { (error) in
if(error == nil) {
print("Successfully registered to push notification.")
} else {
print("Failed to register push notification.")
}
}
Lidar com notificações por push
Para receber notificações por push para chamadas recebidas, chame handlePushNotification()
uma CallAgent
instância com uma carga útil de dicionário:
let callNotification = PushNotificationInfo.fromDictionary(pushPayload.dictionaryPayload)
callAgent.handlePush(notification: callNotification) { (error) in
if (error == nil) {
print("Handling of push notification was successful")
} else {
print("Handling of push notification failed")
}
}
Cancelar o registro de notificações push
Os aplicativos podem cancelar o registro da notificação por push a qualquer momento. Para cancelar o registro, chame o unregisterPushNotification
método em CallAgent
.
Nota
Os aplicativos não são automaticamente cancelados das notificações por push ao fazer logout.
callAgent.unregisterPushNotification { (error) in
if (error == nil) {
print("Unregister of push notification was successful")
} else {
print("Unregister of push notification failed, please try again")
}
}
Desativar notificações push internas para uma chamada recebida
A carga de push de uma chamada recebida pode ser entregue ao destinatário de duas maneiras:
- Usando o serviço de notificação por push da Apple (APNS) e registrando o token do dispositivo com a API mencionada anteriormente,
registerPushNotification
emCallAgent
ouTeamsCallAgent
- Registrando o SDK com um serviço interno após a criação ou
CallAgent
TeamsCallAgent
para obter a carga útil push entregue
Usando a propriedade disableInternalPushForIncomingCall
em CallAgentOptions
ou TeamsCallAgentOptions
, é possível instruir o SDK a desativar a entrega da carga por push por meio do serviço de push interno:
let options = CallAgentOptions()
options.disableInternalPushForIncomingCall = true
Considerações para notificações por push do Windows
As notificações push móveis são as notificações pop-up que aparecem em dispositivos móveis. Para chamadas, este artigo se concentra em notificações por push de voz sobre protocolo Internet (VoIP).
As notificações por push na plataforma Windows são entregues por meio do Serviço de Notificação por Push do Windows (WNS).
Nota
Quando o aplicativo se registra para notificações por push e lida com as notificações por push para um Custom Teams Endpoint (CTE), as APIs são as mesmas. As APIs descritas neste artigo também podem ser invocadas CommonCallAgent
na classe ou TeamsCallAgent
para um CTE.
Configure o seu sistema
Siga estes passos para configurar o seu sistema.
Criar o projeto do Visual Studio
Para um aplicativo da Plataforma Universal do Windows, no Visual Studio 2022, crie um novo projeto Aplicativo em Branco (Universal Windows). Depois de inserir o nome do projeto, sinta-se à vontade para escolher qualquer SDK do Windows posterior a 10.0.17763.0.
Para um aplicativo WinUI 3, crie um novo projeto com o modelo Aplicativo em branco, empacotado (WinUI 3 na área de trabalho) para configurar um aplicativo WinUI 3 de página única. É necessário o SDK de Aplicativos Windows versão 1.3 ou posterior.
Instalar o pacote e as dependências usando o Gerenciador de Pacotes NuGet
As APIs e bibliotecas do SDK de chamada estão disponíveis publicamente por meio de um pacote NuGet.
Para localizar, baixar e instalar o pacote NuGet do SDK de chamada:
- Abra o Gerenciador de Pacotes NuGet selecionando Ferramentas>Gerenciador>de Pacotes NuGet Gerenciar Pacotes NuGet para Solução.
- Selecione Procurar e digite Azure.Communication.Calling.WindowsClient na caixa de pesquisa.
- Verifique se a caixa de seleção Incluir pré-lançamento está marcada.
- Selecione o pacote Azure.Communication.Calling.WindowsClient e, em seguida, selecione Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 ou uma versão mais recente.
- Marque a caixa de seleção que corresponde ao projeto dos Serviços de Comunicação do Azure no painel direito.
- Selecione Instalar.
Configurar notificações por push
Antes de iniciar as tarefas de registro, manipulação e exibição de uma notificação do Windows para atender ou recusar uma chamada de entrada, conclua esta tarefa de configuração:
Siga o Tutorial: Enviar notificações para aplicativos da Plataforma Universal do Windows usando os Hubs de Notificação do Azure. Depois de seguir o tutorial, você tem:
- Um aplicativo que tem o
WindowsAzure.Messaging.Managed
eMicrosoft.Toolkit.Uwp.Notifications
pacotes. - Um nome de hub do Hub de Notificações do Azure referenciado como
<AZURE_PNH_HUB_NAME>
e uma cadeia de conexão do Hub de Notificações do Azure referenciada como<AZURE_PNH_HUB_CONNECTION_STRING>
neste artigo.
- Um aplicativo que tem o
Para se registrar em um canal WNS em cada inicialização de aplicativo, certifique-se de adicionar o código de inicialização em seu
App.xaml.cs
arquivo:// App.xaml.cs protected override async void OnLaunched(LaunchActivatedEventArgs e) { await InitNotificationsAsync(); ... } private async Task InitNotificationsAsync() { if (AZURE_PNH_HUB_NAME != "<AZURE_PNH_HUB_NAME>" && AZURE_PNH_HUB_CONNECTION_STRING != "<AZURE_PNH_HUB_CONNECTION_STRING>") { var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); channel.PushNotificationReceived += Channel_PushNotificationReceived; var hub = new NotificationHub(AZURE_PNH_HUB_NAME, AZURE_PNH_HUB_CONNECTION_STRING); var result = await hub.RegisterNativeAsync(channel.Uri); if (result.ChannelUri != null) { PNHChannelUri = new Uri(result.ChannelUri); } else { Debug.WriteLine("Cannot register WNS channel"); } } }
Registre o manipulador de eventos que é ativado quando uma nova mensagem de notificação por push chega em
App.xaml.cs
:// App.xaml.cs private void Channel_PushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args) { switch (args.NotificationType) { case PushNotificationType.Toast: case PushNotificationType.Tile: case PushNotificationType.TileFlyout: case PushNotificationType.Badge: break; case PushNotificationType.Raw: var frame = (Frame)Window.Current.Content; if (frame.Content is MainPage) { var mainPage = frame.Content as MainPage; await mainPage.HandlePushNotificationIncomingCallAsync(args.RawNotification.Content); } break; } }
Registe-se para receber notificações push
Para se registrar para notificações por push, chame RegisterForPushNotificationAsync()
uma CallAgent
instância com o canal de registro WNS obtido na inicialização do aplicativo.
O registro para notificações por push precisa acontecer após a inicialização bem-sucedida.
// MainPage.xaml.cs
this.callAgent = await this.callClient.CreateCallAgentAsync(tokenCredential, callAgentOptions);
if ((Application.Current as App).PNHChannelUri != null)
{
await this.callAgent.RegisterForPushNotificationAsync((Application.Current as App).PNHChannelUri.ToString());
}
this.callAgent.CallsUpdated += OnCallsUpdatedAsync;
this.callAgent.IncomingCallReceived += OnIncomingCallAsync;
Lidar com notificações por push
Para receber notificações por push para chamadas recebidas, chame handlePushNotification()
uma CallAgent
instância com uma carga útil de dicionário:
// MainPage.xaml.cs
public async Task HandlePushNotificationIncomingCallAsync(string notificationContent)
{
if (this.callAgent != null)
{
PushNotificationDetails pnDetails = PushNotificationDetails.Parse(notificationContent);
await callAgent.HandlePushNotificationAsync(pnDetails);
}
}
Esta chamada dispara um evento de chamada de entrada que CallAgent
mostra a notificação de chamada de entrada:
// MainPage.xaml.cs
private async void OnIncomingCallAsync(object sender, IncomingCallReceivedEventArgs args)
{
incomingCall = args.IncomingCall;
(Application.Current as App).ShowIncomingCallNotification(incomingCall);
}
// App.xaml.cs
public void ShowIncomingCallNotification(IncomingCall incomingCall)
{
string incomingCallType = incomingCall.IsVideoEnabled ? "Video" : "Audio";
string caller = incomingCall.CallerDetails.DisplayName != "" ? incomingCall.CallerDetails.DisplayName : incomingCall.CallerDetails.Identifier.RawId;
new ToastContentBuilder()
.SetToastScenario(ToastScenario.IncomingCall)
.AddText(caller + " is calling you.")
.AddText("New Incoming " + incomingCallType + " Call")
.AddButton(new ToastButton()
.SetContent("Decline")
.AddArgument("action", "decline"))
.AddButton(new ToastButton()
.SetContent("Accept")
.AddArgument("action", "accept"))
.Show();
}
Adicione o código para manipular a pressão do botão para a notificação no OnActivated
método:
// App.xaml.cs
protected override async void OnActivated(IActivatedEventArgs e)
{
// Handle notification activation
if (e is ToastNotificationActivatedEventArgs toastActivationArgs)
{
ToastArguments args = ToastArguments.Parse(toastActivationArgs.Argument);
string action = args?.Get("action");
if (!string.IsNullOrEmpty(action))
{
var frame = Window.Current.Content as Frame;
if (frame.Content is MainPage)
{
var mainPage = frame.Content as MainPage;
await mainPage.AnswerIncomingCall(action);
}
}
}
}
// MainPage.xaml.cs
public async Task AnswerIncomingCall(string action)
{
if (action == "accept")
{
var acceptCallOptions = new AcceptCallOptions()
{
IncomingVideoOptions = new IncomingVideoOptions()
{
StreamKind = VideoStreamKind.RemoteIncoming
}
};
call = await incomingCall?.AcceptAsync(acceptCallOptions);
call.StateChanged += OnStateChangedAsync;
call.RemoteParticipantsUpdated += OnRemoteParticipantsUpdatedAsync;
}
else if (action == "decline")
{
await incomingCall?.RejectAsync();
}
}