Aracılığıyla paylaş


Aramalar için anında iletme bildirimlerini etkinleştirme

Burada, Azure İletişim Hizmetleri çağrıları için anında iletme bildirimlerini etkinleştirmeyi öğreneceksiniz. Anında iletme bildirimlerini ayarlamak, kullanıcılarınızın gelen bir aramaları olduğunda bunu bilmelerini sağlar ve bu çağrıyı yanıtlayabilirler.

Anında bildirim

Anında iletme bildirimleri, uygulamanızdan kullanıcıların cihazlarına bilgi göndermenizi sağlar. Bir iletişim kutusunu göstermek, ses çalmak veya gelen aramayı uygulama kullanıcı arabirimi katmanında görüntülemek için anında iletme bildirimlerini kullanabilirsiniz. Azure İletişim Hizmetleri ile tümleştirmeler sağlarUygulamalarınıza anında iletme bildirimleri eklemenizi sağlayan Azure Event Grid ve Azure Notification Hubs.

TTL belirteci

Yaşam Süresi (TTL) belirteci, bir bildirim belirtecinin geçersiz hale gelmeden önce geçerli kalacağı süreyi belirleyen bir ayardır. Bu ayar, kullanıcı etkileşiminin günlük etkileşim gerektirmediği ancak daha uzun süreler boyunca kritik öneme sahiptir.

TTL yapılandırması anında iletme bildirimlerinin yaşam döngüsünün yönetilmesine olanak tanır ve uygulama ile kullanıcıları arasındaki iletişim kanalının uzun süreler boyunca açık ve güvenilir kalmasını sağlarken sık belirteç yenileme ihtiyacını azaltır.

Şu anda TTL için en yüksek değer 180 gündür (15.552.000 saniye) ve en düşük değer 5 dakikadır (300 saniye). Bu değeri girebilir ve ihtiyaçlarınıza göre ayarlayabilirsiniz. Bir değer sağlamazsanız, varsayılan değer 24 saattir (86.400 saniye).

Cihaz belirteci bilgileri Kayıt Şirketi'ne kaydedildiğinde kayıt anında iletme bildirimi API'si çağrıldıktan sonra. TTL kullanım ömrü sona erdikten sonra cihaz uç noktası bilgileri silinir. Bu cihazlar kayıt anında iletme bildirimi API'sini yeniden çağırmazsa, bu cihazlardaki gelen çağrılar cihazlara teslim edilemez.

Bir kimliği iptal etmek istiyorsanız bu işlemi izlemeniz gerekir, kimlik iptal edildiğinde Kayıt Şirketi girdisi silinmelidir.

Not

Teams kullanıcısı için en fazla TTL değeri 24 saat (86.400 saniye) olur. Bu değeri artırmanın hiçbir yolu yoktur. Contoso arka planda her 24 saatte bir uygulamayı uyandırmalı ve cihaz belirtecinin kaydını gerçekleştirmelidir. iOS platformunda, uygulamayı uyandırmak, yeni belirteci getirmek ve kaydı gerçekleştirmek için lütfen buradaki ve Android için buradaki yönergeleri izleyin.

Önkoşullar

web çağrısı SDK'sını Azure İletişim Hizmetleri - Web anında iletme bildirimleri hızlı başlangıcı

Önemli

Azure İletişim Hizmetleri'nin bu özelliği şu anda önizleme aşamasındadır.

Önizleme API'leri ve SDK'ları hizmet düzeyi sözleşmesi olmadan sağlanır. Bunları üretim iş yükleri için kullanmamanızı öneririz. Bazı özellikler desteklenmeyebilir veya kısıtlı özelliklere sahip olabilir.

Daha fazla bilgi için Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları'nı gözden geçirin.

Azure İletişim Hizmetleri Web Çağrısı SDK'sı - Web anında iletme bildirimleri genel önizleme aşamasındadır ve 1.12.0-beta.2+ sürümünün bir parçası olarak kullanılabilir.

Lütfen web anında iletme bildirimleri hızlı başlangıç öğreticimizi ziyaret edin: https://github.com/Azure-Samples/communication-services-javascript-quickstarts/blob/main/calling-web-push-notifications/README.md

Önemli

20 Haziran 2023'te Google, FCM'nin eski API'lerini kullanarak ileti göndermeyi kullanımdan kaldırdığını duyurdu. Google, Eski FCM'yi Haziran 2024'te hizmetten kaldırıyor. Google, eski FCM API'lerinden FCM HTTP v1'e geçiş yapmanızı önerir. İletişim yeniden kullanımınız eski FCM eski API'lerini kullanmaya devam ediyorsa lütfen bu geçiş kılavuzunu izleyin.

