Bagikan melalui


Mengaktifkan pemberitahuan push untuk panggilan

Pemberitahuan push mengirim informasi dari aplikasi Anda ke perangkat pengguna. Anda dapat menggunakan pemberitahuan push untuk menampilkan dialog, memutar suara, atau menampilkan panggilan masuk ke lapisan UI aplikasi.

Dalam artikel ini, Anda mempelajari cara mengaktifkan pemberitahuan push untuk panggilan Azure Communication Services. Communication Services menyediakan integrasi dengan Azure Event Grid dan Azure Notification Hubs yang memungkinkan Anda menambahkan pemberitahuan push ke aplikasi Anda.

Gambaran umum token TTL

Token time-to-live (TTL) adalah pengaturan yang menentukan lamanya waktu token pemberitahuan tetap valid sebelum menjadi tidak valid. Pengaturan ini berguna untuk aplikasi di mana keterlibatan pengguna tidak memerlukan interaksi harian tetapi tetap penting selama periode yang lebih lama.

Konfigurasi TTL memungkinkan manajemen siklus hidup pemberitahuan push. Ini mengurangi kebutuhan akan perpanjangan token yang sering sekaligus membantu memastikan bahwa saluran komunikasi antara aplikasi dan penggunanya tetap terbuka dan dapat diandalkan untuk durasi yang diperpanjang.

Saat ini, nilai maksimum untuk TTL adalah 180 hari (15.552.000 detik), dan nilai minimum adalah 5 menit (300 detik). Anda dapat memasukkan nilai ini dan menyesuaikannya agar sesuai dengan kebutuhan Anda. Jika Anda tidak memberikan nilai, nilai defaultnya adalah 24 jam (86.400 detik).

Setelah REGISTER Push Notification API dipanggil, informasi token perangkat disimpan di pendaftar. Setelah durasi TTL berakhir, informasi titik akhir perangkat dihapus. Setiap panggilan masuk di perangkat tersebut tidak dapat dikirimkan ke perangkat jika perangkat tersebut tidak memanggil REGISTER Push Notification API lagi.

Jika Anda ingin mencabut identitas, ikuti proses ini. Setelah identitas dicabut, entri pencatat harus dihapus.

Catatan

Untuk pengguna Microsoft Teams, nilai TTL maksimum adalah 24 jam (86.400 detik). Tidak ada cara untuk meningkatkan nilai ini. Anda harus membangunkan aplikasi setiap 24 jam di latar belakang dan mendaftarkan token perangkat.

Untuk membangunkan aplikasi, ambil token baru, dan lakukan pendaftaran, ikuti instruksi untuk platform iOS atau instruksi untuk platform Android.

Prasyarat

Ikuti mulai cepat

Pemberitahuan push web melalui Azure Communication Services Web Calling SDK sedang dalam pratinjau dan tersedia sebagai bagian dari versi 1.12.0-beta.2+.

Penting

Fitur Azure Communication Services ini saat ini dalam pratinjau.

API pratinjau dan SDK disediakan tanpa perjanjian tingkat layanan. Kami menyarankan agar Anda tidak menggunakannya untuk beban kerja produksi. Beberapa fitur mungkin tidak didukung, atau mungkin memiliki kemampuan yang dibatasi.

Untuk informasi selengkapnya, tinjau Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Untuk instruksi langkah demi langkah, lihat mulai cepat di GitHub.

  • Akun Firebase dengan Firebase Cloud Messaging (FCM) diaktifkan dan dengan layanan FCM Anda terhubung ke instans Azure Notification Hubs. Untuk informasi selengkapnya, lihat pemberitahuan Communication Services.

  • Android Studio versi 3.6 atau yang lebih baru untuk membangun aplikasi Anda.

  • Serangkaian izin untuk mengaktifkan aplikasi Android untuk menerima pesan pemberitahuan dari FCM. Di file Anda AndroidManifest.xml , tambahkan izin berikut tepat setelah <manifest ...> atau di </application> bawah 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" />
    

Penting

Pada 20 Juni 2023, Google mengumumkan bahwa mereka tidak lagi mengirim pesan dengan menggunakan API warisan FCM dan akan mulai menghapus FCM warisan dari layanan pada Juni 2024. Google merekomendasikan migrasi dari API FCM warisan ke FCM HTTP v1.

Jika sumber daya Communication Services Anda masih menggunakan API warisan FCM, ikuti panduan migrasi ini.

Pertimbangan untuk pemberitahuan push seluler

Pemberitahuan push seluler adalah pemberitahuan pop-up yang muncul di perangkat seluler. Untuk panggilan, artikel ini berfokus pada pemberitahuan push voice over Internet Protocol (VoIP).

Catatan

