Share via


Abilitare le notifiche push per le chiamate

In questa sezione viene illustrato come abilitare le notifiche push per le chiamate Servizi di comunicazione di Azure. La configurazione delle notifiche push consente agli utenti di sapere quando ha una chiamata in arrivo, che può quindi rispondere.

Notifica push

Le notifiche push consentono di inviare informazioni dall'applicazione ai dispositivi degli utenti. È possibile usare le notifiche push per visualizzare una finestra di dialogo, riprodurre un suono o visualizzare una chiamata in ingresso nel livello dell'interfaccia utente dell'app. Servizi di comunicazione di Azure supporta l'integrazione con Griglia di eventi di Azure e Hub di notifica di Azure che consentono di aggiungere notifiche push alle app.

Token TTL

Il token TTL (Time To Live) è un'impostazione che determina la durata di validità di un token di notifica prima di diventare non valida. Questa impostazione è utile per le applicazioni in cui l'engagement degli utenti non richiede l'interazione giornaliera, ma rimane critico in periodi più lunghi.

La configurazione TTL consente la gestione del ciclo di vita delle notifiche push, riducendo la necessità di rinnovi frequenti dei token garantendo al tempo stesso che il canale di comunicazione tra l'applicazione e i relativi utenti rimanga aperto e affidabile per durate prolungate.

Attualmente, il valore massimo per TTL è 180 giorni (15.552.000 secondi) e il valore minimo è 5 minuti (300 secondi). È possibile immettere questo valore e modificarlo di conseguenza in base alle proprie esigenze. Se non si specifica un valore, il valore predefinito è 24 ore (86.400 secondi).

Dopo aver chiamato l'API di notifica push del registro quando le informazioni sul token del dispositivo vengono salvate nel registrar. Al termine della durata TTL, le informazioni sull'endpoint del dispositivo vengono eliminate. Eventuali chiamate in arrivo su tali dispositivi non possono essere recapitate ai dispositivi se tali dispositivi non chiamano di nuovo l'API di notifica push di registrazione.

Nel caso in cui si voglia revocare un'identità che è necessario seguire questo processo, dopo che l'identità è stata revocata, è necessario eliminare la voce Registrar.

Nota

Per CTE (endpoint di Teams personalizzato) il valore TTL massimo è di 24 ore (86.400 secondi) non è possibile aumentare questo valore.

Prerequisiti

Servizi di comunicazione di Azure Web Calling SDK - Guida introduttiva alle notifiche push Web

Importante

Questa funzionalità di Servizi di comunicazione di Azure è attualmente in anteprima.

Le API di anteprima e gli SDK vengono forniti senza un contratto di servizio. È consigliabile non usarli per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero avere funzionalità limitate.

Per altre informazioni, vedere Condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure.

Servizi di comunicazione di Azure Web Calling SDK : le notifiche push Web sono disponibili in anteprima pubblica e disponibili come parte della versione 1.12.0-beta.2+.

Visitare l'esercitazione introduttiva sulle notifiche push Web: https://github.com/Azure-Samples/communication-services-javascript-quickstarts/blob/main/calling-web-push-notifications/README.md

Installazione dell'SDK

Individuare il file build.gradle a livello di progetto e aggiungere mavenCentral() all'elenco dei repository in buildscript e allprojects:

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

Quindi, nel file build.gradle a livello di modulo aggiungere le righe seguenti alla dependencies sezione :

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

Inizializzare gli oggetti necessari

Per creare un'istanza CallAgent di , è necessario chiamare il metodo in un'istanza createCallAgentCallClient di . Questa chiamata restituisce in modo asincrono un CallAgent oggetto istanza.

Il createCallAgent metodo accetta CommunicationUserCredential come argomento, che incapsula un token di accesso.

Per accedere a DeviceManager, è prima necessario creare un'istanza callAgent di . È quindi possibile usare il CallClient.getDeviceManager metodo per ottenere 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();

Per impostare un nome visualizzato per il chiamante, usare questo metodo 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();

Prerequisiti aggiuntivi per le notifiche push

Un account Firebase configurato con Cloud Messaging (FCM) abilitato e con il servizio Firebase Cloud Messaging connesso a un'istanza di Hub di notifica di Azure. Per altre informazioni, vedere Notifiche di Servizi di comunicazione. Inoltre, l'esercitazione presuppone che si stia usando Android Studio versione 3.6 o successiva per compilare l'applicazione.

