Povolení nabízených oznámení pro volání

Tady se dozvíte, jak povolit nabízená oznámení pro volání služeb Azure Communication Services. Nastavení nabízených oznámení uživatelům umožní vědět, kdy mají příchozí hovor, který pak můžou přijmout.

Nabízené oznámení

Nabízená oznámení umožňují odesílat informace z aplikace do zařízení uživatelů. Nabízená oznámení můžete použít k zobrazení dialogového okna, přehrávání zvuku nebo zobrazení příchozího volání do vrstvy uživatelského rozhraní aplikace. Služba Azure Communication Services poskytuje integrace se službou Azure Event Grid a Azure Notification Hubs , které umožňují přidávat nabízená oznámení do vašich aplikací.

Token TTL

Token TTL (Time To Live) je nastavení, které určuje dobu, po kterou bude token oznámení platný, než se stane neplatným. Toto nastavení je užitečné pro aplikace, u kterých zapojení uživatelů nevyžaduje každodenní interakci, ale zůstává kritické v delších obdobích.

Konfigurace hodnoty TTL umožňuje správu životního cyklu nabízených oznámení, což snižuje potřebu častých prodlužování platnosti tokenů a zároveň zajišťuje, aby komunikační kanál mezi aplikací a jejími uživateli zůstal otevřený a spolehlivý po delší dobu.

Maximální hodnota hodnoty TTL je v současné době 180 dnů (15 552 000 sekund) a minimální hodnota je 5 minut (300 sekund). Tuto hodnotu můžete zadat a upravit podle svých potřeb. Pokud nezadáte hodnotu, výchozí hodnota je 24 hodin (86 400 sekund).

Jakmile se rozhraní API pro nabízená oznámení registru zavolá, uloží se informace o tokenu zařízení v registrátorovi. Po skončení životnosti hodnoty TTL se odstraní informace o koncovém bodu zařízení. Pokud tato zařízení znovu nezavolají rozhraní API pro registraci nabízených oznámení, nebudou na tato zařízení do zařízení doručena žádná příchozí volání.

V případě, že chcete odvolat identitu, je potřeba postupovat podle tohoto procesu, po odvolání identity by se měla položka registrátora odstranit.

Poznámka:

U CTE (vlastní koncový bod Teams) je maximální hodnota TTL 24 hodin (86 400 sekund) neexistuje způsob, jak tuto hodnotu zvýšit.

Požadavky

Sada SDK pro webové volání ve službě Azure Communication Services – Rychlý start s webovými nabízenými oznámeními

Důležité

Tato funkce služeb Azure Communication Services je aktuálně ve verzi Preview.

Rozhraní API a sady SDK verze Preview jsou poskytovány bez smlouvy o úrovni služeb. Doporučujeme je nepoužívat pro produkční úlohy. Některé funkce nemusí být podporované nebo můžou mít omezené možnosti.

Další informace najdete v dodatečných podmínkách použití pro verze Preview Microsoft Azure.

Sada SDK pro webové volání služeb Azure Communication Services – Nabízená oznámení na webu jsou ve verzi Public Preview a jsou dostupná jako součást verze 1.12.0-beta.2+.

Navštivte náš rychlý start s webovými nabízenými oznámeními: https://github.com/Azure-Samples/communication-services-javascript-quickstarts/blob/main/calling-web-push-notifications/README.md

Nainstalujte sadu SDK .

Vyhledejte soubor build.gradle na úrovni projektu a přidejte mavenCentral() ho do seznamu úložišť v části buildscript aallprojects:

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

Potom do souboru build.gradle na úrovni modulu přidejte do oddílu dependencies následující řádky:

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

Inicializace požadovaných objektů

Pokud chcete vytvořit CallAgent instanci, musíte metodu createCallAgentCallClient volat v instanci. Toto volání asynchronně vrátí CallAgent objekt instance.

Metoda createCallAgent přebírá CommunicationUserCredential jako argument, který zapouzdřuje přístupový token.

Pokud chcete získat přístup DeviceManager, musíte nejprve vytvořit callAgent instanci. Pak můžete použít metodu CallClient.getDeviceManager získat 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();

Pokud chcete nastavit zobrazovaný název volajícího, použijte tuto alternativní metodu:

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