SDK’yı yükleyin

Proje düzeyi build.gradle dosyanızı bulun ve ve allprojectsaltındaki buildscript depolar listesine ekleyinmavenCentral():

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

Ardından modül düzeyi build.gradle dosyanıza aşağıdaki satırları dependencies bölümüne ekleyin:

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

Gerekli nesneleri başlatma

Örnek CallAgent oluşturmak için bir örnekte yöntemini CallClient çağırmanız createCallAgent gerekir. Bu çağrı zaman uyumsuz olarak bir CallAgent örnek nesnesi döndürür.

createCallAgent yöntemi, bir erişim belirtecini kapsülleyen bir bağımsız değişken olarak alırCommunicationUserCredential.

öğesine erişmek DeviceManageriçin önce bir callAgent örnek oluşturmanız gerekir. Ardından almak için DeviceManageryöntemini kullanabilirsinizCallClient.getDeviceManager.

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

Çağıranın görünen adını ayarlamak için şu alternatif yöntemi kullanın:

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

Anında İletme Bildirimleri için Ek Önkoşullar

Cloud Messaging (FCM) etkinleştirilmiş ve Bir Azure Notification Hub örneğine bağlı Firebase Cloud Messaging hizmetinizle ayarlanmış bir Firebase hesabı. Daha fazla bilgi için bkz . İletişim Hizmetleri bildirimleri . Ayrıca öğretici, uygulamanızı derlemek için Android Studio sürüm 3.6 veya üzerini kullandığınızı varsayar.

Firebase Cloud Messaging'ten bildirim iletileri alabilmek için Android uygulaması için bir izin kümesi gereklidir. Dosyanızda AndroidManifest.xml , etiketin hemen arkasına <manifest ...> veya altına </application> aşağıdaki izin kümesini ekleyin.

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

Genel bakış

Mobil anında iletme bildirimleri, mobil cihazlarda gördüğünüz açılır bildirimlerdir. Arama için VoIP (İnternet Protokolü üzerinden Ses) anında iletme bildirimlerine odaklanacağız. Anında iletme bildirimlerine kaydolup anında iletme bildirimlerini işleyip anında iletme bildirimlerinin kaydını kaldırıyoruz.

Not

Anında İletme Bildirimlerine kaydolma ve Teams kullanıcısı için gelen Anında İletme Bildirimlerini işleme, API'ler aynıdır. Burada açıklanan API'ler veya TeamsCallAgent sınıflarında CommonCallAgent da çağrılabilir.

Anında iletme bildirimlerine kaydolma

Anında iletme bildirimlerine kaydolmak için uygulamanın cihaz kayıt belirtecine sahip bir CallAgent örnekte çağrısı registerPushNotification() yapması gerekir.

Cihaz kayıt belirtecini almak için, henüz yoksa bölümüne aşağıdaki satırları ekleyerek Firebase SDK'sını uygulama modülünüzün build.gradle dependencies dosyasına ekleyin:

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

Proje düzeyinizin build.gradle dosyasında, henüz yoksa bölümüne aşağıdaki satırı dependencies ekleyin:

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

Dosya henüz yoksa dosyanın başına aşağıdaki eklentiyi ekleyin:

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

Araç çubuğunda Şimdi Eşitle'yi seçin. İstemci uygulama örneği için Firebase Cloud Messaging SDK'sı tarafından oluşturulan cihaz kayıt belirtecini almak için aşağıdaki kod parçacığını ekleyin. Aşağıdaki içeri aktarmaları, örneğin belirteci alması için ana Etkinliğin üst bilgisine eklediğinizden emin olun.

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;

Belirteci almak için bu kod parçacığını ekleyin:

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

Gelen arama anında iletme bildirimleri için cihaz kayıt belirtecini Arama Hizmetleri SDK'sı ile kaydedin:

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

Anında iletme bildirimi işleme

Gelen arama anında iletme bildirimlerini almak için, yükü olan bir CallAgent örneğinde handlePushNotification() öğesini çağırın.

Yükü Firebase Cloud Messaging'ten almak için firebaseMessagingService Firebase SDK sınıfını genişleten ve yöntemini geçersiz kılan onMessageReceived yeni bir Hizmet (Dosya > Yeni > Hizmet > Hizmeti) oluşturarak başlayın. Bu yöntem, Firebase Cloud Messaging uygulamaya anında iletme bildirimini teslim ettiğinde çağrılan olay işleyicidir.

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

