UI ライブラリで 1 対 1 通話とプッシュ通知を設定する
UI ライブラリでは、Azure Communication Services 参加者識別子を使用して 1 対 1 の通話を行うためのサポートをすぐに利用できます。 1 対 1 の通話をサポートするために、UI ライブラリには着信通知が用意されています。 通話の Azure Event Grid イベント ソースとして Azure Communication Services を使用することもできます。
この記事では、アプリケーションで UI ライブラリを使用して 1 対 1 通話を行う方法について説明します。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- デプロイ済みの Communication Services リソース。 Communication Services リソースを作成します。
- 通話クライアントを有効にするためのユーザー アクセス トークン。 ユーザー アクセス トークンを取得します。
- 省略可能: 「UI ライブラリ コンポジットの使用を開始するためのクイックスタート」の完了。
機能を設定する
詳細については、オープンソースの Android UI ライブラリ とサンプル アプリケーション コードを参照してください。
プッシュ通知のアクセス許可を設定する
プッシュ通知を設定するには、Firebase Cloud Messaging (FCM) が有効になっている Firebase アカウントが必要です。 FCM サービスは、Azure Notification Hubs インスタンスに接続されている必要があります。 詳細については、「Communication Services の通知」を参照してください。 また、Android Studio バージョン 3.6 以降を使用してアプリケーションをビルドする必要があります。
Android アプリケーションが FCM から通知メッセージを受信するには、一連のアクセス許可が必要です。 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" />
モバイル アプリへの受信通知の追加
Azure Communication Services は、Azure Event Grid および Azure Notification Hubs と統合されます。これにより、Azure のアプリにプッシュ通知を追加できます。
通知ハブプッシュ通知の登録/登録解除
プッシュ通知を登録するには、アプリケーションは、デバイス登録トークンを使用して CallComposite
インスタンスの registerPushNotification()
を呼び出す必要があります。
デバイス登録トークンを取得するには、アプリケーション モジュールの build.gradle
インスタンスに Firebase SDK を追加します。 Firebase から通知を受信するには、「Communication Services の通知」にある手順に従って Azure Notification Hubs を統合します。
val deviceRegistrationToken = "" // From Firebase
callComposite.registerPushNotification(deviceRegistrationToken).whenComplete { _, throwable ->
if (throwable != null) {
// Handle error
}
}
Event Grid または通知ハブから受信したプッシュ通知を処理する
着信通話のプッシュ通知を受信するには、ペイロードを設定して CallComposite
インスタンスで handlePushNotification
を呼び出します。
FCM からペイロードを取得するには、まず、FirebaseMessagingService
Firebase SDK クラスを拡張し、onMessageReceived
メソッドをオーバーライドする、新しいサービスを作成します ([ファイル]>[新規]>[サービス]>[サービス])。 このメソッドは、FCM によってアプリケーションにプッシュ通知が配信されると呼び出されるイベント ハンドラーです。
// On Firebase onMessageReceived
val pushNotification = CallCompositePushNotification(remoteMessage.data)
callComposite.handlePushNotification(pushNotification).whenComplete { _, throwable ->
if (throwable != null) {
// Handle error
}
}
着信通知に登録する
handlePushNotification
の後に着信通知を受信するには、CallCompositeIncomingCallEvent
と CallCompositeIncomingCallCancelledEvent
に登録します。 CallCompositeIncomingCallEvent
には、着信 callId と呼び出し元情報が含まれています。 CallCompositeIncomingCallCancelledEvent
には、callId と呼び出しキャンセル コード (Azure Communication Services でのトラブルシューティング) が含まれています。
private var incomingCallEvent: IncomingCallEvent? = null
private var incomingCallCancelledEvent: IncomingCallCancelledEvent? = null
class IncomingCallEvent : CallCompositeEventHandler<CallCompositeIncomingCallEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallEvent?) {
// Display incoming call UI to accept/decline a call
// CallCompositeIncomingCallEvent contains call id and caller information
}
}
class IncomingCallCancelledEvent : CallCompositeEventHandler<CallCompositeIncomingCallCancelledEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallCancelledEvent?) {
// Call-ended event when a call is declined or not accepted
}
}
// Event subscription
incomingCallEvent = IncomingCallEvent()
callComposite.addOnIncomingCallEventHandler(incomingCallEvent)
incomingCallCancelledEvent = IncomingCallCancelledEvent()
callComposite.addOnIncomingCallCancelledEventHandler(incomingCallEndEvent)
// Event unsubscribe
callComposite.removeOnIncomingCallEventHandler(incomingCallEvent)
callComposite.removeOnIncomingCallCancelledEventHandler(incomingCallEndEvent)
通話を処理する
通話を承諾するには、accept
の呼び出しを行います。 通話を拒否するには、reject
の呼び出しを行います。
// Accept call
callComposite.accept(applicationContext, incomingCallId, localOptions)
// Decline call
callComposite.reject(incomingCallId)
他の参加者にダイヤルする
他の参加者との通話を開始するには、CommunicationIdentity
と launch
から参加者の生 ID を使用して CallCompositeStartCallOptions
を作成します。
詳細については、オープンソースの iOS UI ライブラリ とサンプル アプリケーション コードを参照してください。
プッシュ通知の設定
モバイル プッシュ通知は、モバイル デバイスで受け取るポップアップ通知です。 この記事では、ボイス オーバー インターネット プロトコル (VoIP) プッシュ通知について説明します。
以下のセクションでは、プッシュ通知の登録、処理、および登録解除を行う方法について説明します。 これらの作業を開始する前に、次の前提条件を満たす必要があります。
- Xcode で、[Signing & Capabilities]\(署名と機能\) に移動します。 [+ Capability]\(+ 機能\) を選択して機能を追加してから、[プッシュ通知] を選択します。
- [+ Capability]\(+ 機能\) を選択して別の機能を追加してから、[バックグラウンド モード] を選びます。
- [バックグラウンド モード] で、[ボイス オーバー IP] と [リモート通知] のチェックボックスをオンにします。
モバイル アプリへの受信通知の追加
Azure Communication Services は、Azure Event Grid および Azure Notification Hubs と統合されます。これにより、Azure のアプリにプッシュ通知を追加できます。
通知ハブ プッシュ通知の登録/登録解除
プッシュ通知を登録するには、アプリケーションは、デバイス登録トークンを使用して CallComposite
インスタンスの registerPushNotifications()
を呼び出す必要があります。
// to register
let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
callComposite.registerPushNotifications(
deviceRegistrationToken: deviceToken) { result in
switch result {
case .success:
// success
case .failure(let error):
// failure
}
}
// to unregister
callComposite.unregisterPushNotification()
Event Grid または通知ハブから受信したプッシュ通知を処理する
着信通話のプッシュ通知を受信するには、ディクショナリ ペイロードを設定して CallComposite
インスタンスで handlePushNotification()
を呼び出します。
handlePushNotification()
を使用し、CallKit オプションが設定されている場合は、通話を承諾または拒否するための CallKit 通知が表示されます。
// App is in the background
// push notification contains from/to communication identifiers and event type
let pushNotification = PushNotification(data: payload.dictionaryPayload)
let callKitOptions = CallKitOptions(...//CallKit options)
CallComposite.reportIncomingCall(pushNotification: pushNotification,
callKitOptions: callKitOptions) { result in
if case .success() = result {
DispatchQueue.global().async {
// You don't need to wait for a Communication Services token to handle the push because
// Communication Services common receives a callback function to get the token with refresh options
// create call composite and handle push notification
callComposite.handlePushNotification(pushNotification: pushNotification)
}
}
}
// App is in the foreground
let pushNotification = PushNotification(data: dictionaryPayload)
callComposite.handlePushNotification(pushNotification: pushNotification) { result in
switch result {
case .success:
// success
case .failure(let error):
// failure
}
}
handle push で着信通知に登録する
handlePushNotification
の後に着信通知を受信するには、onIncomingCall
と onIncomingCallCancelled
に登録します。 IncomingCall
には、着信 callId と呼び出し元情報が含まれています。 IncomingCallCancelled
には、callId と呼び出しキャンセル コード (Azure Communication Services でのトラブルシューティング) が含まれています。
let onIncomingCall: (IncomingCall) -> Void = { [] incomingCall in
// Incoming call id and caller info
}
let onIncomingCallEnded: (IncomingCallCancelled) -> Void = { [] incomingCallCancelled in
// Incoming call cancelled code with callId
}
callComposite.events.onIncomingCall = onIncomingCall
callComposite.events.onIncomingCallEnded = onIncomingCallEnded
着信の内部プッシュを無効にする
EventGrid
と APNS
からのみプッシュ通知を受信するには、CallCompositeOptions
で disableInternalPushForIncomingCall
を true に設定します。 disableInternalPushForIncomingCall
が true の場合、ui ライブラリからのプッシュ通知イベントは、 handlePushNotification
が呼び出されるときにのみ受信されます。 disableInternalPushForIncomingCall
オプションは、フォアグラウンド モードで CallComposite
からの通知の受信を停止するのに役立ちます。 この設定では、EventGrid
と NotificationHub
の設定は制御されません。
let options = CallCompositeOptions(disableInternalPushForIncomingCall: true)
呼び出し元 SDK CallKit から承諾された着信でコンポジットを起動する
Azure Communication Services Calling iOS SDK は、CallKit の統合をサポートしています。 CallCompositeCallKitOption
のインスタンスを構成することで、UI ライブラリでこの統合を有効にすることができます。 詳細については、「CallKit との統合」を参照してください。
呼び出し元 SDK からの CallKit が有効になっている場合は、onIncomingCallAcceptedFromCallKit
に登録します。 通話が承諾されたら、通話 ID を使用して callComposite
を起動します。
let onIncomingCallAcceptedFromCallKit: (callId) -> Void = { [] callId in
// Incoming call accepted call id
}
callComposite.events.onIncomingCallAcceptedFromCallKit = onIncomingCallAcceptedFromCallKit
// launch composite with/without local options
// Note: as call is already accepted, setup screen will not be displayed
callComposite.launch(callIdAcceptedFromCallKit: callId)
CallComposite を使用して通話を処理する
通話を承諾するには、accept
の呼び出しを行います。 通話を拒否するには、reject
の呼び出しを行います。
// Accept call
callComposite.accept(incomingCallId,
... // CallKit and local options
)
// Decline call
callComposite.reject(incomingCallId)
他の参加者にダイヤルする
他の参加者との通話を開始するには、参加者の CommunicationIdentifier
リストを使用して callComposite
を起動します。
// [CommunicationIdentifier]
// use createCommunicationIdentifier(fromRawId: "raw id")
callComposite.launch(participants: <list of CommunicationIdentifier>,
localOptions: localOptions)