Další požadavky pro nabízená oznámení

Účet Firebase nastavený s povoleným cloudovým zasíláním zpráv (FCM) a službou Firebase Cloud Messaging připojenou k instanci služby Azure Notification Hub. Další informace najdete v tématu Oznámení komunikačních služeb. Kurz navíc předpokládá, že k sestavení aplikace používáte Android Studio verze 3.6 nebo vyšší.

Pro aplikaci pro Android je vyžadována sada oprávnění, aby mohla přijímat oznámení ze služby Firebase Cloud Messaging. AndroidManifest.xml Do souboru přidejte následující sadu oprávnění hned za <manifest ...> značku nebo pod </application> značku.

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

Přehled

Mobilní nabízená oznámení jsou automaticky otevíraná oznámení, která vidíte na mobilních zařízeních. Pro volání se zaměříme na nabízená oznámení VoIP (Voice over Internet Protocol). Zaregistrujeme se pro nabízená oznámení, zpracujeme nabízená oznámení a pak zrušíme registraci nabízených oznámení.

Poznámka:

Registrace nabízených oznámení a zpracování nabízených oznámení pro vlastní koncový bod Teams (CTE) je stejné. Níže popsané rozhraní API je také možné vyvolat v koncovém CommonCallAgentTeamsCallAgent bodu nebo třídě pro vlastní koncový bod Teams (CTE).

Registrace nabízených oznámení

Aby se aplikace zaregistrovala k nabízeným oznámením, musí volat registerPushNotification()CallAgent instanci pomocí tokenu registrace zařízení.

Pokud chcete získat token registrace zařízení, přidejte do souboru modulu build.gradle aplikace sadu Firebase SDK přidáním následujících řádků v dependencies části, pokud tam ještě není:

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

Pokud soubor build.gradle na úrovni projektu ještě neexistuje, přidejte do části následujícídependencies:

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

Pokud ještě neexistuje, přidejte na začátek souboru následující modul plug-in:

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

Na panelu nástrojů vyberte Synchronizovat. Přidejte následující fragment kódu pro získání tokenu registrace zařízení vygenerovaného sadou Firebase Cloud Messaging SDK pro instanci klientské aplikace. Nezapomeňte přidat následující importy do hlavičky hlavní aktivity instance. Vyžaduje se, aby fragment kódu načetl 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;

Přidejte tento fragment kódu pro načtení tokenu:

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

Zaregistrujte token registrace zařízení v sadě SDK volajících služeb pro nabízená oznámení o příchozích hovorech:

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

Zpracování nabízených oznámení

Chcete-li přijímat nabízená oznámení příchozích volání, volání handlePushNotification() v instanci CallAgent s datovou částí.

Pokud chcete získat datovou část z Firebase Cloud Messaging, začněte vytvořením nové služby (File > New Service Service>), která rozšiřuje FirebaseMessagingService Firebase SDK třídy a přepíše metodu onMessageReceived>. Tato metoda je obslužná rutina události volána, když Firebase Cloud Messaging doručí nabízené oznámení do aplikace.

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

Do souboru přidejte AndroidManifest.xml následující definici služby uvnitř značky <application> :

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
  • Jakmile se datová část načte, lze ji předat do sady SDK komunikačních služeb , která se má analyzovat do interního objektu IncomingCallInformation , který bude zpracován voláním handlePushNotification metody v instanci CallAgent . Instance CallAgent je vytvořena voláním createCallAgent(...) metody ve CallClient třídě.
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.");
}

Pokud je zpracování zprávy nabízeného oznámení úspěšné a všechny obslužné rutiny událostí jsou správně zaregistrovány, aplikace bude vyzvánět.

Zrušení registrace nabízených oznámení

Aplikace můžou kdykoli zrušit registraci nabízených oznámení. unregisterPushNotification() Volání metody callAgent zrušit registraci.

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

Nastavení systému

Vytvoření projektu Xcode

V Xcode vytvořte nový projekt pro iOS a vyberte šablonu aplikace s jedním zobrazením . Tento rychlý start používá architekturu SwiftUI, takže byste měli nastavit jazyk na Swift a nastavit rozhraní na SwiftUI.

Během tohoto rychlého startu nebudete vytvářet testy. Zrušte zaškrtnutí políčka Zahrnout testy .