Aşağıdaki hizmet tanımını etiketin AndroidManifest.xml içine dosyaya <application> ekleyin:

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

Yük alındıktan sonra, bir CallAgent örneğinde handlePushNotification yöntemini çağırmayı işleyecek bir iç IncomingCallInformation nesnesine ayrıştırılacak şekilde İletişim Hizmetleri SDK'sına geçirilebilir. CallAgent Sınıfındaki CallClient yöntemi çağrılarak createCallAgent(...) bir örnek oluşturulur.

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

Anında iletme bildirimi iletisinin işlenmesi başarılı olduğunda ve tüm olay işleyicileri düzgün şekilde kaydedildiğinde uygulama çalar.

Anında iletme bildirimlerinin kaydını kaldırma

Uygulamalar anında iletme bildiriminin kaydını istedikleri zaman kaldırabilir. unregisterPushNotification() Kaydını kaldırmak için callAgent'da yöntemini çağırın.

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

Gelen arama için iç gönderimi devre dışı bırakma

Gelen bir çağrının anında iletme yükünün arayana teslim edilebileceği iki yol vardır.

  • FCM kullanma ve cihaz belirtecini yukarıda registerPushNotification belirtilen API ile veya TeamsCallAgentüzerinde CallAgent kaydetme.
  • Veya CallAgent TeamsCallAgent oluşturulduğunda SDK, anında iletme yükünün teslimini almak için bir iç hizmete de kaydolr.

veya TeamsCallAgentOptions içindeki CallAgentOptions özelliğini setDisableInternalPushForIncomingCall kullanarak SDK'ya iç gönderim hizmetini kullanarak gönderim yükünün teslimini devre dışı bırakmasını bildirmek mümkündür.

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

Sisteminizi ayarlama

Xcode projesini oluşturma

Xcode'da yeni bir iOS projesi oluşturun ve Tek Görünüm Uygulaması şablonunu seçin. Bu hızlı başlangıçta SwiftUI çerçevesi kullanılır, bu nedenle Dil'i Swift olarak ve Arabirim'i SwiftUI olarak ayarlamanız gerekir.

Bu hızlı başlangıç sırasında test oluşturacaksınız. Testleri Dahil Et onay kutusunu temizleyebilirsiniz.

Xcode içinde proje oluşturma penceresini gösteren ekran görüntüsü.

CocoaPods kullanarak paketi ve bağımlılıkları yükleme

  1. Uygulamanız için aşağıdaki örnekte olduğu gibi bir Podfile oluşturun:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. pod install'i çalıştırın.

  3. Xcode kullanarak açın .xcworkspace .

Mikrofona erişim isteme

Cihazın mikrofona erişmek için kullanarak uygulamanızın bilgi özellik listesini NSMicrophoneUsageDescriptiongüncelleştirmeniz gerekir. İlişkili değeri, sistemin kullanıcıdan erişim istemek için kullandığı iletişim kutusuna eklenecek bir dizeye ayarlarsınız.

Proje ağacının Info.plist girdisine sağ tıklayın ve Kaynak Kodu Olarak>Aç'ı seçin. Üst düzey <dict> bölüme aşağıdaki satırları ekleyin ve dosyayı kaydedin.

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

Uygulama çerçevesini ayarlama

Projenizin ContentView.swift dosyasını açın. Kitaplığı içeri aktarmak AzureCommunicationCalling için dosyanın en üstüne bir import bildirim ekleyin. Buna ek olarak, içeri aktar.AVFoundation Koddaki ses izni istekleri için buna ihtiyacınız olacaktır.

import AzureCommunicationCalling
import AVFoundation

CallAgent'ı başlatma

öğesinden CallClientbir CallAgent örnek oluşturmak için, başlatıldıktan sonra zaman uyumsuz olarak bir nesne döndüren bir CallAgent yöntem kullanmanız callClient.createCallAgent gerekir.

Çağrı istemcisi oluşturmak için bir CommunicationTokenCredential nesne geçirin:

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 Oluşturduğunuz nesneyi öğesine CallClientgeçirin ve görünen adı ayarlayın:

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

Genel bakış

Mobil anında iletme bildirimleri, mobil cihazlarda gördüğünüz açılır bildirimlerdir. Arama için VoIP (İnternet Protokolü üzerinden Ses) anında iletme bildirimlerine odaklanacağız. Anında iletme bildirimlerine kaydolacak, anında iletme bildirimlerini işleyecek ve ardından anında iletme bildirimlerini kaydını kaldıracağız. iOS uygulamanızda CallKit tümleştirmesi hakkında bir kılavuz için buraya bakın: iOS ACS SDK ile CallKit tümleştirmesi.

