Teilen über


Einrichten von 1:1-Anrufen und Pushbenachrichtigungen in der UI-Bibliothek

Die UI-Bibliothek bietet sofortige Unterstützung für Einzelanrufe über die Teilnehmeridentifikatoren von Azure Communication Services. Zur Unterstützung von 1:1-Anrufen stellt die UI-Bibliothek Benachrichtigungen zu eingehenden Anrufen bereit. Sie können Azure Communication Services auch als Azure Event Grid-Ereignisquelle für Anrufe verwenden.

In diesem Artikel erfahren Sie, wie Sie 1:1-Anrufe mithilfe der UI-Bibliothek in Ihrer Anwendung ordnungsgemäß einrichten.

Voraussetzungen

Einrichten der Features

Weitere Informationen finden Sie in der Open Source Android UI Library und im Beispielanwendungscode.

Einrichten von Berechtigungen für Pushbenachrichtigungen

Zum Einrichten von Pushbenachrichtigungen benötigen Sie ein Firebase-Konto mit aktiviertem Firebase Cloud Messaging (FCM). Ihr FCM-Dienst muss mit einer Azure Notification Hubs-Instanz verbunden sein. Weitere Informationen finden Sie unter Communication Services-Benachrichtigungen. Sie müssen auch Android Studio, Version 3.6 oder höher, verwenden, um Ihre Anwendung zu erstellen.

Damit die Android-Anwendung Benachrichtigungen von FCM empfangen kann, benötigt sie eine Reihe von Berechtigungen. Fügen Sie in Ihrer AndroidManifest.xml-Datei direkt nach dem Tag <manifest ...> oder </application> den folgenden Berechtigungssatz hinzu.

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

Hinzufügen von eingehenden Benachrichtigungen an Ihre mobile App

Azure Communication Services ist mit Azure Event Grid und Azure Notification Hubs integriert, sodass Sie Ihren Apps in Azure Pushbenachrichtigungen hinzufügen können.

Registrieren/Aufheben der Registrierung für Notification Hub-Pushbenachrichtigungen

Um sich für Pushbenachrichtigungen zu registrieren, muss die Anwendung registerPushNotification() für eine CallComposite-Instanz mit einem Geräteregistrierungstoken aufrufen.

Um das Geräteregistrierungstoken abzurufen, fügen Sie das Firebase-SDK zur build.gradle-Instanz Ihres Anwendungsmoduls hinzu. Um Benachrichtigungen von Firebase zu erhalten, integrieren Sie Azure Notification Hub gemäß den Anweisungen in Communication Services-Benachrichtigungen.

    val deviceRegistrationToken = "" // From Firebase
    callComposite.registerPushNotification(deviceRegistrationToken).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Behandeln von Pushbenachrichtigungen, die von Event Grid oder Notification Hub empfangen werden

Rufen Sie handlePushNotification für eine CallComposite-Instanz mit einer Payload auf, um Pushbenachrichtigungen für eingehende Anrufe zu erhalten.

Um die Payload von FCM abzurufen, erstellen Sie zunächst einen neuen Dienst (Datei>Neu>Dienst>Dienst), der die Firebase-SDK-Klasse FirebaseMessagingService erweitert und die onMessageReceived-Methode überschreibt. Diese Methode ist der Ereignishandler, der aufgerufen wird, wenn FCM die Pushbenachrichtigung an die Anwendung übermittelt.

    // On Firebase onMessageReceived
    val pushNotification = CallCompositePushNotification(remoteMessage.data)
    callComposite.handlePushNotification(pushNotification).whenComplete { _, throwable ->
        if (throwable != null) {
            // Handle error
        }
    }

Registrieren für Benachrichtigungen zu eingehenden Anrufen

Um Benachrichtigungen zu eingehenden Anrufen nach handlePushNotification zu empfangen, abonnieren Sie CallCompositeIncomingCallEvent und CallCompositeIncomingCallCancelledEvent. CallCompositeIncomingCallEvent enthält die ID des eingehenden Anrufs und Anruferinformationen. CallCompositeIncomingCallCancelledEvent enthält die Anruf-ID und den Anrufabbruchcode (Problembehandlung in 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)

Behandeln von Anrufen

Um Anrufe anzunehmen, rufen Sie accept auf. Um Anrufe abzulehnen, rufen Sie reject auf.

// Accept call
callComposite.accept(applicationContext, incomingCallId, localOptions)

// Decline call
callComposite.reject(incomingCallId)

Andere Teilnehmer anrufen

Um einen Anruf mit anderen Teilnehmern zu beginnen, erstellen Sie CallCompositeStartCallOptions mit den unformatierten IDs der Teilnehmer aus CommunicationIdentity und launch.

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

Weitere Informationen finden Sie in der Open-Source-iOS-UI-Bibliothek und im Beispielanwendungscode.

Pushbenachrichtigungen einrichten

