Delen via


Pushmeldingen voor oproepen inschakelen

Hier leert u hoe u pushmeldingen inschakelt voor Azure Communication Services-aanroepen. Als u de pushmeldingen instelt, laat u uw gebruikers weten wanneer ze een inkomende oproep hebben, die ze vervolgens kunnen beantwoorden.

Pushmelding

Met pushmeldingen kunt u gegevens van uw toepassing verzenden naar apparaten van gebruikers. U kunt pushmeldingen gebruiken om een dialoogvenster weer te geven, een geluid af te spelen of binnenkomende aanroep weer te geven in de gebruikersinterfacelaag van de app. Azure Communication Services biedt integraties met Azure Event Grid en Azure Notification Hubs waarmee u pushmeldingen kunt toevoegen aan uw apps.

TTL-token

Het TTL-token (Time To Live) is een instelling waarmee wordt bepaald hoe lang een meldingstoken geldig blijft voordat het ongeldig wordt. Deze instelling is handig voor toepassingen waarbij gebruikersbetrokkenheid geen dagelijkse interactie vereist, maar die gedurende langere perioden kritiek blijft.

De TTL-configuratie maakt het beheer van de levenscyclus van pushmeldingen mogelijk, waardoor er minder vaak tokenvernieuwingen nodig zijn, terwijl het communicatiekanaal tussen de toepassing en de bijbehorende gebruikers gedurende langere tijd open en betrouwbaar blijft.

Momenteel is de maximumwaarde voor TTL 180 dagen (15.552.000 seconden) en de minimale waarde is 5 minuten (300 seconden). U kunt deze waarde invoeren en deze aanpassen aan uw behoeften. Als u geen waarde opgeeft, is de standaardwaarde 24 uur (86.400 seconden).

Zodra de API voor pushmeldingen registreren wordt aangeroepen wanneer de apparaattokengegevens worden opgeslagen in registrar. Nadat de TTL-levensduur is beëindigd, worden de apparaateindpuntgegevens verwijderd. Binnenkomende aanroepen op deze apparaten kunnen niet worden bezorgd op de apparaten als deze apparaten de API voor pushmeldingen registreren niet opnieuw aanroepen.

Als u een identiteit wilt intrekken, moet u dit proces volgen. Zodra de identiteit is ingetrokken, moet de vermelding van de registrar worden verwijderd.

Notitie

Voor CTE (Aangepast Teams-eindpunt) is de maximale TTL-waarde 24 uur (86.400 seconden) er is geen manier om deze waarde te verhogen.

Vereisten

Azure Communication Services Web Calling SDK - Quickstart voor webpushmeldingen

Belangrijk

Deze functie van Azure Communication Services is momenteel beschikbaar als preview-versie.

Preview-API's en SDK's worden aangeboden zonder een service level agreement. U wordt aangeraden deze niet te gebruiken voor productieworkloads. Sommige functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden.

Raadpleeg aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.

Azure Communication Services Web Calling SDK : webpushmeldingen zijn beschikbaar in openbare preview en zijn beschikbaar als onderdeel van versie 1.12.0-beta.2+.

Ga naar onze quickstart voor webpushmeldingen: https://github.com/Azure-Samples/communication-services-javascript-quickstarts/blob/main/calling-web-push-notifications/README.md

Belangrijk

Op 20 juni 2023 kondigde Google aan dat het verzenden van berichten met de verouderde FCM-API's afgeschaft. Google verwijdert de verouderde FCM uit de service in juni 2024. Google raadt aan om te migreren van verouderde FCM-API's naar FCM HTTP v1. Volg deze migratiehandleiding als uw Communicatie-reosurce nog steeds gebruikmaakt van de oude FCM verouderde API's.

Installeer de SDK

Zoek het build.gradle-bestand op projectniveau en voeg deze toe aan mavenCentral() de lijst met opslagplaatsen onder buildscript enallprojects:

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

Voeg vervolgens in het build.gradle-bestand op moduleniveau de volgende regels toe aan de dependencies sectie:

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

De vereiste objecten initialiseren

Als u een CallAgent exemplaar wilt maken, moet u de createCallAgent methode voor een CallClient exemplaar aanroepen. Hiermee wordt asynchroon een CallAgent exemplaarobject geretourneerd.

De createCallAgent methode wordt CommunicationUserCredential gebruikt als een argument, dat een toegangstoken inkapselt.

Als u toegang DeviceManagerwilt krijgen, moet u eerst een callAgent exemplaar maken. Vervolgens kunt u de CallClient.getDeviceManager methode gebruiken om op te halen 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();

