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
Een Azure-account met een actief abonnement. Gratis een account maken
Een geïmplementeerde Communication Services-resource. Een Communication Services-resource maken.
Een gebruikerstoegangstoken om de aanroepende client in te schakelen. Zie Toegangstokens maken en beheren voor meer informatie.
Optioneel: Voltooiing van de quickstart om spraakgesprekken toe te voegen aan uw toepassing.
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 DeviceManager
wilt 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
opCallAgent
ofTeamsCallAgent
- 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 TeamsCallAgentOptions
te 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.
Het pakket en afhankelijkheden installeren met CocoaPods
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
Voer
pod install
uit.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 CallClient
wilt 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 CallClient
en 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:
- Ga in Xcode naar de mogelijkheden voor ondertekening en mogelijkheden. Voeg een mogelijkheid toe door + Mogelijkheid te selecteren en vervolgens Pushmeldingen te selecteren.
- Voeg nog een mogelijkheid toe door + Mogelijkheid te selecteren en vervolgens Achtergrondmodi te selecteren.
- Schakel onder Achtergrondmodi de selectievakjes Voice over IP en Externe meldingen in.
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
opCallAgent
ofTeamsCallAgent
- 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 TeamsCallAgentOptions
te 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:
- Open NuGet Pakketbeheer door Tools>NuGet Pakketbeheer> Manage NuGet Packages for Solution te selecteren.
- Selecteer Bladeren en voer vervolgens Azure.Communication.Calling.WindowsClient in het zoekvak in.
- Zorg ervoor dat het selectievakje Voorlopige versie opnemen is ingeschakeld.
- Selecteer het pakket Azure.Communication.Calling.WindowsClient en selecteer vervolgens Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 of een nieuwere versie.
- Schakel het selectievakje in dat overeenkomt met het Azure Communication Services-project in het rechterdeelvenster.
- 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:
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
enMicrosoft.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.
- Een toepassing met de
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"); } } }
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();
}
}