Not

Anında İletme Bildirimlerine kaydolma ve Teams kullanıcısı için gelen Anında İletme Bildirimlerini işleme, API'ler aynıdır. Burada açıklanan API'ler veya TeamsCallAgent sınıflarında CommonCallAgent da çağrılabilir.

Anında iletme bildirimlerini ayarlama

Mobil anında iletme bildirimi, mobil cihaza gelen açılır bildirimdir. Arama için VoIP (İnternet Protokolü üzerinden ses) anında iletme bildirimlerine odaklanacağız.

Aşağıdaki bölümlerde anında iletme bildirimlerinin nasıl kaydedildiği, işleneceğini ve kaydının nasıl kaldırıldığı açıklanmaktadır. Bu görevleri başlatmadan önce şu önkoşulları tamamlayın:

  1. Xcode'da İmzalama ve Özellikler'e gidin. + Yetenek'i seçip Anında İletme Bildirimleri'ni seçerek bir özellik ekleyin.
  2. + Yetenek'i seçip Arka Plan Modları'yı seçerek başka bir özellik ekleyin.
  3. Arka Plan Modları'nın altında IP üzerinden ses ve Uzak bildirimler onay kutularını seçin.

Xcode'da özelliklerin nasıl ekleneceğini gösteren ekran görüntüsü.

Anında iletme bildirimlerine kaydolma

Anında iletme bildirimlerine kaydolmak için cihaz kayıt belirtecine sahip bir CallAgent örneği arayınregisterPushNotification().

Anında iletme bildirimlerinin başarıyla başlatılmasının ardından kaydın gerçekleşmesi gerekir. callAgent Nesne yok edildiğinde çağrılır logout ve anında iletme bildirimlerinin kaydı otomatik olarak silinir.

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

Anında iletme bildirimlerini işleme

Gelen aramalar için anında iletme bildirimleri almak için sözlük yüküne sahip bir CallAgent örneği arayınhandlePushNotification().

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

Anında iletme bildirimlerinin kaydını kaldırma

Uygulamalar anında iletme bildiriminin kaydını istedikleri zaman kaldırabilir. yöntemini üzerinde çağırmanız unregisterPushNotification CallAgentyeterlidir.

Not

Uygulamaların oturum kapatmada anında iletme bildirimlerinden kaydı otomatik olarak kaldırılmaz.

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

Gelen arama için iç gönderimi devre dışı bırakma

Gelen bir çağrının anında iletme yükünün arayana teslim edilebileceği 2 yol vardır.

  • APNS'yi kullanma ve cihaz belirtecini yukarıda registerPushNotification belirtilen API ile veya TeamsCallAgentüzerinde CallAgent kaydetme.
  • Veya CallAgent TeamsCallAgent oluşturulduğunda SDK, anında iletme yükünün teslimini almak için bir iç hizmete de kaydolr.

veya TeamsCallAgentOptions içindeki CallAgentOptions özelliğini disableInternalPushForIncomingCall kullanarak SDK'ya iç gönderim hizmetini kullanarak gönderim yükünün teslimini devre dışı bırakmasını bildirmek mümkündür.

let options = CallAgentOptions()
options.disableInternalPushForIncomingCall = true

Sisteminizi ayarlama

Visual Studio projesini oluşturma

UWP uygulaması için Visual Studio 2022'de yeni bir Boş Uygulama (Evrensel Windows) projesi oluşturun. Proje adını girdikten sonra, 10.0.17763.0'dan sonraki bir Windows SDK'sını seçebilirsiniz.

WinUI 3 uygulaması için, tek sayfalı bir WinUI 3 uygulaması ayarlamak için Boş Uygulama, Paketlenmiş (Masaüstünde WinUI 3) şablonuyla yeni bir proje oluşturun. Windows Uygulama SDK'sı sürüm 1.3 veya üzeri gereklidir.

NuGet Paket Yöneticisi kullanarak paketi ve bağımlılıkları yükleme

Arama SDK'sı API'leri ve kitaplıkları bir NuGet paketi aracılığıyla genel kullanıma sunulur.

