Intégrer CallKit à la bibliothèque d’interface utilisateur

La bibliothèque d’interface utilisateur pour Azure Communication Services fournit une prise en charge intégrée de CallKit. Les développeurs peuvent fournir leur propre configuration de CallKit à utiliser pour la bibliothèque d’interface utilisateur.

Dans cet article, vous allez apprendre à configurer CallKit correctement à l’aide de la bibliothèque d’interface utilisateur dans votre application.

Prérequis

Pour plus d’informations, consultez la bibliothèque d’interface utilisateur iOS open source et l’exemple de code d’application.

Configurer l’intégration de CallKit

Le kit de développement logiciel (SDK) iOS d’appel Azure Communication Services prend en charge l’intégration de CallKit. Vous pouvez activer cette intégration dans la bibliothèque d’interface utilisateur en configurant une instance de CallCompositeCallKitOption. Pour plus d’informations, consultez Intégrer à CallKit.

Spécifier les informations des destinataires des appels pour les appels sortants

Pour spécifier les informations d’appel sortant, créez une instance de CallKitRemoteInfo. Si vous ne fournissez pas CallKitRemoteInfo, la valeur brute de l’identificateur du participant est affichée par défaut.

Attribuez une valeur à displayName pour personnaliser le nom d’affichage de l’appelant. La valeur spécifiée dans CallKitRemoteInfo est exactement celle qui apparaît dans le journal des derniers appels composés.

Affectez également la valeur cxHandle. Il s’agit de ce que l’application reçoit lorsque l’utilisateur rappelle ce contact.

let cxHandle = CXHandle(type: .generic, value: "VALUE_TO_CXHANDLE")
let callKitRemoteInfo = CallKitRemoteInfo(displayName: "DISPLAY_NAME", handle: cxHandle)
callComposite.launch(..., // Locator for Azure Communication Service
                     callKitRemoteInfo: callKitRemoteInfo)

Spécifier les informations des destinataires des appels pour les appels entrants

Pour spécifier les informations d’appel entrant de l’appelant, créez une instance de CallKitOptions. Si vous ne fournissez pas CallKitOptions, la valeur brute de l’identificateur du participant est affichée par défaut.

Attribuez une valeur à provideRemoteInfo pour personnaliser le nom d’affichage de l’appelant. La valeur spécifiée dans CallKitRemoteInfo est exactement celle qui apparaît dans le journal des derniers appels composés.

Affectez également la valeur cxHandle. Il s’agit de ce que l’application reçoit lorsque l’utilisateur rappelle ce contact.

public func incomingCallRemoteInfo(info: Caller) -> CallKitRemoteInfo {
    let cxHandle = CXHandle(type: .generic, value: "VALUE_TO_CXHANDLE")
    var remoteInfoDisplayName = "DISPLAY_NAME"
    let callKitRemoteInfo = CallKitRemoteInfo(displayName: remoteInfoDisplayName,
                                                            handle: cxHandle)
    return callKitRemoteInfo
}

Configurer des fournisseurs

Si nécessaire, fournissez une instance CXProviderConfiguration à CallKitOptions. Pour plus d’informations, consultez la documentation du développeur Apple sur CXProviderConfiguration.

let providerConfig = CXProviderConfiguration()
providerConfig.supportsVideo = true
providerConfig.maximumCallGroups = 1
providerConfig.maximumCallsPerCallGroup = 1
providerConfig.includesCallsInRecents = true
providerConfig.supportedHandleTypes = [.phoneNumber, .generic]

Configurer une session audio

Configurez une session audio à appeler avant de placer ou d’accepter un appel entrant et avant de reprendre un appel en attente. Pour plus d’informations, consultez la documentation du développeur Apple sur AVAudioSession.

public func configureAudioSession() -> Error? {
    let audioSession = AVAudioSession.sharedInstance()
    let options: AVAudioSession.CategoryOptions = .allowBluetooth
    var configError: Error?
    do {
        try audioSession.setCategory(.playAndRecord)
    } catch {
        configError = error
    }
    return configError
}

Activer CallKit

Pour activer CallKit, créez une instance de CallKitOptions et fournissez-la à callCompositeOptions.

let isCallHoldSupported = true // enable call hold (default is true)
let callKitOptions = CallKitOptions(
    providerConfig: providerConfig,
    isCallHoldSupported: isCallHoldSupported,
    provideRemoteInfo: provideRemoteInfo,
    configureAudioSession: configureAudioSession
)

let options = CallCompositeOptions(
    ..., // Other options for Azure Communication Service
    callKitOptions: callKitOptions
)

API pour mettre en attente et reprendre pour CallKit intégrée dans l’application

Pour CallKit intégré à l’application, utilisez hold et resume pour gérer l’état des appels.

    callComposite.hold() { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

    callComposite.resume() { result in
        switch result {
            case .success:
                // success
            case .failure(let error):
                // failure
        }
    }

Étapes suivantes