Als u een weergavenaam voor de aanroeper wilt instellen, gebruikt u deze alternatieve methode:

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

Aanvullende vereisten voor pushmeldingen

Een Firebase-account dat is ingesteld met Cloud Messaging (FCM) ingeschakeld en waarbij uw Firebase Cloud Messaging-service is verbonden met een Azure Notification Hub-exemplaar. Zie Communication Services-meldingen voor meer informatie. Bovendien wordt in de zelfstudie ervan uitgegaan dat u Android Studio versie 3.6 of hoger gebruikt om uw toepassing te bouwen.

Er is een set machtigingen vereist voor de Android-toepassing om meldingen te kunnen ontvangen van Firebase Cloud Messaging. Voeg in het AndroidManifest.xml bestand de volgende set machtigingen toe direct na de <manifest ...> of onder de </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" />

Overzicht

Mobiele pushmeldingen zijn de pop-upmeldingen die u op mobiele apparaten ziet. Voor gesprekken richten we ons op VoIP-pushmeldingen (Voice over Internet Protocol). We registreren zich voor pushmeldingen, verwerken pushmeldingen en vervolgens de registratie van pushmeldingen ongedaan maken.

Notitie

Als u zich wilt registreren voor pushmeldingen en de verwerking van de pushmeldingen voor een aangepast Teams-eindpunt (CTE) zijn de API's hetzelfde. De hieronder beschreven API's kunnen ook worden aangeroepen op de CommonCallAgent of TeamsCallAgent klasse voor Het Eindpunt van Aangepaste Teams (CTE).

Registreren voor pushmeldingen

Als u zich wilt registreren voor pushmeldingen, moet de toepassing een CallAgent exemplaar aanroepen registerPushNotification() met een apparaatregistratietoken.

Als u het apparaatregistratietoken wilt verkrijgen, voegt u de Firebase SDK toe aan het bestand van build.gradle uw toepassingsmodule door de volgende regels toe te voegen in de dependencies sectie als deze er nog niet is:

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

Voeg in het build.gradle-bestand van uw projectniveau het volgende toe in de dependencies sectie als dit nog niet is gebeurd:

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

Voeg de volgende invoegtoepassing toe aan het begin van het bestand als dit nog niet is gebeurd:

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

Selecteer Nu synchroniseren op de werkbalk. Voeg het volgende codefragment toe om het apparaatregistratietoken op te halen dat is gegenereerd door de Firebase Cloud Messaging SDK voor het clienttoepassingsexemplaren. Voeg de onderstaande importbewerkingen toe aan de header van de hoofdactiviteit voor het exemplaar. Ze zijn vereist voor het fragment om het token op te halen:

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;

Voeg dit fragment toe om het token op te halen:

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

Registreer het apparaatregistratietoken met de Calling Services SDK voor pushmeldingen voor binnenkomende oproepen:

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

Verwerking van pushmeldingen

Als u pushmeldingen voor binnenkomende oproepen wilt ontvangen, roept u handlePushNotification () aan op een CallAgent-exemplaar met een nettolading.

Als u de nettolading wilt verkrijgen van Firebase Cloud Messaging, begint u met het maken van een nieuwe service (File > New Service Service>) die de FirebaseMessagingService Firebase SDK-klasse uitbreidt en de onMessageReceived> methode overschrijft. Deze methode is de gebeurtenishandler die wordt aangeroepen wanneer Firebase Cloud Messaging de pushmelding naar de toepassing levert.

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

Voeg de volgende servicedefinitie toe aan het AndroidManifest.xml bestand, binnen de <application> tag:

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
  • Zodra de nettolading is opgehaald, kan deze worden doorgegeven aan de Communication Services SDK om te worden geparseerd in een intern IncomingCallInformation-object dat wordt verwerkt door de handlePushNotification-methode aan te roepen op een CallAgent-exemplaar . Er wordt een CallAgent exemplaar gemaakt door de createCallAgent(...) methode in de CallClient klasse aan te roepen.
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.");
}

Wanneer de verwerking van het pushmeldingsbericht is geslaagd en de alle gebeurtenis-handlers correct zijn geregistreerd, gaat de toepassing over.

Registratie van pushmeldingen ongedaan maken

Toepassingen kunnen de registratie van pushmeldingen op elk gewenst moment ongedaan maken. Roep de unregisterPushNotification() methode aan bij callAgent om de registratie ongedaan te maken.

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

Uw systeem instellen

Het Xcode-project maken