Aşağıdaki adımlar, Çağırma SDK'sı NuGet paketini bulma, indirme ve yükleme adımlarını açıklar:

  1. Araçlar>NuGet Paket Yöneticisi Çözüm için NuGet Paketlerini Yönet'i seçerek NuGet Paket Yöneticisi> açın.
  2. Gözat'ı seçin ve arama kutusuna yazınAzure.Communication.Calling.WindowsClient.
  3. Ön sürümü dahil et onay kutusunun seçili olduğundan emin olun.
  4. Azure.Communication.Calling.WindowsClient Paketi seçin ve ardından 1.4.0-beta.1 veya daha yeni bir sürüm seçin Azure.Communication.Calling.WindowsClient .
  5. Sağ taraftaki sekmede İletişim Hizmetleri projesine karşılık gelen onay kutusunu seçin.
  6. Yükle düğmesini seçin.

Genel bakış

Windows platformunda anında iletme bildirimleri kullanılarak Windows Push Notification Service (WNS),teslim edilir.

Not

Anında İletme Bildirimlerine Kaydolmak ve Özel Teams Uç Noktası (CTE) için Anında İletme Bildirimlerinin işlenmesi için API'ler aynıdır. Aşağıda açıklanan API'ler Özel Teams Uç Noktası (CTE) için veya TeamsCallAgent sınıfında da çağrılabilirCommonCallAgent.

Anında iletme bildirimlerini ayarlama

Anında iletme bildirimi, cihazınıza gelen açılır bildirimdir. Arama için VoIP (İnternet Protokolü üzerinden ses) anında iletme bildirimlerine odaklanacağız.

Aşağıdaki bölümlerde, gelen aramayı yanıtlamak/reddetmek için bir Windows bildiriminin nasıl kaydedildiği, işleneceğini ve gösterilip gösterilmediği açıklanmaktadır. Bu görevleri başlatmadan önce şu önkoşulları tamamlayın:

  1. Öğretici: Azure Notification Hubs kullanarak Evrensel Windows Platformu uygulamalara bildirim gönderme makalesini izleyin. Bu öğreticiyi takip ettikten sonra şunlara sahipsiniz:

    • ve Microsoft.Toolkit.Uwp.Notifications paketlerini içeren WindowsAzure.Messaging.Managed bir uygulama.
    • Olarak <AZURE_PNH_HUB_NAME> başvurulan bir Azure PNH (Anında İletme Bildirimleri Merkezi) Hub adı ve bu hızlı başlangıçta olduğu gibi <AZURE_PNH_HUB_CONNECTION_STRING> başvurulan Azure PNH Bağlantı Dizesi.
  2. Her uygulama başlatma işleminde bir WNS (Windows Bildirim Hizmeti) kanalına kaydolmak için başlatma kodunu App.xaml.cs dosyanıza eklediğinizden emin olun:

// App.xaml.cs

protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
    await InitNotificationsAsync();
    
    ...
}

private async Task InitNotificationsAsync()
{
    if (AZURE_PNH_HUB_NAME != "<AZURE_PNH_HUB_NAME>" && AZURE_PNH_HUB_CONNECTION_STRING != "<AZURE_PNH_HUB_CONNECTION_STRING>")
    {
        var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
        channel.PushNotificationReceived += Channel_PushNotificationReceived;
    
        var hub = new NotificationHub(AZURE_PNH_HUB_NAME, AZURE_PNH_HUB_CONNECTION_STRING);
        var result = await hub.RegisterNativeAsync(channel.Uri);
    
        if (result.ChannelUri != null)
        {
            PNHChannelUri = new Uri(result.ChannelUri);
        }
        else
        {
            Debug.WriteLine("Cannot register WNS channel");
        }
    }
}
  1. App.xaml.cs yeni bir anında iletme bildirimi iletisi geldiğinde etkinleştirilen olay işleyicisini kaydedin:
// 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;
    }
}

Anında iletme bildirimlerine kaydolma

Anında iletme bildirimlerine kaydolmak için, application init üzerinde alınan WNS kayıt kanalıyla bir CallAgent örneği arayınRegisterForPushNotificationAsync().

Anında iletme bildirimlerinin başarıyla başlatılmasının ardından kaydın gerçekleşmesi gerekir.

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

Anında iletme bildirimlerini işleme

Gelen aramalar için anında iletme bildirimleri almak için sözlük yüküne sahip bir CallAgent örneği arayınhandlePushNotification().

// MainPage.xaml.cs

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

Bu, CallAgent'da gelen arama bildirimini gösteren bir gelen arama olayını tetikler.

// 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 yönteminde bildirim için düğmeye basılan düğmeyi işlemek için kodu ekleyin:

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

Sonraki adımlar