Per poter ricevere messaggi di notifica da Firebase Cloud Messaging, è necessario un set di autorizzazioni per l'applicazione Android. AndroidManifest.xml Nel file aggiungere il set di autorizzazioni seguente subito dopo o <manifest ...> sotto il </application> tag .

<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" />

Panoramica

Le notifiche push per dispositivi mobili sono le notifiche popup visualizzate nei dispositivi mobili. Per le chiamate, ci concentreremo sulle notifiche push VoIP (Voice over Internet Protocol). Si eseguirà la registrazione per le notifiche push, gestire le notifiche push e quindi annullare la registrazione delle notifiche push.

Nota

Per eseguire la registrazione per le notifiche push e la gestione delle notifiche push per un endpoint di Teams personalizzato (CTE) l'API è la stessa. L'API descritta di seguito può anche essere richiamata nella classe o TeamsCallAgent per l'endpoint CommonCallAgent CTE (Custom Teams Endpoint).

Registrarsi per le notifiche push

Per eseguire la registrazione per le notifiche push, l'applicazione deve chiamare registerPushNotification() su un'istanza CallAgent con un token di registrazione del dispositivo.

Per ottenere il token di registrazione del dispositivo, aggiungere Firebase SDK al file del modulo dell'applicazione build.gradle aggiungendo le righe seguenti nella dependencies sezione, se non è già presente:

// 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'

Nel file build.gradle del livello di progetto aggiungere quanto segue nella dependencies sezione, se non è già presente:

classpath 'com.google.gms:google-services:4.3.3'

Aggiungere il plug-in seguente all'inizio del file, se non è già presente:

apply plugin: 'com.google.gms.google-services'

Selezionare Sincronizza ora nella barra degli strumenti. Aggiungere il frammento di codice seguente per ottenere il token di registrazione del dispositivo generato da Firebase Cloud Messaging SDK per l'istanza dell'applicazione client Assicurarsi di aggiungere le importazioni seguenti all'intestazione dell'attività principale per l'istanza. Sono necessari per il frammento di codice per recuperare il 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;

Aggiungere questo frammento di codice per recuperare il 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");
        }
    });

Registrare il token di registrazione del dispositivo con Calling Services SDK per le notifiche push delle chiamate in ingresso:

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.")
}

Gestione delle notifiche push

Per ricevere le notifiche push delle chiamate in ingresso, chiamare handlePushNotification() in un'istanza callAgent con un payload.

Per ottenere il payload da Firebase Cloud Messaging, iniziare creando un nuovo servizio (>servizio nuovo >> file) che estende la classe FirebaseMessagingService Firebase SDK ed esegue l'override del onMessageReceived metodo . Questo metodo è il gestore eventi chiamato quando Firebase Cloud Messaging recapita la notifica push all'applicazione.

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

Aggiungere la definizione di servizio seguente al AndroidManifest.xml file all'interno del <application> tag :

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
  • Dopo aver recuperato il payload, può essere passato all'SDK di Servizi di comunicazione da analizzare in un oggetto IncomingCallInformation interno che verrà gestito chiamando il metodo handlePushNotification in un'istanza di CallAgent. Un'istanza CallAgent viene creata chiamando il createCallAgent(...) metodo sulla 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 la gestione del messaggio di notifica push ha esito positivo e tutti i gestori eventi vengono registrati correttamente, l'applicazione verrà riequillata.

Annullare la registrazione delle notifiche push

Le applicazioni possono annullare la registrazione delle notifiche push in qualsiasi momento. Chiamare il unregisterPushNotification() metodo su callAgent per annullare la registrazione.

try {
    callAgent.unregisterPushNotification().get();
}
catch(Exception e) {
    System.out.println("Something went wrong while un-registering for all Incoming Calls Push Notifications.")
}

Configurare il sistema

Creare il progetto Xcode

In Xcode creare un nuovo progetto iOS e selezionare il modello Single View Application. Questa guida introduttiva usa il framework SwiftUI, quindi è consigliabile impostare Language su Swift e impostare Interface su SwiftUI.

Durante questa guida introduttiva non verranno creati test. Deselezionare la casella di controllo Includi test .

Screenshot che mostra la finestra per la creazione di un progetto in Xcode.

Installare il pacchetto e le dipendenze usando CocoaPods

  1. Creare un podfile per l'applicazione, come nell'esempio seguente:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. Eseguire pod install.

  3. Aprire .xcworkspace con Xcode.