Ketika aplikasi mendaftar untuk pemberitahuan push dan menangani pemberitahuan push masuk untuk pengguna Teams, API sama. API yang dijelaskan artikel ini juga dapat dipanggil pada CommonCallAgent kelas atau TeamsCallAgent .

Pasang SDK

Temukan file tingkat build.gradle proyek Anda dan tambahkan mavenCentral() ke daftar repositori di bawah buildscript dan allprojects:

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

Kemudian, dalam file tingkat build.gradle modul Anda, tambahkan baris berikut ke bagian dependencies :

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

Menginisialisasi objek yang diperlukan

Untuk membuat CallAgent instans, Anda harus memanggil createCallAgent metode pada CallClient instans. Panggilan ini secara asinkron mengembalikan objek instans CallAgent .

Metode ini createCallAgent mengambil CommunicationUserCredential sebagai argumen, yang merangkum token akses.

Untuk mengakses DeviceManager, Anda harus membuat instans terlebih callAgent dahulu. Kemudian Anda dapat menggunakan CallClient.getDeviceManager metode untuk mendapatkan 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();

Untuk mengatur nama tampilan penelepon, gunakan metode alternatif ini:

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

Daftarkan pemberitahuan push

Untuk mendaftar pemberitahuan push, aplikasi perlu memanggil registerPushNotification() CallAgent instans dengan menggunakan token pendaftaran perangkat.

Untuk mendapatkan token pendaftaran perangkat, tambahkan Firebase SDK ke file modul build.gradle aplikasi Anda dengan menambahkan baris berikut di bagian dependencies (jika baris belum ada):

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

Dalam file tingkat build.gradle proyek Anda, tambahkan baris berikut di bagian dependencies jika belum ada:

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

Tambahkan plug-in berikut ke awal file jika belum ada:

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

Pada toolbar, pilih Sinkronkan Sekarang. Tambahkan cuplikan kode berikut untuk mendapatkan token pendaftaran perangkat yang dihasilkan Firebase Cloud Messaging SDK untuk instans aplikasi klien. Pastikan untuk menambahkan impor berikut ke header aktivitas utama agar instans mengambil token.

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;

Tambahkan cuplikan ini untuk mengambil token:

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

Daftarkan token pendaftaran perangkat dengan SDK Layanan Panggilan untuk pemberitahuan push panggilan masuk:

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

Handel pemberitahuan push

Untuk menerima pemberitahuan push panggilan masuk, panggil handlePushNotification() CallAgent instans dengan payload.

Untuk mendapatkan payload dari Firebase Cloud Messaging, mulailah dengan membuat layanan baru (pilih Layanan Layanan> Baru>File>) yang memperluas FirebaseMessagingService kelas Firebase SDK dan mengambil alih onMessageReceived metode . Metode ini adalah penanganan aktivitas yang dipanggil ketika Firebase Cloud Messaging mengirimkan pemberitahuan push ke aplikasi.

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

Tambahkan definisi layanan berikut ke AndroidManifest.xml file, di dalam <application> tag:

<service
    android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Setelah mengambil payload, Anda dapat meneruskannya ke SDK Communication Services untuk diuraikan ke dalam objek internal IncomingCallInformation . Objek ini menangani pemanggilan handlePushNotification metode pada CallAgent instans. Anda membuat CallAgent instans dengan memanggil createCallAgent(...) metode di CallClient kelas .

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

Ketika penanganan pesan pemberitahuan push berhasil, dan semua penanganan aktivitas terdaftar dengan benar, aplikasi akan berdering.

Membatalkan pendaftaran pemberitahuan push

Aplikasi dapat membatalkan pendaftaran pemberitahuan push kapan saja. Untuk membatalkan pendaftaran, panggil unregisterPushNotification() metode pada callAgent:

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

Menonaktifkan pemberitahuan push internal untuk panggilan masuk

Payload push panggilan masuk dapat dikirimkan ke penerima panggilan dengan dua cara:

  • Menggunakan FCM dan mendaftarkan token perangkat dengan API yang disebutkan sebelumnya, registerPushNotification pada CallAgent atau TeamsCallAgent
  • Mendaftarkan SDK dengan layanan internal saat pembuatan atau TeamsCallAgent untuk mendapatkan payload pendorongan CallAgent yang dikirimkan

Dengan menggunakan properti setDisableInternalPushForIncomingCall di CallAgentOptions atau TeamsCallAgentOptions, dimungkinkan untuk menginstruksikan SDK untuk menonaktifkan pengiriman payload push melalui layanan pendorongan internal:

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

Pertimbangan untuk pemberitahuan push seluler

