Delen via


Pushmeldingen voor oproepen inschakelen

Pushmeldingen verzenden gegevens van uw toepassing 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.

In dit artikel leert u hoe u pushmeldingen inschakelt voor Azure Communication Services-aanroepen. Communication Services biedt integraties met Azure Event Grid en Azure Notification Hubs waarmee u pushmeldingen kunt toevoegen aan uw apps.

Overzicht van TTL-tokens

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.

Met de TTL-configuratie kan de levenscyclus van pushmeldingen worden beheerd. Het vermindert de noodzaak van frequente tokenvernieuwingen en helpt ervoor te zorgen dat het communicatiekanaal tussen de toepassing en de gebruikers open en betrouwbaar blijft gedurende langere tijd.

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

Nadat de API voor pushmeldingen registreren is aangeroepen, worden de apparaattokengegevens opgeslagen in de registrar. Nadat de TTL-duur is beëindigd, wordt 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, volgt u dit proces. Nadat de identiteit is ingetrokken, moet de vermelding van de registrar worden verwijderd.

Notitie

Voor een Microsoft Teams-gebruiker is de maximale TTL-waarde 24 uur (86.400 seconden). Er is geen manier om deze waarde te verhogen. U moet de toepassing elke 24 uur op de achtergrond wakker maken en het apparaattoken registreren.

Als u de toepassing wilt activeren, haalt u het nieuwe token op en voert u de registratie uit, volgt u de instructies voor het iOS-platform of de instructies voor het Android-platform.

Vereisten

Volg de quickstart

Webpushmeldingen via de Azure Communication Services Web Calling SDK zijn in preview en zijn beschikbaar als onderdeel van versie 1.12.0-beta.2+.

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.

Zie de quickstart op GitHub voor stapsgewijze instructies.

  • Een Firebase-account waarvoor Firebase Cloud Messaging (FCM) is ingeschakeld en met uw FCM-service die is verbonden met een Azure Notification Hubs-exemplaar. Zie Communication Services-meldingen voor meer informatie.

  • Android Studio versie 3.6 of hoger om uw toepassing te bouwen.

  • Een set machtigingen waarmee de Android-toepassing meldingsberichten van FCM kan ontvangen. Voeg in het AndroidManifest.xml bestand de volgende machtigingen toe direct na <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" />
    

Belangrijk

Op 20 juni 2023 kondigde Google aan dat het verzenden van berichten met behulp van de verouderde FCM-API's heeft afgeschaft en de verouderde FCM uit de service in juni 2024 zou verwijderen. Google raadt aan om te migreren van verouderde FCM-API's naar FCM HTTP v1.

Als uw Communication Services-resource nog steeds gebruikmaakt van de verouderde FCM-API's, volgt u deze migratiehandleiding.

Overwegingen voor mobiele pushmeldingen

Mobiele pushmeldingen zijn de pop-upmeldingen die worden weergegeven op mobiele apparaten. Voor bellen richt dit artikel zich op pushmeldingen van Voice over Internet Protocol (VoIP).

Notitie

Wanneer de toepassing zich registreert voor pushmeldingen en de binnenkomende pushmeldingen voor een Teams-gebruiker verwerkt, zijn de API's hetzelfde. De API's die in dit artikel worden beschreven, kunnen ook worden aangeroepen op de CommonCallAgent of TeamsCallAgent klasse.

Installeer de SDK

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

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

Voeg vervolgens in het bestand op moduleniveau build.gradle 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();

Registreren voor pushmeldingen

Als u zich wilt registreren voor pushmeldingen, moet de toepassing een CallAgent exemplaar aanroepen registerPushNotification() met behulp van 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 de regels er nog niet zijn):

// 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 bestand op build.gradle projectniveau de volgende regel 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 de Firebase Cloud Messaging SDK heeft gegenereerd voor het clienttoepassingsexemplaren. Zorg ervoor dat u de volgende importbewerkingen toevoegt aan de header van de hoofdactiviteit voor het exemplaar 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 the 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.")
}

Pushmeldingen verwerken

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

Als u de nettolading van Firebase Cloud Messaging wilt ophalen, maakt u eerst een nieuwe service (selecteer File>New>Service Service>) waarmee de FirebaseMessagingService Firebase SDK-klasse wordt uitgebreid en de onMessageReceived methode wordt overschreven. Deze methode is de gebeurtenis-handler 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 the 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>

Nadat u de nettolading hebt opgehaald, kunt u deze doorgeven aan de Communication Services SDK om te worden geparseerd in een intern IncomingCallInformation object. Dit object verwerkt het aanroepen van de handlePushNotification methode op een CallAgent exemplaar. U maakt een CallAgent exemplaar 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 alle gebeurtenis-handlers correct zijn geregistreerd, worden de toepassingsringen geregistreerd.

Registratie van pushmeldingen ongedaan maken

Toepassingen kunnen de registratie van pushmeldingen op elk gewenst moment ongedaan maken. Als u de registratie ongedaan wilt maken, roept u de unregisterPushNotification() methode aan op callAgent:

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

Interne pushmeldingen uitschakelen voor een inkomende oproep