Richiedere l'accesso al microfono

Per accedere al microfono del dispositivo, è necessario aggiornare l'elenco delle proprietà delle informazioni dell'app usando NSMicrophoneUsageDescription. Impostare il valore associato su una stringa che verrà inclusa nella finestra di dialogo usata dal sistema per richiedere l'accesso dall'utente.

Fare clic con il pulsante destro del mouse sulla voce Info.plist dell'albero del progetto e quindi scegliere Apri come>codice sorgente. Aggiungere le righe seguenti nella sezione di primo livello <dict> e quindi salvare il file.

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

Configurare il framework dell'app

Aprire il file ContentView.swift del progetto. Aggiungere una import dichiarazione all'inizio del file per importare la AzureCommunicationCalling libreria. Inoltre, importare AVFoundation. Sarà necessario per le richieste di autorizzazione audio nel codice.

import AzureCommunicationCalling
import AVFoundation

Inizializzare CallAgent

Per creare un'istanza CallAgent da CallClient, è necessario usare un callClient.createCallAgent metodo che restituisce in modo asincrono un CallAgent oggetto dopo l'inizializzazione.

Per creare un client di chiamata, passare un CommunicationTokenCredential oggetto :

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

Passare l'oggetto CommunicationTokenCredential creato a CallCliente impostare il nome visualizzato:

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

Panoramica

Le notifiche push per dispositivi mobili sono le notifiche popup visualizzate nei dispositivi mobili. Per le chiamate, ci concentreremo sulle notifiche push VoIP (Voice over Internet Protocol). Si eseguirà la registrazione per le notifiche push, gestire le notifiche push e quindi annullare la registrazione delle notifiche push. Per una guida sull'integrazione di CallKit nell'applicazione iOS, vedere qui Integrazione di CallKit con iOS ACS SDK.

Nota

Per eseguire la registrazione per le notifiche push e la gestione delle notifiche push per un endpoint di Teams personalizzato (CTE), le API sono le stesse. Le API descritte possono anche essere richiamate nella classe o TeamsCallAgent per l'endpoint CommonCallAgent CTE (Custom Teams Endpoint).

Impostazione delle notifiche push

Una notifica push per dispositivi mobili è la notifica popup visualizzata nel dispositivo mobile. Per le chiamate, ci concentreremo sulle notifiche push VoIP (voice over Internet Protocol).

Le sezioni seguenti descrivono come eseguire la registrazione per, gestire e annullare la registrazione delle notifiche push. Prima di avviare tali attività, completare questi prerequisiti:

  1. In Xcode passare a Firma e funzionalità. Aggiungere una funzionalità selezionando + Funzionalità e quindi selezionare Notifiche push.
  2. Aggiungere un'altra funzionalità selezionando + Funzionalità e quindi selezionare Modalità in background.
  3. In Modalità in background selezionare le caselle di controllo Voice over IP e Remote Notifications .In Background Modes (Modalità in background) selezionare le caselle di controllo Voice over IP e Remote Notifications (Notifiche remote e IP).

Screenshot che mostra come aggiungere funzionalità in Xcode.

Registrarsi per le notifiche push

Per eseguire la registrazione per le notifiche push, chiamare registerPushNotification() su un'istanza CallAgent con un token di registrazione del dispositivo.

La registrazione per le notifiche push deve essere eseguita dopo l'inizializzazione riuscita. Quando l'oggetto callAgent viene eliminato definitivamente, logout verrà chiamato, che annulla automaticamente la registrazione delle notifiche 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.")
    }
}

Gestire le notifiche push

Per ricevere notifiche push per le chiamate in ingresso, chiamare handlePushNotification() su un'istanza CallAgent con un payload del dizionario.

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

Annullare la registrazione delle notifiche push

Le applicazioni possono annullare la registrazione delle notifiche push in qualsiasi momento. È sufficiente chiamare il unregisterPushNotification metodo su CallAgent.

Nota

Le applicazioni non vengono annullate automaticamente dalla registrazione delle notifiche push alla disconnessione.

callAgent.unregisterPushNotification { (error) in
    if (error == nil) {
        print("Unregister of push notification was successful")
    } else {
       print("Unregister of push notification failed, please try again")
    }
}

Configurare il sistema

Creare il progetto di Visual Studio

