次の方法で共有


UI ライブラリで 1 対 1 通話とプッシュ通知を設定する

UI ライブラリでは、Azure Communication Services 参加者識別子を使用して 1 対 1 の通話を行うためのサポートをすぐに利用できます。 1 対 1 の通話をサポートするために、UI ライブラリには着信通知が用意されています。 通話の Azure Event Grid イベント ソースとして Azure Communication Services を使用することもできます。

この記事では、アプリケーションで UI ライブラリを使用して 1 対 1 通話を行う方法について説明します。

前提条件

機能を設定する

詳細については、オープンソースの 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 の後に着信通知を受信するには、CallCompositeIncomingCallEventCallCompositeIncomingCallCancelledEvent に登録します。 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)

他の参加者にダイヤルする

他の参加者との通話を開始するには、CommunicationIdentitylaunch から参加者の生 ID を使用して CallCompositeStartCallOptions を作成します。

    val participants: List<CommunicationIdentifier> // participants to dial
    callComposite.launch(context, participants, localOptions)

詳細については、オープンソースの iOS UI ライブラリサンプル アプリケーション コードを参照してください。

プッシュ通知の設定

モバイル プッシュ通知は、モバイル デバイスで受け取るポップアップ通知です。 この記事では、ボイス オーバー インターネット プロトコル (VoIP) プッシュ通知について説明します。

以下のセクションでは、プッシュ通知の登録、処理、および登録解除を行う方法について説明します。 これらの作業を開始する前に、次の前提条件を満たす必要があります。

  1. Xcode で、[Signing & Capabilities]\(署名と機能\) に移動します。 [+ Capability]\(+ 機能\) を選択して機能を追加してから、[プッシュ通知] を選択します。
  2. [+ Capability]\(+ 機能\) を選択して別の機能を追加してから、[バックグラウンド モード] を選びます。
  3. [バックグラウンド モード] で、[ボイス オーバー 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 の後に着信通知を受信するには、onIncomingCallonIncomingCallCancelled に登録します。 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

着信の内部プッシュを無効にする

EventGridAPNS からのみプッシュ通知を受信するには、CallCompositeOptionsdisableInternalPushForIncomingCall を true に設定します。 disableInternalPushForIncomingCall が true の場合、ui ライブラリからのプッシュ通知イベントは、 handlePushNotification が呼び出されるときにのみ受信されます。 disableInternalPushForIncomingCall オプションは、フォアグラウンド モードで CallComposite からの通知の受信を停止するのに役立ちます。 この設定では、EventGridNotificationHub の設定は制御されません。

    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)

次のステップ