Pemberitahuan push seluler adalah pemberitahuan pop-up yang muncul di perangkat seluler. Untuk panggilan, artikel ini berfokus pada pemberitahuan push voice over Internet Protocol (VoIP). Untuk panduan tentang integrasi CallKit di aplikasi iOS Anda, lihat Mengintegrasikan dengan CallKit.

Catatan

Ketika aplikasi mendaftar untuk pemberitahuan push dan menangani pemberitahuan push masuk untuk pengguna Teams, API sama. API yang dijelaskan artikel ini juga dapat dipanggil pada CommonCallAgent kelas atau TeamsCallAgent .

Siapkan sistem Anda

Ikuti langkah-langkah ini untuk menyiapkan sistem Anda.

Buat proyek Xcode

Di Xcode, buat proyek iOS baru dan pilih templat Aplikasi Tampilan Tunggal. Artikel ini menggunakan kerangka kerja SwiftUI, jadi Anda harus mengatur Bahasa ke Swift dan mengatur Antarmuka ke SwiftUI.

Anda tidak akan membuat pengujian di artikel ini. Jangan ragu untuk menghapus kotak centang Sertakan Pengujian.

Cuplikan layar yang memperlihatkan jendela untuk membuat proyek dalam Xcode.

Pasang paket dan dependensi dengan menggunakan CocoaPods

  1. Buat Podfile untuk aplikasi Anda, seperti contoh ini:

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

  3. Buka .xcworkspace dengan menggunakan Xcode.

Minta akses ke mikrofon

Untuk mengakses mikrofon perangkat, Anda perlu memperbarui daftar properti informasi aplikasi dengan menggunakan NSMicrophoneUsageDescription. Atur nilai terkait ke string yang disertakan dalam dialog yang digunakan sistem untuk meminta akses dari pengguna.

Klik kanan entri Info.plist dari pohon proyek, lalu pilih Buka Sebagai>Kode Sumber. Tambahkan baris berikut ke bagian <dict> tingkat atas, lalu simpan file.

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

Menyiapkan kerangka kerja aplikasi

Buka file proyek ContentView.swift Anda. import Tambahkan deklarasi ke bagian atas file untuk mengimpor AzureCommunicationCalling pustaka. Selain itu, impor AVFoundation. Anda memerlukannya untuk permintaan izin audio dalam kode.

import AzureCommunicationCalling
import AVFoundation

Inisialisasi CallAgent

Untuk membuat CallAgent instans dari CallClient, Anda harus menggunakan callClient.createCallAgent metode yang secara asinkron mengembalikan CallAgent objek setelah diinisialisasi.

Untuk membuat klien panggilan, berikan CommunicationTokenCredential objek:

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

Teruskan CommunicationTokenCredential objek yang Anda buat ke CallClient, dan atur nama tampilan:

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

Siapkan pemberitahuan push

Sebelum Anda memulai tugas mendaftar, menangani, dan membatalkan pendaftaran pemberitahuan push, selesaikan tugas penyiapan ini:

  1. Di Xcode, buka Menandatangani & Kapabilitas. Tambahkan kapabilitas dengan memilih + Capability, lalu pilih Pemberitahuan Push.
  2. Tambahkan kapabilitas lain dengan memilih + Capability, lalu pilih Mode Latar Belakang.
  3. Di Mode Latar Belakang, pilih kotak centang Voice over IP dan Pemberitahuan jarak jauh.

Cuplikan layar yang memperlihatkan cara menambahkan kapabilitas di Xcode.

Daftarkan pemberitahuan push

Untuk mendaftar pemberitahuan push, panggil registerPushNotification() instans CallAgent dengan menggunakan token pendaftaran perangkat.

Pendaftaran untuk pemberitahuan push perlu terjadi setelah inisialisasi berhasil. callAgent Ketika objek dihancurkan, logout dipanggil, yang secara otomatis membatalkan pendaftaran pemberitahuan 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.")
    }
}

Handel pemberitahuan push

Untuk menerima pemberitahuan push untuk panggilan masuk, panggil handlePushNotification() instans CallAgent dengan payload kamus:

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

Membatalkan pendaftaran pemberitahuan push

Aplikasi dapat membatalkan pendaftaran pemberitahuan push kapan saja. Untuk membatalkan pendaftaran, panggil unregisterPushNotification metode pada CallAgent.

Catatan

Aplikasi tidak secara otomatis tidak terdaftar dari pemberitahuan push pada logout.

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

Menonaktifkan pemberitahuan push internal untuk panggilan masuk

Payload push panggilan masuk dapat dikirimkan ke penerima panggilan dengan dua cara:

  • Menggunakan layanan Pemberitahuan Push Apple (APNS) dan mendaftarkan token perangkat dengan API yang disebutkan sebelumnya, registerPushNotification pada CallAgent atau TeamsCallAgent
  • Mendaftarkan SDK dengan layanan internal saat pembuatan atau TeamsCallAgent untuk mendapatkan payload pendorongan CallAgent yang dikirimkan