Eine mobile Pushbenachrichtigung ist die Popupbenachrichtigung, die Sie auf dem mobilen Gerät erhalten. Der Schwerpunkt dieses Artikels liegt auf VoIP-Pushbenachrichtigungen (Voice over Internet Protocol).

In den folgenden Abschnitten erfahren Sie, wie Sie sich für Pushbenachrichtigungen registrieren, sie behandeln und die Registrierung für sie aufheben. Bevor Sie mit diesen Aufgaben beginnen, sind jedoch folgende Schritte erforderlich:

  1. Navigieren Sie in Xcode zur Registerkarte Signing & Capabilities (Signieren und Funktionen). Fügen Sie eine Funktion hinzu, indem Sie + Capability (+ Funktion) und anschließend Push Notifications (Pushbenachrichtigungen) auswählen.
  2. Fügen Sie eine weitere Funktion hinzu, indem Sie + Capability (+ Funktion) und anschließend Background Modes (Hintergrundmodi) auswählen.
  3. Aktivieren Sie unter Background Modes (Hintergrundmodi) die Kontrollkästchen Voice over IP und Remote notifications (Remotebenachrichtigungen) aus.

Hinzufügen von eingehenden Benachrichtigungen an Ihre mobile App

Azure Communication Services ist mit Azure Event Grid und Azure Notification Hubs integriert, sodass Sie Ihren Apps in Azure Pushbenachrichtigungen hinzufügen können.

Registrieren/Aufheben der Registrierung für Notification Hub-Pushbenachrichtigungen

Um sich für Pushbenachrichtigungen zu registrieren, muss die Anwendung registerPushNotifications() für eine CallComposite-Instanz mit einem Geräteregistrierungstoken aufrufen.

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

Behandeln von Pushbenachrichtigungen, die von Event Grid oder Notification Hub empfangen werden

Rufen Sie handlePushNotification() für eine CallComposite-Instanz mit Wörterbuchnutzdaten auf, um Pushbenachrichtigungen für eingehende Anrufe zu erhalten.

Wenn Sie handlePushNotification() verwenden und CallKit-Optionen festgelegt wurden, erhalten Sie eine CallKit-Benachrichtigung, um Anrufe anzunehmen oder abzulehnen.

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

Registrieren für Benachrichtigungen zu eingehenden Anrufen bei Handle-Push

Um Benachrichtigungen zu eingehenden Anrufen nach handlePushNotification zu empfangen, abonnieren Sie onIncomingCall und onIncomingCallCancelled. IncomingCall enthält die ID des eingehenden Anrufs und Anruferinformationen. IncomingCallCancelled enthält die Anruf-ID und den Anrufabbruchcode (Problembehandlung in 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

Deaktivieren des internen Pushs für eingehende Anrufe

Damit nur Pushbenachrichtigungen von EventGrid und APNS empfangen werden, legen Sie disableInternalPushForIncomingCall in CallCompositeOptions auf „true“ fest. Wenn disableInternalPushForIncomingCall „true“ ist, wird das Pushbenachrichtigungsereignis aus der UI-Bibliothek nur empfangen, wenn handlePushNotification aufgerufen wird. Die Option disableInternalPushForIncomingCall hilft, den Empfang von Benachrichtigungen von CallComposite im Vordergrundmodus zu beenden. Diese Einstellung steuert nicht die Einstellungen für EventGrid und NotificationHub.

    let options = CallCompositeOptions(disableInternalPushForIncomingCall: true)

Verbund für eingehende Anrufe starten, die vom Calling-SDK-CallKit akzeptiert werden

Das Azure Communication Services Calling iOS-SDK unterstützt die CallKit-Integration. Sie können diese Integration in der UI-Bibliothek aktivieren, indem Sie eine Instanz von CallCompositeCallKitOption konfigurieren. Weitere Informationen finden Sie in den Artikeln zur Integration mit CallKit.

Abonnieren Sie onIncomingCallAcceptedFromCallKit, wenn CallKit über das Calling-SDK aktiviert ist. Starten Sie bei Annahme des Anrufs callComposite mit Anruf-ID.

    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)

Behandeln von Anrufen mit CallComposite

Um Anrufe anzunehmen, rufen Sie accept auf. Um Anrufe abzulehnen, rufen Sie reject auf.

// Accept call
callComposite.accept(incomingCallId, 
                     ... // CallKit and local options
                     )

// Decline call
callComposite.reject(incomingCallId)

Andere Teilnehmer anrufen

Um einen Anruf mit anderen Teilnehmern zu beginnen, starten Sie callComposite mit einer Teilnehmerliste von CommunicationIdentifier.

    // [CommunicationIdentifier]
    // use createCommunicationIdentifier(fromRawId: "raw id")
    callComposite.launch(participants: <list of CommunicationIdentifier>,
                         localOptions: localOptions)

Nächste Schritte