Habilitar notificações por push para chamadas
Aqui, aprenderemos a habilitar notificações por push para as chamadas dos Serviços de Comunicação do Azure. A configuração das notificações por push permitirá que os usuários saibam quando eles têm uma chamada de entrada que eles podem responder.
Notificação por push
As notificações por push permitem que você envie informações do aplicativo para os dispositivos dos usuários. Você pode usar notificações por push para mostrar uma caixa de diálogo, tocar um som ou exibir a chamada de entrada na camada de interface do usuário do aplicativo. Os Serviços de Comunicação do Azure 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 aplicativos.
Token TTL
O token TTL (vida útil) é uma configuração que determina o 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 a participação do usuário não requer interação diária, mas permanece crítico por períodos mais longos.
A configuração de TTL permite o gerenciamento do ciclo de vida das notificações por push, reduzindo a necessidade de renovações frequentes de token, garantindo que o canal de comunicação entre o aplicativo e seus usuários permaneça aberto e confiável por longas durações.
Atualmente, o valor máximo da 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 de acordo com 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 quando as informações do token do dispositivo são salvas no Registrador. Após o término do tempo de vida útil, as informações do ponto de extremidade do dispositivo são excluídas. As chamadas recebidas nesses dispositivos não podem ser entregues aos dispositivos se esses dispositivos não chamarem a API de notificação por push de registro novamente.
Caso deseje revogar uma identidade, você precisará seguir esse processo, depois que a identidade for revogada, a entrada do Registrador deverá ser excluída.
Observação
No caso do CTE (Ponto de Extremidade do Teams Personalizado), o valor máximo da TTL é de 24 horas (86.400 segundos). Não há como aumentar esse valor.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação implantado. Crie um recurso dos Serviços de Comunicação.
- Um token de acesso de usuário para habilitar o cliente de chamada. Para saber mais, confira Criar e gerenciar token de acesso.
- Opcional: conclua o guia de início rápido para adicionar uma chamada de voz ao seu aplicativo
Guia rápido do SDK de Chamada à Web dos Serviços de Comunicação do Azure – notificações por push da Web
Importante
Este recurso dos Serviços de Comunicação do Azure estão atualmente em versão prévia.
Versões prévias das APIs e dos SDKs são fornecidas sem um contrato de nível de serviço. É recomendável que você não as use para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou talvez ter restrição de recursos.
Para saber mais, consulte os Termos de Uso Complementares das Versões Prévias do Microsoft Azure.
SDK de Chamada Da Web dos Serviços de Comunicação do Azure – as notificações por push da Web estão em versão prévia pública e estão disponíveis como parte da versão 1.12.0-beta.2+.
Visite nosso tutorial de início rápido de notificações por push na Web: https://github.com/Azure-Samples/communication-services-javascript-quickstarts/blob/main/calling-web-push-notifications/README.md
Instalar o SDK
Localize o arquivo build.gradle no nível do projeto e adicione mavenCentral()
à lista de repositórios em buildscript
e allprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Em seguida, no arquivo build.gradle no nível de módulo, adicione as seguintes linhas à seção dependencies
:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Inicializar objetos necessários
Para criar uma instância CallAgent
, você precisa chamar o método createCallAgent
em uma instância CallClient
. Essa chamada retorna de forma assíncrona um objeto de instância CallAgent
.
O método createCallAgent
usa CommunicationUserCredential
como argumento, que encapsula um token de acesso.
Para acessar DeviceManager
, você deverá criar uma instância callAgent
primeiro. Em seguida, você poderá usar o método CallClient.getDeviceManager
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();
Pré-requisitos adicionais para notificações por push
Uma conta do Firebase configurada com o FCM (Firebase Cloud Messaging) habilitado e com o serviço do FCM conectado a uma instância do Hub de Notificações do Azure. Confira Notificações dos Serviços de Comunicação para obter mais informações. Além disso, o tutorial pressupõe que você esteja usando o Android Studio versão 3.6 ou superior para criar o seu aplicativo.
Um conjunto de permissões é necessário para que o aplicativo Android possa receber mensagens de notificações do Firebase Cloud Messaging. No arquivo AndroidManifest.xml
, adicione o conjunto de permissões a seguir logo após <manifest ...>
ou abaixo da marca </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" />
Visão geral
As notificações por push móveis são as notificações pop-up que você vê em dispositivos móveis. Para chamadas, nos concentraremos em notificações por push de protocolo VoIP. Faremos o registro de notificações por push, a administração de notificações por push e o cancelamento do registro de notificações por push.
Observação
Para registrar para notificações por push e tratamento das notificações por push para um CTE (ponto de extremidade personalizado do Teams) as API são as mesmas. A API descrita abaixo também pode ser invocada na classe CommonCallAgent
ou TeamsCallAgent
do CTE (Ponto de Extremidade Personalizado do Teams).
Registrar notificações por push
Para se registrar para notificações por push, o aplicativo precisa chamar registerPushNotification()
em uma instância CallAgent
com um token de registro de dispositivo.
Para obter o token de registro do dispositivo, adicione o SDK do Firebase ao arquivo do módulo de build.gradle
aplicativo adicionando as seguintes linhas na dependencies
seção se ele ainda não estiver 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 build.gradle do nível do projeto, adicione os seguintes itens na seção dependencies
, caso eles ainda não tenham sido adicionados:
classpath 'com.google.gms:google-services:4.3.3'
Adicione o seguinte plug-in ao início do arquivo, caso ele ainda não tenha sido adicionado:
apply plugin: 'com.google.gms.google-services'
Selecione Sincronizar Agora na barra de ferramentas. Adicione o snippet de código a seguir para obter o token de registro do dispositivo gerado pelo SDK do Firebase Cloud Messaging para a instância do aplicativo cliente. Verifique se as importações abaixo foram adicionadas ao cabeçalho da atividade principal da instância. Elas são necessárias para que o snippet recupere 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 esse snippet 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 new Instance ID token
String deviceToken = task.getResult().getToken();
// Log
Log.d("PushNotification", "Device Registration token retrieved successfully");
}
});
Registre o token de registro de dispositivo com o SDK dos Serviços de Chamada para obter notificações por push da chamada 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.")
}
Gerenciamento de notificações por push
Para receber notificações por push de chamadas de entrada, chame handlePushNotification() em uma instância CallAgent com um conteúdo.
Para obter o conteúdo do Firebase Cloud Messaging, comece criando um serviço (Arquivo > Novo > Serviço > Serviço) que estende a classe do SDK do Firebase FirebaseMessagingService e substitui o método onMessageReceived
. 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 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 arquivo AndroidManifest.xml
, dentro da marca <application>
:
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
- Depois que o conteúdo for recuperado, ele poderá ser passado para o SDK dos Serviços de Comunicação para ser analisada em um objeto IncomingCallInformation interno que será administrado chamando o método handlePushNotification em uma instância CallAgent. Uma instância
CallAgent
é criada chamando o métodocreateCallAgent(...)
na classeCallClient
.
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 a administração de mensagens de notificação por push for bem-sucedida e os todos os manipuladores de eventos forem registrados corretamente, o aplicativo tocará.
Cancelar o registro de notificações por push
Os aplicativos podem cancelar o registro de notificações por push a qualquer momento. Chame o método unregisterPushNotification()
no callAgent para cancelar o registro.
try {
callAgent.unregisterPushNotification().get();
}
catch(Exception e) {
System.out.println("Something went wrong while un-registering for all Incoming Calls Push Notifications.")
}
Configurar o backup do sistema
Criar o projeto do Xcode
No Xcode, crie um projeto do iOS e selecione o modelo Aplicativo de Modo de Exibição Único. Este início rápido usa a estrutura SwiftUI, portanto, você deve definir a Linguagem como Swift e a Interface como SwiftUI.
Você não criará testes durante este início rápido. Fique à vontade para limpar a caixa de seleção Incluir Testes.
Instalar 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
pod install
.Abra o
.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 aplicativo usando NSMicrophoneUsageDescription
. Defina o valor associado a uma cadeia de caracteres que será 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 de projeto e selecione Abrir Como>Código-Fonte. Adicione as linhas a seguir na seção do nível superior<dict>
e, em seguida, salve o arquivo.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Configurar o framework de aplicativos
Abra o arquivo ContentView.swift do projeto. Adicione uma declaração import
à parte superior do arquivo para importar a biblioteca AzureCommunicationCalling
. Além disso, importeAVFoundation
. Você precisará dela para as solicitações de permissão do áudio no código.
import AzureCommunicationCalling
import AVFoundation
Inicialização do CallAgent
Para criar umaCallAgent
instânciaCallClient
,você precisa usar um método callClient.createCallAgent
que retorne de modo assíncrono um objetoCallAgent
depois que ele for inicializado.
Para criar um cliente de chamada, passe um objeto CommunicationTokenCredential
:
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 objeto CommunicationTokenCredential
que você criou para CallClient
e defina o nome de 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")
}
})
Visão geral
As notificações por push móveis são as notificações pop-up que você vê em dispositivos móveis. Para chamadas, nos concentraremos em notificações por push de protocolo VoIP. Faremos o registro de notificações por push, a administração de notificações por push e o cancelamento do registro de notificações por push. Para obter um guia sobre a integração do CallKit em seu aplicativo iOS, consulte aqui Integração do CallKit com o SDK do iOS ACS.
Observação
Para registrar para notificações por push e tratamento das notificações por push para um CTE (ponto de extremidade personalizado do Teams) as API são as mesmas. A API descrita também pode ser invocada na classe CommonCallAgent
ou TeamsCallAgent
do CTE (Ponto de Extremidade Personalizado do Teams).
Configurar notificações por push
A notificação por push móvel é a notificação de item pop-up que você obtém no dispositivo móvel. Para as chamadas, nos concentraremos em notificações por push do (protocolo de chamada de voz por IP).
As seções a seguir descrevem como registrar-se para identificar e cancelar o registro de notificações por push. Antes de iniciar estas tarefas, conclua estes pré-requisitos:
- Em Xcode, vá paraAssinatura e Funcionalidades. Adicione uma funcionalidade selecionando+ funcionalidadee,em seguida, selecioneNotificações por Push.
- Adicione outra funcionalidade selecionando+ funcionalidadee, em seguida, selecioneModos de Segundo Plano.
- Em caixas de seleção ou botões de opçãoModos de Segundo Plano,selecione oProtocolo de chamada de voz por IPe Notificações Remotas.
Registrar notificações por push
Para registrar notificações por push, chamarregisterPushNotification()
em umaCallAgent
instância com um token de registro de dispositivo.
O registro das notificações por push precisa acontecer após a inicialização bem-sucedida. Quando o objetocallAgent
for destruído,logout
será chamado, o que cancelará automaticamente o registro das notificações por 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.")
}
}
Identificar as notificações por push
Para receber notificações de chamadas recebidas por push, em uma chamadahandlePushNotification()
de instânciaCallAgent
com um conteúdo 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 por push
Os aplicativos podem cancelar o registro de notificações por push a qualquer momento. Basta chamar o unregisterPushNotification
método em CallAgent
.
Observação
Os aplicativos não são cancelados automaticamente da notificação por push no 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")
}
}
Configurar o backup do sistema
Criar o projeto do Visual Studio
Para um aplicativo UWP, no Visual Studio 2022, crie um novo projeto Aplicativo em Branco (Universal do Windows). Depois de inserir o nome do projeto, fique à 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. O SDK do Aplicativo do Windows versão 1.3 ou posterior é necessário.
Instalar o pacote e as dependências usando o Gerenciador de Pacotes do NuGet
As bibliotecas e as APIs do SDK de Chamada estão disponíveis publicamente por meio de um pacote NuGet.
As etapas a seguir exemplificam como localizar, baixar e instalar o pacote do NuGet do SDK de chamada:
- Abra o Gerenciador de Pacotes do NuGet selecionando Ferramentas>Gerenciador de Pacotes do NuGet>Gerenciar de Pacotes do NuGet para Solução.
- Selecione Procurar e, em seguida, insira
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 selecioneAzure.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 na guia à direita.
- Selecione o botão Instalar.
Visão geral
As notificações por push na plataforma Windows são entregues usando Windows Push Notification Service (WNS),
.
Observação
Para registrar para notificações por push e tratamento das notificações por push para um CTE (ponto de extremidade personalizado do Teams) as API são as mesmas. A API descrita abaixo também pode ser invocada na classe CommonCallAgent
ou TeamsCallAgent
do CTE (Ponto de Extremidade Personalizado do Teams).
Configurar notificações por push
Uma notificação por push é a notificação pop-up que você obtém no seu dispositivo. Para as chamadas, nos concentraremos em notificações por push do (protocolo de chamada de voz por IP).
As seções a seguir descrevem como se registrar, lidar e mostrar uma notificação do Windows para responder/recusar uma chamada sendo recebida. Antes de iniciar estas tarefas, conclua estes pré-requisitos:
Siga o Tutorial : Enviar notificações para aplicativos da Plataforma Universal do Windows usando Hubs de Notificação do Azure. Após seguir esse tutorial, você terá o seguinte:
- Um aplicativo que tem os pacotes
WindowsAzure.Messaging.Managed
eMicrosoft.Toolkit.Uwp.Notifications
. - Um nome do Hub de PNH (Hub de Notificações por Push) do Azure mencionado como
<AZURE_PNH_HUB_NAME>
e a Cadeia de Conexão de PNH do Azure mencionada como<AZURE_PNH_HUB_CONNECTION_STRING>
nesse início rápido.
- Um aplicativo que tem os pacotes
Para se registrar em um canal do WNS (Serviço de Notificação do Windows) em cada init de aplicativo, certifique-se de adicionar o código de inicialização ao seu arquivo App.xaml.cs:
// 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 ativado quando uma nova mensagem de notificação por push chegar no 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;
}
}
Registrar notificações por push
Para se registrar para receber notificações por push, chame RegisterForPushNotificationAsync()
em uma instância de CallAgent
com o canal do registro WNS obtido no init do aplicativo.
O registro das 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;
Identificar as notificações por push
Para receber notificações de chamadas recebidas por push, em uma chamadahandlePushNotification()
de instânciaCallAgent
com um conteúdo 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);
}
}
Isso dispara um evento de chamada sendo recebida no CallAgent que mostra a notificação da chamada sendo recebida.
// 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 que irá se encarregar de pressionar o botão para a notificação no método OnActivated:
// 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();
}
}