Включение push-уведомлений для вызовов
Здесь мы узнаем, как включить push-уведомления для вызовов Службы коммуникации Azure. Настройка push-уведомлений позволяет пользователям знать, когда у них есть входящий звонок, который затем может ответить.
Push-уведомление
Push-уведомления позволяют отправлять данные из приложения на устройства пользователей. Push-уведомления можно использовать для отображения диалогового окна, воспроизведения звука или отображения входящих вызовов на уровне пользовательского интерфейса приложения. Службы коммуникации Azure обеспечивают интеграцию со службой Сетка событий Azure и Центрами уведомлений Azure, которые позволяют добавлять push-уведомления в приложения.
Токен TTL
Маркер времени жизни (TTL) — это параметр, определяющий период времени, когда маркер уведомления остается допустимым, прежде чем стать недействительным. Этот параметр полезен для приложений, где взаимодействие пользователей не требует ежедневного взаимодействия, но остается критически важным в течение более длительных периодов.
Конфигурация TTL позволяет управлять жизненным циклом push-уведомлений, уменьшая потребность в частом продлении маркеров, гарантируя, что канал связи между приложением и его пользователями остается открытым и надежным в течение длительного времени.
В настоящее время максимальное значение для TTL составляет 180 дней (1552 000 секунд), а минимальное значение — 5 минут (300 секунд). Вы можете ввести это значение и настроить его соответствующим образом в соответствии с вашими потребностями. Если значение не указано, значение по умолчанию — 24 часа (86 400 секунд).
После вызова API push-уведомлений регистрации при сохранении сведений о маркере устройства в регистраторе. После окончания срока жизни TTL сведения о конечной точке устройства удаляются. Любые входящие вызовы на этих устройствах не могут быть доставлены на устройства, если эти устройства еще раз не вызывают API push-уведомлений регистрации.
Если вы хотите отозвать удостоверение, необходимо выполнить этот процесс, после отзыва удостоверения запись регистратора должна быть удалена.
Примечание.
Для CTE (настраиваемая конечная точка Teams) максимальное значение TTL равно 24 часам (86 400 секунд) невозможно увеличить это значение.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Развернутый ресурс Служб коммуникации. Создайте ресурс Служб коммуникации.
- Маркер доступа пользователя для включения клиента для вызовов. Дополнительные сведения см. в статье о создании маркеров доступа и управлении ими.
- Необязательно. Выполните краткое руководство по добавлению голосовых вызовов в приложение
пакет SDK для веб-вызовов Службы коммуникации Azure — краткое руководство по веб-push-уведомлениям
Внимание
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии.
Предварительные версии API и пакеты SDK предоставляются без соглашения об уровне обслуживания. Рекомендуется не использовать их для рабочих нагрузок. Некоторые функции могут не поддерживаться или могут иметь ограниченные возможности.
Дополнительные сведения см . в дополнительных условиях использования для предварительных версий Microsoft Azure.
пакет SDK для веб-звонков Службы коммуникации Azure — веб-push-уведомления доступны в общедоступной предварительной версии и доступны в составе версии 1.12.0-beta.2+.
Ознакомьтесь с нашим кратким руководством по веб-push-уведомлениям: https://github.com/Azure-Samples/communication-services-javascript-quickstarts/blob/main/calling-web-push-notifications/README.md
Внимание
20 июня 2023 года Google объявил, что не рекомендуется отправлять сообщения с помощью устаревших API FCM. Google удаляет устаревшие FCM из службы в июне 2024 года. Google рекомендует перенести устаревшие API FCM на FCM HTTP версии 1. Следуйте этому руководству по миграции, если ваш обмен данными по-прежнему использует устаревшие API FCM.
Установка пакета SDK
Найдите файл build.gradle уровня проекта и добавьте mavenCentral()
в список репозиториев в buildscript
разделе иallprojects
:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Затем в файле build.gradle на уровне модуля добавьте в раздел следующие строкиdependencies
:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Инициализация обязательных объектов
Чтобы создать CallAgent
экземпляр, необходимо вызвать createCallAgent
метод в экземпляре CallClient
. Этот вызов асинхронно возвращает объект экземпляра CallAgent
.
Метод createCallAgent
принимает CommunicationUserCredential
в качестве аргумента, который инкапсулирует маркер доступа.
Чтобы получить доступ DeviceManager
, сначала необходимо создать callAgent
экземпляр. Затем можно использовать CallClient.getDeviceManager
метод для получения 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();
Чтобы задать отображаемое имя для вызывающей стороны, используйте следующий альтернативный метод:
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();
Дополнительные предварительные требования для push-уведомлений
Учетная запись Firebase, для которой включена облачная служба сообщений (FCM), и служба Firebase Cloud Messaging, подключенная к экземпляру центра уведомлений Azure. Дополнительные сведения см. в разделе Уведомления в Службах коммуникации. Кроме того, в этом руководстве предполагается, что для создания приложения вы используете Android Studio версии 3.6 или более поздней.
Чтобы получать уведомления от Firebase Cloud Messaging, приложению Android требуется определенный набор разрешений. AndroidManifest.xml
В файле добавьте следующий набор разрешений сразу после <manifest ...>
тега </application>
или ниже.
<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" />
Обзор
Мобильные push-уведомления — это всплывающие уведомления, которые отображаются на мобильных устройствах. Для вызовов мы будем использовать push-уведомления протокола VoIP (голосовые вызовы через IP). Мы изучим регистрацию для получения push-уведомлений, обработку push-уведомлений и отмену регистрации для получения push-уведомлений.
Примечание.
Для регистрации push-уведомлений и обработки push-уведомлений для пользовательской конечной точки Teams (CTE) API одинаковы. Описанный ниже API также можно вызвать в CommonCallAgent
TeamsCallAgent
пользовательской конечной точке Teams (CTE).
Регистрация для получения push-уведомлений
Чтобы зарегистрировать push-уведомления, приложению необходимо вызвать registerPushNotification()
CallAgent
экземпляр с маркером регистрации устройства.
Чтобы получить маркер регистрации устройства, добавьте пакет SDK Firebase в файл модуля build.gradle
приложения, добавив следующие строки в dependencies
раздел, если он еще не существует:
// 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'
В файле build.gradle на уровне проекта добавьте в раздел dependencies
следующий фрагмент, если его там еще нет:
classpath 'com.google.gms:google-services:4.3.3'
Добавьте в начало файла следующий подключаемый модуль, если его там еще нет:
apply plugin: 'com.google.gms.google-services'
На панели инструментов щелкните Синхронизировать сейчас. Добавьте следующий фрагмент кода, чтобы получить маркер регистрации устройства, созданный клиентской библиотекой Firebase Cloud Messaging для экземпляра клиентского приложения. Обязательно добавьте приведенные ниже инструкции import в заголовок главного действия (Activity) для экземпляра. Они необходимы для того, чтобы фрагмент кода получил маркер:
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;
Для получения маркера добавьте следующий фрагмент кода:
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");
}
});
Зарегистрируйте маркер регистрации устройства в пакете SDK служб вызовов для получения push-уведомлений о входящих вызовах:
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.")
}
Обработка push-уведомлений
Чтобы получать push-уведомления о входящих вызовах, вызовите handlePushNotification() для экземпляра CallAgent, передав полезные данные.
Чтобы получить полезные данные из Firebase Cloud Messaging, начните с создания новой службы (file > New > Service > ), которая расширяет класс FirebaseMessagingService Firebase SDK и переопределите onMessageReceived
метод. Этот метод является обработчиком событий и вызывается, когда Firebase Cloud Messaging доставляет в приложение push-уведомление.
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();
}
}
}
Добавьте приведенное ниже определение службы внутри тега <application>
в файле AndroidManifest.xml
.
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
- Полученные полезные данные можно передать в пакет SDK Служб коммуникации, где они будут преобразованы во внутренний объект IncomingCallInformation, для обработки которого вызывается метод handlePushNotification для экземпляра CallAgent. Экземпляр
CallAgent
создается путем вызова методаcreateCallAgent(...)
для классаCallClient
.
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.");
}
Если обработка push-уведомления пройдет успешно и все обработчики событий будут правильно зарегистрированы, в приложении прозвучит сигнал вызова.
Отмена регистрации для получения push-уведомлений
В приложениях можно в любое время отменить регистрацию для получения push-уведомлений. Чтобы отменить регистрацию, вызовите метод unregisterPushNotification()
для CallAgent.
try {
callAgent.unregisterPushNotification().get();
}
catch(Exception e) {
System.out.println("Something went wrong while un-registering for all Incoming Calls Push Notifications.")
}
Настройка системы
Создайте проект Xcode
В Xcode создайте новый проект iOS и выберите шаблон Single View App (Приложение с одним представлением). В этом кратком руководстве используется платформа SwiftUI, поэтому необходимо задать для языка значениеSwiftUI и задать для интерфейса значение SwiftUI.
В рамках этого краткого руководства вы не будете создавать тесты. Снимите флажок "Включить тесты ".
Установка пакета и зависимостей с помощью CocoaPods
Создайте Podfile для приложения, как показано в следующем примере:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
Запустите
pod install
.Откройте
.xcworkspace
с помощью Xcode.
Запрос доступа к микрофону
Чтобы получить доступ к микрофону устройства, необходимо обновить список свойств приложения с помощью NSMicrophoneUsageDescription
. Вы задаете связанное значение строке, которая будет включена в диалоговое окно, которое система использует для запроса доступа от пользователя.
Щелкните правой кнопкой мыши запись Info.plist дерева проекта и выберите "Открыть как>исходный код". Добавьте в раздел верхнего уровня <dict>
следующие строки, а затем сохраните файл.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Настройка платформы приложения
Откройте файл ContentView.swift проекта. import
Добавьте объявление в начало файла для импорта библиотекиAzureCommunicationCalling
. Кроме того, импортируйте AVFoundation
. Она понадобится для запросов разрешений на аудио в коде.
import AzureCommunicationCalling
import AVFoundation
Инициализация CallAgent
Чтобы создать экземпляр CallAgent
из CallClient
, необходимо использовать метод callClient.createCallAgent
, который асинхронно возвращает объект CallAgent
после его инициализации.
Чтобы создать клиент вызова, передайте CommunicationTokenCredential
объект:
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
Передайте созданный CallClient
объект и задайте отображаемое имя:
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")
}
})
Обзор
Мобильные push-уведомления — это всплывающие уведомления, которые отображаются на мобильных устройствах. Для вызовов мы будем использовать push-уведомления протокола VoIP (голосовые вызовы через IP). Мы изучим регистрацию для получения push-уведомлений, обработку push-уведомлений и отмену регистрации для получения push-уведомлений. Руководство по интеграции CallKit в приложении iOS см. здесь: интеграция CallKit с пакетом SDK для iOS ACS.
Примечание.
Чтобы зарегистрировать push-уведомления и обрабатывать push-уведомления для пользовательской конечной точки Teams (CTE), API одинаковы. Описанные API также можно вызвать в пользовательской CommonCallAgent
конечной точке Teams (CTE) или TeamsCallAgent
классе.
Настройка push-уведомлений
Мобильное push-уведомление — это всплывающее уведомление, которое вы получаете на мобильном устройстве. Для вызовов мы будем использовать push-уведомления протокола VoIP (голосовые вызовы через IP).
В следующих разделах описывается регистрация push-уведомлений, работа с ними и их отмена. Прежде чем приступить к выполнению этих задач, выполните следующие предварительные требования.
- В Xcode перейдите к разделу Подписывание и возможности. Добавьте возможность, выбрав пункт + возможность, а затем — Push-уведомления.
- Добавьте еще одну возможность, выбрав пункт + возможность, а затем — Режимы фоновой работы.
- В разделе Режимы фоновой работы выберите флажки Голосовая связь через IP и Удаленные уведомления.
Регистрация для получения push-уведомлений
Чтобы зарегистрироваться для получения push-уведомлений, необходимо вызвать registerPushNotification()
для экземпляра CallAgent
и передать маркер регистрации устройства.
Регистрация для push-уведомлений должна быть выполнена после успешной инициализации. При уничтожении объекта callAgent
будет вызван метод logout
, который автоматически отменит регистрацию на получение push-уведомлений.
let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
callAgent.registerPushNotifications(deviceToken: deviceToken!) { (error) in
if(error == nil) {
print("Successfully registered to push notification.")
} else {
print("Failed to register push notification.")
}
}
Работа с push-уведомлениями
Чтобы получать push-уведомления о входящих вызовах, вызовите handlePushNotification()
для экземпляра CallAgent
, передав полезные данные словаря.
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")
}
}
Отмена регистрации для получения push-уведомлений
В приложениях можно в любое время отменить регистрацию для получения push-уведомлений. Просто вызовите unregisterPushNotification
метод в CallAgent
.
Примечание.
Регистрация приложений для получения push-уведомлений не отменяется автоматически при выходе из системы.
callAgent.unregisterPushNotification { (error) in
if (error == nil) {
print("Unregister of push notification was successful")
} else {
print("Unregister of push notification failed, please try again")
}
}
Настройка системы
Создание проекта Visual Studio
Для приложения UWP в Visual Studio 2022 создайте проект пустого приложения (универсального приложения Windows). После ввода имени проекта вы можете выбрать любой пакет SDK для Windows позже 10.0.17763.0.
Для приложения WinUI 3 создайте проект с шаблоном "Пустое приложение" (WinUI 3 в классическом приложении) для настройки одностраничного приложения WinUI 3. Требуется пакет SDK для приложений Windows версии 1.3 или более поздней.
Установка пакета и зависимостей с помощью NuGet диспетчер пакетов
Api и библиотеки пакета SDK для вызовов общедоступны через пакет NuGet.
Ниже приведены инструкции по поиску, скачиванию и установке пакета NuGet пакета Sdk для вызовов:
- Откройте nuGet диспетчер пакетов, выбрав инструменты>NuGet диспетчер пакетов> Manage NuGet Packages for Solution.
- Нажмите кнопку "Обзор", а затем введите
Azure.Communication.Calling.WindowsClient
в поле поиска. - Убедитесь, что установлен флажок "Включить предварительную версию ".
Azure.Communication.Calling.WindowsClient
Выберите пакет и выберитеAzure.Communication.Calling.WindowsClient
версию 1.4.0-beta.1 или более новую версию.- Установите флажок, соответствующий проекту Служб коммуникации на правой части вкладки.
- Нажмите кнопку Установить.
Обзор
Push-уведомления на платформе Windows доставляются с помощью Windows Push Notification Service (WNS),
.
Примечание.
Для регистрации push-уведомлений и обработки push-уведомлений для пользовательской конечной точки Teams (CTE) API одинаковы. Описанный ниже API также можно вызвать в CommonCallAgent
TeamsCallAgent
пользовательской конечной точке Teams (CTE).
Настройка push-уведомлений
Push-уведомление — это всплывающее уведомление, которое вы получаете на устройстве. Для вызовов мы будем использовать push-уведомления протокола VoIP (голосовые вызовы через IP).
В следующих разделах описывается, как зарегистрировать, обработать и отобразить уведомление Windows, чтобы ответить или отклонить входящий вызов. Прежде чем приступить к выполнению этих задач, выполните следующие предварительные требования.
Следующее руководство. Отправка уведомлений в приложения универсальная платформа Windows с помощью Центров уведомлений Azure. После выполнения этого руководства у вас есть:
- Приложение, которое содержит
WindowsAzure.Messaging.Managed
иMicrosoft.Toolkit.Uwp.Notifications
пакеты. - Имя концентратора push-уведомлений Azure PNH, на который
<AZURE_PNH_HUB_NAME>
ссылается Центр push-уведомлений, и строка подключения Azure PNH,<AZURE_PNH_HUB_CONNECTION_STRING>
указанная в этом кратком руководстве.
- Приложение, которое содержит
Чтобы зарегистрировать канал WNS (служба уведомлений Windows) на каждом инициализации приложения, добавьте код инициализации в файл App.xaml.cs:
// App.xaml.cs
protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
await InitNotificationsAsync();
...
}
private async Task InitNotificationsAsync()
{
if (AZURE_PNH_HUB_NAME != "<AZURE_PNH_HUB_NAME>" && AZURE_PNH_HUB_CONNECTION_STRING != "<AZURE_PNH_HUB_CONNECTION_STRING>")
{
var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
channel.PushNotificationReceived += Channel_PushNotificationReceived;
var hub = new NotificationHub(AZURE_PNH_HUB_NAME, AZURE_PNH_HUB_CONNECTION_STRING);
var result = await hub.RegisterNativeAsync(channel.Uri);
if (result.ChannelUri != null)
{
PNHChannelUri = new Uri(result.ChannelUri);
}
else
{
Debug.WriteLine("Cannot register WNS channel");
}
}
}
- Зарегистрируйте обработчик событий, активированный при поступлении нового push-уведомления на 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;
}
}
Регистрация для получения push-уведомлений
Чтобы зарегистрировать push-уведомления, вызовите RegisterForPushNotificationAsync()
CallAgent
экземпляр с каналом регистрации WNS, полученным в приложении init.
Регистрация для push-уведомлений должна быть выполнена после успешной инициализации.
// 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;
Работа с push-уведомлениями
Чтобы получать push-уведомления о входящих вызовах, вызовите handlePushNotification()
для экземпляра CallAgent
, передав полезные данные словаря.
// MainPage.xaml.cs
public async Task HandlePushNotificationIncomingCallAsync(string notificationContent)
{
if (this.callAgent != null)
{
PushNotificationDetails pnDetails = PushNotificationDetails.Parse(notificationContent);
await callAgent.HandlePushNotificationAsync(pnDetails);
}
}
Это активирует событие входящего вызова в CallAgent, отображающее уведомление о входящих вызовах.
// 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();
}
Добавьте код для обработки нажатия кнопки для уведомления в методе 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();
}
}
Следующие шаги
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по