Per un'app UWP, in Visual Studio 2022 creare un nuovo progetto App vuota (Windows universale). Dopo aver immesso il nome del progetto, è possibile scegliere qualsiasi Windows SDK successivo alla versione 10.0.17763.0.

Per un'app WinUI 3, creare un nuovo progetto con il modello App vuota, In pacchetto (WinUI 3 in Desktop) per configurare un'app WinUI 3 a pagina singola. SDK per app di Windows versione 1.3 o successiva è necessario.

Installare il pacchetto e le dipendenze usando NuGet Gestione pacchetti

Le API e le librerie di Calling SDK sono disponibili pubblicamente tramite un pacchetto NuGet.

I passaggi seguenti illustrano come trovare, scaricare e installare il pacchetto NuGet di Calling SDK:

  1. Aprire Gestione pacchetti NuGet selezionando Strumenti>NuGet Gestione pacchetti> Gestisci pacchetti NuGet per la soluzione.
  2. Selezionare Sfoglia e quindi immettere Azure.Communication.Calling.WindowsClient nella casella di ricerca.
  3. Assicurarsi che la casella di controllo Includi versione preliminare sia selezionata.
  4. Selezionare il Azure.Communication.Calling.WindowsClient pacchetto e quindi selezionare Azure.Communication.Calling.WindowsClient1.4.0-beta.1 o una versione più recente.
  5. Selezionare la casella di controllo corrispondente al progetto Servizi di comunicazione nella scheda a destra.
  6. Selezionare il pulsante Installa.

Panoramica

Le notifiche push nella piattaforma Windows vengono recapitate tramite Windows Push Notification Service (WNS),.

Nota

Per eseguire la registrazione per le notifiche push e la gestione delle notifiche push per un endpoint di Teams personalizzato (CTE) l'API è la stessa. L'API descritta di seguito può anche essere richiamata nella classe o TeamsCallAgent per l'endpoint CommonCallAgent CTE (Custom Teams Endpoint).

Impostazione delle notifiche push

Una notifica push è la notifica popup visualizzata nel dispositivo. Per le chiamate, ci concentreremo sulle notifiche push VoIP (voice over Internet Protocol).

Le sezioni seguenti descrivono come registrarsi per, gestire e visualizzare una notifica di Windows per rispondere o rifiutare una chiamata in arrivo. Prima di avviare tali attività, completare questi prerequisiti:

  1. Seguire l'esercitazione: Inviare notifiche alle app piattaforma UWP (Universal Windows Platform) usando Hub di notifica di Azure. Dopo aver seguito questa esercitazione, si dispone di:

    • Applicazione con i WindowsAzure.Messaging.Managed pacchetti e Microsoft.Toolkit.Uwp.Notifications .
    • Un nome dell'hub PNH (Hub notifiche push) di Azure a cui si fa riferimento come <AZURE_PNH_HUB_NAME> e la stringa di Connessione ion di Azure a cui si fa riferimento in <AZURE_PNH_HUB_CONNECTION_STRING> questa guida di avvio rapido.
  2. Per registrarsi per un canale WNS (Windows Notification Service) in ogni istanza dell'applicazione, assicurarsi di aggiungere il codice di inizializzazione nel file 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");
        }
    }
}
  1. Registrare il gestore eventi attivato quando arriva un nuovo messaggio di notifica push in 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;
    }
}

Registrarsi per le notifiche push

Per eseguire la registrazione per le notifiche push, chiamare RegisterForPushNotificationAsync() su un'istanza CallAgent con il canale di registrazione WNS ottenuto su init dell'applicazione.

La registrazione per le notifiche push deve essere eseguita dopo l'inizializzazione riuscita.

// 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;

Gestire le notifiche push

Per ricevere notifiche push per le chiamate in ingresso, chiamare handlePushNotification() su un'istanza CallAgent con un payload del dizionario.

// MainPage.xaml.cs

public async Task HandlePushNotificationIncomingCallAsync(string notificationContent)
{
    if (this.callAgent != null)
    {
        PushNotificationDetails pnDetails = PushNotificationDetails.Parse(notificationContent);
        await callAgent.HandlePushNotificationAsync(pnDetails);
    }
}

In questo modo viene attivato un evento di chiamata in ingresso in CallAgent che mostra la notifica di chiamata in ingresso.

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

Aggiungere il codice per gestire la pressione del pulsante per la notifica nel metodo 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();
    }
}

Passaggi successivi