Snímek obrazovky znázorňující okno pro vytvoření projektu v Xcode

Instalace balíčku a závislostí pomocí CocoaPods

  1. Vytvořte pro aplikaci soubor Podfile, například v tomto příkladu:

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

  3. Otevřete .xcworkspace pomocí Xcode.

Vyžádání přístupu k mikrofonu

Pokud chcete získat přístup k mikrofonu zařízení, musíte aktualizovat seznam vlastností informací aplikace pomocí NSMicrophoneUsageDescription. Přidruženou hodnotu nastavíte na řetězec, který bude zahrnutý v dialogovém okně, které systém používá k vyžádání přístupu od uživatele.

Klikněte pravým tlačítkem myši na položku Info.plist stromu projektu a pak vyberte Open As>Source Code. Do oddílu nejvyšší úrovně <dict> přidejte následující řádky a pak soubor uložte.

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

Nastavení architektury aplikace

Otevřete soubor ContentView.swift projektu. import Přidejte deklaraci do horní části souboru pro import AzureCommunicationCalling knihovny. Kromě toho import AVFoundation. Budete ho potřebovat pro žádosti o zvuková oprávnění v kódu.

import AzureCommunicationCalling
import AVFoundation

Inicializace callagentu

Chcete-li vytvořit CallAgent instanci z CallClient, musíte použít metodu callClient.createCallAgent , která asynchronně vrátí CallAgent objekt po inicializaci.

Pokud chcete vytvořit klienta volání, předejte CommunicationTokenCredential objekt:

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

CommunicationTokenCredential Předejte objekt, který jste vytvořiliCallClient, a nastavte zobrazovaný název:

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

Přehled

Mobilní nabízená oznámení jsou automaticky otevíraná oznámení, která vidíte na mobilních zařízeních. Pro volání se zaměříme na nabízená oznámení VoIP (Voice over Internet Protocol). Zaregistrujeme se pro nabízená oznámení, zpracujeme nabízená oznámení a pak zrušíme registraci nabízených oznámení. Průvodce integrací CallKitu v aplikaci pro iOS najdete v tématu Integrace CallKitu s iOS ACS SDK.

Poznámka:

Registrace nabízených oznámení a zpracování nabízených oznámení pro vlastní koncový bod Teams (CTE) jsou stejná rozhraní API. Popsaná rozhraní API je také možné vyvolat v koncovém CommonCallAgentTeamsCallAgent bodu nebo třídě pro vlastní koncový bod Teams (CTE).

Nastavení nabízených oznámení

Mobilní nabízené oznámení je automaticky otevírané oznámení, které se zobrazí v mobilním zařízení. Při volání se zaměříme na nabízená oznámení VoIP (voice over Internet Protocol).

Následující části popisují, jak se registrovat, zpracovávat a zrušit registraci nabízených oznámení. Před zahájením těchto úkolů proveďte tyto požadavky:

  1. V Xcode přejděte do možností podepisování a funkcí. Přidejte funkci tak , že vyberete + Schopnost a pak vyberete Nabízená oznámení.
  2. Přidejte další funkci výběrem + Možnosti a pak vyberte Režimy pozadí.
  3. V části Režimy pozadí zaškrtněte políčka Hlas přes IP adresu a vzdálená oznámení .

Snímek obrazovky, který ukazuje, jak přidat možnosti v Xcode

Registrace nabízených oznámení

Pokud se chcete zaregistrovat k nabízeným oznámením, zavolejte registerPushNotification()CallAgent instanci pomocí tokenu registrace zařízení.

Registrace nabízených oznámení musí proběhnout po úspěšné inicializaci. callAgent Když je objekt zničen, bude volána, logout což automaticky zruší registraci nabízených oznámení.

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

Zpracování nabízených oznámení

Pokud chcete přijímat nabízená oznámení pro příchozí hovory, zavolejte handlePushNotification() instanci CallAgent s datovou částí slovníku.

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

Zrušení registrace nabízených oznámení

Aplikace můžou kdykoli zrušit registraci nabízených oznámení. Jednoduše zavolejte metodu unregisterPushNotification na CallAgent.

Poznámka:

Aplikace se při odhlášení automaticky neodregistrují z nabízených oznámení.

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