De push-nettolading van een inkomende oproep kan op twee manieren aan de oproep worden bezorgd:

  • FCM gebruiken en het apparaattoken registreren bij de EERDER genoemde API, registerPushNotification op CallAgent of TeamsCallAgent
  • De SDK registreren bij een interne service bij het maken of ophalen van CallAgent TeamsCallAgent de push-nettolading

Door de eigenschap setDisableInternalPushForIncomingCall in CallAgentOptions of TeamsCallAgentOptionste gebruiken, is het mogelijk om de SDK te instrueren om de levering van de push-nettolading uit te schakelen via de interne pushservice:

CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisableInternalPushForIncomingCall(true);

Overwegingen voor mobiele pushmeldingen

Mobiele pushmeldingen zijn de pop-upmeldingen die worden weergegeven op mobiele apparaten. Voor bellen richt dit artikel zich op pushmeldingen van Voice over Internet Protocol (VoIP). Zie Integreren met CallKit voor een handleiding over De integratie van CallKit in uw iOS-toepassing.

Notitie

Wanneer de toepassing zich registreert voor pushmeldingen en de binnenkomende pushmeldingen voor een Teams-gebruiker verwerkt, zijn de API's hetzelfde. De API's die in dit artikel worden beschreven, kunnen ook worden aangeroepen op de CommonCallAgent of TeamsCallAgent klasse.

Uw systeem instellen

Volg deze stappen om uw systeem in te stellen.

Het Xcode-project maken

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

U gaat geen tests maken in dit artikel. 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. Stel de gekoppelde waarde in op een tekenreeks die is 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 projectbestand ContentView.swift . 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")
        }
})

Pushmeldingen instellen

Voltooi deze installatietaak voordat u begint met het registreren van pushmeldingen voor het registreren, verwerken en de registratie ervan ongedaan maken:

  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 behulp van een apparaatregistratietoken.

Registratie voor pushmeldingen moet plaatsvinden na een geslaagde initialisatie. Wanneer het callAgent object wordt vernietigd, logout wordt 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 handlePushNotification() u 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. Als u de registratie ongedaan wilt maken, roept u 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")
    }
}

Interne pushmeldingen uitschakelen voor een inkomende oproep

De push-nettolading van een inkomende oproep kan op twee manieren aan de oproep worden bezorgd:

  • Apple Push Notification Service (APNS) gebruiken en het apparaattoken registreren bij de EERDER genoemde API, registerPushNotification op CallAgent of TeamsCallAgent
  • De SDK registreren bij een interne service bij het maken of ophalen van CallAgent TeamsCallAgent de push-nettolading

Door de eigenschap disableInternalPushForIncomingCall in CallAgentOptions of TeamsCallAgentOptionste gebruiken, is het mogelijk om de SDK te instrueren om de levering van de push-nettolading uit te schakelen via de interne pushservice:

let options = CallAgentOptions()
options.disableInternalPushForIncomingCall = true

Overwegingen voor Windows-pushmeldingen

Mobiele pushmeldingen zijn de pop-upmeldingen die worden weergegeven op mobiele apparaten. Voor bellen richt dit artikel zich op pushmeldingen van Voice over Internet Protocol (VoIP).

Pushmeldingen op het Windows-platform worden geleverd via de Windows Push Notification Service (WNS).

Notitie

Wanneer de toepassing zich registreert voor pushmeldingen en de pushmeldingen voor een Aangepast Teams-eindpunt (CTE) verwerkt, zijn de API's hetzelfde. De API's die in dit artikel worden beschreven, kunnen ook worden aangeroepen op de CommonCallAgent of TeamsCallAgent klasse voor een CTE.

Uw systeem instellen

Volg deze stappen om uw systeem in te stellen.

Het Visual Studio-project maken

Voor een Universeel Windows-platform-app maakt u 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.

Het NuGet-pakket voor aanroepende SDK zoeken, downloaden en installeren:

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

Pushmeldingen instellen

Voltooi deze installatietaak voordat u begint met het registreren voor, verwerken en weergeven van een Windows-melding om een binnenkomende oproep te beantwoorden of te weigeren:

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

    • Een toepassing met de WindowsAzure.Messaging.Managed en Microsoft.Toolkit.Uwp.Notifications pakketten.
    • Een Azure Notifications Hub-hubnaam waarnaar wordt verwezen als <AZURE_PNH_HUB_NAME> en een Azure Notifications Hub-verbindingsreeks waarnaar wordt verwezen, zoals <AZURE_PNH_HUB_CONNECTION_STRING> in dit artikel wordt beschreven.
  2. Als u zich wilt registreren voor een WNS-kanaal bij elke initialisatie van toepassingen, 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");
            }
        }
    }
    
  3. Registreer de gebeurtenis-handler die wordt geactiveerd wanneer er een nieuw pushmeldingsbericht binnenkomt: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 bij de initialisatie van de toepassing.

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

Met deze aanroep wordt een gebeurtenis voor binnenkomende oproepen CallAgent geactiveerd waarin de melding voor binnenkomende oproepen wordt weergegeven:

// 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 OnActivated methode:

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