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
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
- Dağıtılan bir İletişim Hizmetleri kaynağı. İletişim Hizmetleri kaynağı oluşturun.
- Çağıran istemciyi etkinleştirmek için kullanıcı erişim belirteci. Daha fazla bilgi için bkz . Erişim belirteçleri oluşturma ve yönetme.
- İsteğe bağlı: Uygulamanıza sesli çağrı eklemek için hızlı başlangıcı tamamlayın
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 allprojects
altı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 DeviceManager
için önce bir callAgent
örnek oluşturmanız gerekir. Ardından almak için DeviceManager
yö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 veyaTeamsCallAgent
üzerindeCallAgent
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.
CocoaPods kullanarak paketi ve bağımlılıkları yükleme
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
pod install
'i çalıştırın.Xcode kullanarak açın
.xcworkspace
.
Mikrofona erişim isteme
Cihazın mikrofona erişmek için kullanarak uygulamanızın bilgi özellik listesini NSMicrophoneUsageDescription
gü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 CallClient
bir 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 CallClient
geç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:
- Xcode'da İmzalama ve Özellikler'e gidin. + Yetenek'i seçip Anında İletme Bildirimleri'ni seçerek bir özellik ekleyin.
- + Yetenek'i seçip Arka Plan Modları'yı seçerek başka bir özellik ekleyin.
- Arka Plan Modları'nın altında IP üzerinden ses ve Uzak bildirimler onay kutularını seçin.
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
CallAgent
yeterlidir.
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 veyaTeamsCallAgent
üzerindeCallAgent
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:
- Araçlar>NuGet Paket Yöneticisi Çözüm için NuGet Paketlerini Yönet'i seçerek NuGet Paket Yöneticisi> açın.
- Gözat'ı seçin ve arama kutusuna yazın
Azure.Communication.Calling.WindowsClient
. - Ön sürümü dahil et onay kutusunun seçili olduğundan emin olun.
Azure.Communication.Calling.WindowsClient
Paketi seçin ve ardından 1.4.0-beta.1 veya daha yeni bir sürüm seçinAzure.Communication.Calling.WindowsClient
.- Sağ taraftaki sekmede İletişim Hizmetleri projesine karşılık gelen onay kutusunu seçin.
- 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:
Öğ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çerenWindowsAzure.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.
- ve
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");
}
}
}
- 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();
}
}