Nastavení systému

Vytvoření projektu sady Visual Studio

V případě aplikace pro UPW v sadě Visual Studio 2022 vytvořte nový projekt Prázdná aplikace (Univerzální windows). Po zadání názvu projektu si můžete vybrat libovolnou sadu Windows SDK později než 10.0.17763.0.

V případě aplikace WinUI 3 vytvořte nový projekt pomocí šablony Prázdná aplikace zabalená (WinUI 3 v desktopové verzi) pro nastavení jednostráňové aplikace WinUI 3. Vyžaduje se sada Windows App SDK verze 1.3 nebo novější.

Instalace balíčku a závislostí pomocí Správce balíčků NuGet

Rozhraní API a knihovny volající sady SDK jsou veřejně dostupné prostřednictvím balíčku NuGet.

Následující postup ukazuje, jak najít, stáhnout a nainstalovat balíček NuGet volající sady SDK:

  1. Otevřete Správce balíčků NuGet výběrem nástrojů>NuGet Správce balíčků> Nabídky NuGet pro řešení.
  2. Vyberte Procházet a zadejte Azure.Communication.Calling.WindowsClient do vyhledávacího pole.
  3. Ujistěte se, že je zaškrtnuté políčko Zahrnout předběžné verze .
  4. Azure.Communication.Calling.WindowsClient Vyberte balíček a pak vyberte Azure.Communication.Calling.WindowsClientverzi 1.4.0-beta.1 nebo novější.
  5. Zaškrtněte políčko odpovídající projektu Komunikační služby na pravé straně.
  6. Vyberte tlačítko Instalovat.

Přehled

Nabízená oznámení na platformě Windows se doručují pomocí Windows Push Notification Service (WNS),.

Poznámka:

Registrace nabízených oznámení a zpracování nabízených oznámení pro vlastní koncový bod Teams (CTE) je stejné. Níže popsané rozhraní API je také možné vyvolat v koncovém CommonCallAgentTeamsCallAgent bodu nebo třídě pro vlastní koncový bod Teams (CTE).

Nastavení nabízených oznámení

Nabízené oznámení je automaticky otevírané oznámení, které se zobrazí ve vašem zařízení. Při volání se zaměříme na nabízená oznámení VoIP (voice over Internet Protocol).

Následující části popisují, jak se zaregistrovat, zpracovat a zobrazit oznámení systému Windows pro přijetí nebo odmítnutí příchozího hovoru. Před zahájením těchto úkolů proveďte tyto požadavky:

  1. Postupujte podle kurzu: Odesílání oznámení do Univerzální platforma Windows aplikací pomocí služby Azure Notification Hubs. Po provedení tohoto kurzu máte:

    • Aplikace, která obsahuje WindowsAzure.Messaging.Managed balíčky a Microsoft.Toolkit.Uwp.Notifications balíčky.
    • Název centra Nabízených oznámení (Azure PNH) odkazovaný jako <AZURE_PNH_HUB_NAME> na azure PNH Připojení ion String, jak <AZURE_PNH_HUB_CONNECTION_STRING> je uvedeno v tomto rychlém startu.
  2. Pokud chcete zaregistrovat kanál WNS (Windows Notification Service) v každé inicializaci aplikace, nezapomeňte do souboru App.xaml.cs přidat inicializační kód:

// 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. Zaregistrujte obslužnou rutinu události aktivovanou při příchodu nové zprávy s nabízeným oznámením na 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;
    }
}

Registrace nabízených oznámení

Pokud se chcete zaregistrovat k nabízeným oznámením, zavolejte RegisterForPushNotificationAsync() instanci s registračním CallAgent kanálem WNS získaným v inicializaci aplikace.

Registrace nabízených oznámení musí proběhnout po úspěšné inicializaci.

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

Zpracování nabízených oznámení

Pokud chcete přijímat nabízená oznámení pro příchozí hovory, zavolejte handlePushNotification() instanci CallAgent s datovou částí slovníku.

// MainPage.xaml.cs

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

Tím se aktivuje událost příchozího volání na CallAgent, která zobrazuje oznámení o příchozím hovoru.

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

Přidejte kód pro zpracování tlačítka pro oznámení v metodě 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();
    }
}

Další kroky