Dengan menggunakan properti disableInternalPushForIncomingCall di CallAgentOptions atau TeamsCallAgentOptions, dimungkinkan untuk menginstruksikan SDK untuk menonaktifkan pengiriman payload push melalui layanan pendorongan internal:

let options = CallAgentOptions()
options.disableInternalPushForIncomingCall = true

Pertimbangan untuk pemberitahuan push Windows

Pemberitahuan push seluler adalah pemberitahuan pop-up yang muncul di perangkat seluler. Untuk panggilan, artikel ini berfokus pada pemberitahuan push voice over Internet Protocol (VoIP).

Pemberitahuan push pada platform Windows dikirimkan melalui Windows Push Notification Service (WNS).

Catatan

Ketika aplikasi mendaftar untuk pemberitahuan push dan menangani pemberitahuan push untuk Titik Akhir Teams Kustom (CTE), API sama. API yang dijelaskan artikel ini juga dapat dipanggil pada CommonCallAgent kelas atau TeamsCallAgent untuk CTE.

Siapkan sistem Anda

Ikuti langkah-langkah ini untuk menyiapkan sistem Anda.

Membuat proyek Visual Studio

Untuk aplikasi Platform Windows Universal, di Visual Studio 2022, buat proyek Aplikasi Kosong (Universal Windows) baru. Setelah Anda memasukkan nama proyek, jangan ragu untuk memilih Windows SDK apa pun yang lebih baru dari 10.0.17763.0.

Untuk aplikasi WinUI 3, buat proyek baru dengan templat Aplikasi Kosong, Dipaketkan (WinUI 3 di Desktop) untuk menyiapkan aplikasi WinUI 3 satu halaman. SDK Aplikasi Windows versi 1.3 atau yang lebih baru diperlukan.

Instal paket dan dependensi dengan menggunakan NuGet Package Manager

API dan pustaka SDK Panggilan tersedia untuk umum melalui paket NuGet.

Untuk menemukan, mengunduh, dan menginstal paket Calling SDK NuGet:

  1. Buka Manajer Paket NuGet dengan memilih Alat>Pengelola>Paket NuGet Kelola Paket NuGet untuk Solusi.
  2. Pilih Telusuri, lalu masukkan Azure.Communication.Calling.WindowsClient di kotak pencarian.
  3. Pastikan bahwa kotak centang Sertakan prarilis dipilih.
  4. Pilih paket Azure.Communication.Calling.WindowsClient, lalu pilih Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 atau versi yang lebih baru.
  5. Pilih kotak centang yang sesuai dengan proyek Azure Communication Services di panel kanan.
  6. Pilih Instal.

Siapkan pemberitahuan push

Sebelum Anda memulai tugas mendaftar, menangani, dan memperlihatkan pemberitahuan Windows untuk menjawab atau menolak panggilan masuk, selesaikan tugas penyetelan ini:

  1. Ikuti Tutorial: Mengirim pemberitahuan ke aplikasi Platform Windows Universal menggunakan Azure Notification Hubs. Setelah mengikuti tutorial, Anda memiliki:

    • Aplikasi yang memiliki WindowsAzure.Messaging.Managed paket dan Microsoft.Toolkit.Uwp.Notifications .
    • Nama hub Azure Notifications Hub yang dirujuk sebagai <AZURE_PNH_HUB_NAME> dan Hub Pemberitahuan Azure string koneksi dirujuk seperti <AZURE_PNH_HUB_CONNECTION_STRING> dalam artikel ini.
  2. Untuk mendaftar saluran WNS pada setiap inisialisasi aplikasi, pastikan untuk menambahkan kode inisialisasi dalam file Anda 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");
            }
        }
    }
    
  3. Daftarkan penanganan aktivitas yang diaktifkan saat pesan pemberitahuan push baru tiba di 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;
        }
    }
    

Daftarkan pemberitahuan push

Untuk mendaftar pemberitahuan push, panggil RegisterForPushNotificationAsync() instans CallAgent dengan saluran pendaftaran WNS yang diperoleh pada inisialisasi aplikasi.

Pendaftaran untuk pemberitahuan push perlu terjadi setelah inisialisasi berhasil.

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

Handel pemberitahuan push

Untuk menerima pemberitahuan push untuk panggilan masuk, panggil handlePushNotification() instans CallAgent dengan payload kamus:

// MainPage.xaml.cs

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

Panggilan ini memicu peristiwa panggilan masuk yang CallAgent menunjukkan pemberitahuan panggilan masuk:

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

Tambahkan kode untuk menangani tekan tombol untuk pemberitahuan dalam OnActivated metode :

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