Maak in Xcode een nieuw iOS-project en selecteer de sjabloon Single View-app (Toepassing met één weergave). In deze quickstart wordt het SwiftUI-framework gebruikt, dus moet u Taal instellen op Swift en interface instellen op SwiftUI.

Tijdens deze quickstart gaat u geen tests maken. Schakel het selectievakje Inclusief tests uit.

Schermopname van het venster voor het maken van een project in Xcode.

Het pakket en afhankelijkheden installeren met CocoaPods

  1. Maak een Podfile voor uw toepassing, zoals in dit voorbeeld:

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

  3. Open .xcworkspace met behulp van Xcode.

Toegang tot de microfoon aanvragen

Voor toegang tot de microfoon van het apparaat moet u de lijst met gegevenseigenschappen van uw app bijwerken met behulp van NSMicrophoneUsageDescription. U stelt de gekoppelde waarde in op een tekenreeks die wordt opgenomen in het dialoogvenster dat het systeem gebruikt om toegang van de gebruiker aan te vragen.

Klik met de rechtermuisknop op de vermelding Info.plist van de projectstructuur en selecteer Open As>Source Code. Voeg de volgende regels toe in de sectie op het hoogste niveau <dict> en sla het bestand op.

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

Stel het app-framework in

Open het bestand ContentView.swift van uw project. Voeg een import declaratie toe aan het begin van het bestand om de AzureCommunicationCalling bibliotheek te importeren. Daarnaast importeert u AVFoundation. U hebt deze nodig voor audiomachtigingsaanvragen in de code.

import AzureCommunicationCalling
import AVFoundation

CallAgent initialiseren

Als u een CallAgent exemplaar CallClientwilt maken, moet u een callClient.createCallAgent methode gebruiken die asynchroon een CallAgent object retourneert nadat het is geïnitialiseerd.

Als u een aanroepclient wilt maken, geeft u een CommunicationTokenCredential object door:

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

Geef het CommunicationTokenCredential object door waarnaar u hebt gemaakt CallClienten stel de weergavenaam in:

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

Overzicht

Mobiele pushmeldingen zijn de pop-upmeldingen die u op mobiele apparaten ziet. Voor gesprekken richten we ons op VoIP-pushmeldingen (Voice over Internet Protocol). We registreren zich voor pushmeldingen, verwerken pushmeldingen en vervolgens de registratie van pushmeldingen ongedaan maken. Voor een handleiding over CallKit-integratie in uw iOS-toepassing raadpleegt u hier CallKit-integratie met iOS ACS SDK.

Notitie

Als u zich wilt registreren voor pushmeldingen en de verwerking van de pushmeldingen voor een aangepast Teams-eindpunt (CTE) zijn de API's hetzelfde. De beschreven API's kunnen ook worden aangeroepen op de CommonCallAgent of TeamsCallAgent klasse voor Het Eindpunt van Aangepaste Teams (CTE).

Pushmeldingen instellen

Een mobiele pushmelding is de pop-upmelding die u op het mobiele apparaat ontvangt. Voor gesprekken richten we ons op VoIP-pushmeldingen (voice over Internet Protocol).

In de volgende secties wordt beschreven hoe u pushmeldingen registreert, verwerkt en de registratie ervan ongedaan kunt maken. Voordat u deze taken start, moet u deze vereisten voltooien:

  1. Ga in Xcode naar de mogelijkheden voor ondertekening en mogelijkheden. Voeg een mogelijkheid toe door + Mogelijkheid te selecteren en vervolgens Pushmeldingen te selecteren.
  2. Voeg nog een mogelijkheid toe door + Mogelijkheid te selecteren en vervolgens Achtergrondmodi te selecteren.
  3. Schakel onder Achtergrondmodi de selectievakjes Voice over IP en Externe meldingen in.

Schermopname van het toevoegen van mogelijkheden in Xcode.

Registreren voor pushmeldingen

Als u zich wilt registreren voor pushmeldingen, roept registerPushNotification() u een CallAgent exemplaar aan met een apparaatregistratietoken.

Registratie voor pushmeldingen moet plaatsvinden na een geslaagde initialisatie. Wanneer het callAgent object wordt vernietigd, logout wordt het aangeroepen, waardoor de registratie van pushmeldingen automatisch ongedaan wordt gemaakt.

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

Pushmeldingen verwerken

Als u pushmeldingen wilt ontvangen voor binnenkomende oproepen, roept u handlePushNotification() een exemplaar aan met een payload van een CallAgent woordenlijst.

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

Registratie van pushmeldingen ongedaan maken

Toepassingen kunnen de registratie van pushmeldingen op elk gewenst moment ongedaan maken. Roep gewoon de unregisterPushNotification methode aan CallAgent.

Notitie

Toepassingen worden niet automatisch uitgeschreven bij pushmeldingen bij afmelding.

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

Uw systeem instellen

Het Visual Studio-project maken

Maak voor een UWP-app in Visual Studio 2022 een nieuw leeg app-project (Universal Windows). Nadat u de projectnaam hebt ingevoerd, kunt u een Windows SDK kiezen die hoger is dan 10.0.17763.0.

Maak voor een WinUI 3-app een nieuw project met de sjabloon Blank App, Packaged (WinUI 3 in Desktop) om een WinUI 3-app met één pagina in te stellen. Windows-app SDK versie 1.3 of hoger is vereist.

Installeer het pakket en afhankelijkheden met behulp van NuGet Pakketbeheer

De Aanroepende SDK-API's en -bibliotheken zijn openbaar beschikbaar via een NuGet-pakket.

De volgende stappen laten zien hoe u het NuGet-pakket Voor aanroepende SDK kunt vinden, downloaden en installeren:

  1. Open NuGet Pakketbeheer door Tools>NuGet Pakketbeheer> Manage NuGet Packages for Solution te selecteren.
  2. Selecteer Bladeren en voer Azure.Communication.Calling.WindowsClient het zoekvak in.
  3. Zorg ervoor dat het selectievakje Voorlopige versie opnemen is ingeschakeld.
  4. Selecteer het Azure.Communication.Calling.WindowsClient pakket en selecteer Azure.Communication.Calling.WindowsClientvervolgens 1.4.0-beta.1 of een nieuwere versie.
  5. Schakel het selectievakje in dat overeenkomt met het Communication Services-project op het tabblad aan de rechterkant.
  6. Selecteer de knop Installeren .

Overzicht

Pushmeldingen op het Windows-platform worden geleverd met behulp van Windows Push Notification Service (WNS),.

Notitie

Als u zich wilt registreren voor pushmeldingen en de verwerking van de pushmeldingen voor een aangepast Teams-eindpunt (CTE) zijn de API's hetzelfde. De hieronder beschreven API's kunnen ook worden aangeroepen op de CommonCallAgent of TeamsCallAgent klasse voor Het Eindpunt van Aangepaste Teams (CTE).

Pushmeldingen instellen

Een pushmelding is de pop-upmelding die u op uw apparaat ontvangt. Voor gesprekken richten we ons op VoIP-pushmeldingen (voice over Internet Protocol).

In de volgende secties wordt beschreven hoe u zich registreert voor, verwerkt en een Windows-melding weergeeft om een inkomende oproep te beantwoorden/weigeren. Voordat u deze taken start, moet u deze vereisten voltooien:

  1. Volg de zelfstudie: Meldingen verzenden naar Universeel Windows-platform apps met behulp van Azure Notification Hubs. Nadat u deze zelfstudie hebt gevolgd, hebt u het volgende:

    • Een toepassing met de WindowsAzure.Messaging.Managed en Microsoft.Toolkit.Uwp.Notifications pakketten.
    • Een Azure PNH-hubnaam (Push Notifications Hub) waarnaar wordt verwezen als <AZURE_PNH_HUB_NAME> en de Azure PNH-verbindingsreeks waarnaar in deze quickstart wordt verwezen <AZURE_PNH_HUB_CONNECTION_STRING> .
  2. Als u zich wilt registreren voor een WNS-kanaal (Windows Notification Service) voor elke toepassing init, moet u de initialisatiecode toevoegen aan uw App.xaml.cs-bestand:

// 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. Registreer de gebeurtenis-handler die is geactiveerd wanneer er een nieuw pushmeldingsbericht binnenkomt op 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;
    }
}

Registreren voor pushmeldingen

Als u zich wilt registreren voor pushmeldingen, roept RegisterForPushNotificationAsync() u een CallAgent exemplaar aan met het WNS-registratiekanaal dat is verkregen op application init.

Registratie voor pushmeldingen moet plaatsvinden na een geslaagde initialisatie.

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

Pushmeldingen verwerken

Als u pushmeldingen wilt ontvangen voor binnenkomende oproepen, roept u handlePushNotification() een exemplaar aan met een payload van een CallAgent woordenlijst.

// MainPage.xaml.cs

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

Hiermee wordt een gebeurtenis voor binnenkomende oproepen geactiveerd in CallAgent die de melding voor binnenkomende oproepen weergeeft.

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

Voeg de code toe om de knop te verwerken voor de melding in de methode 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();
    }
}

Volgende stappen