Поделиться через


Интеграция CallKit в библиотеку пользовательского интерфейса

Библиотека пользовательского интерфейса Службы коммуникации Azure предоставляет поддержку callKit вне поля. Разработчики могут предоставить собственную конфигурацию для CallKit, которая будет использоваться для библиотеки пользовательского интерфейса.

В этой статье вы узнаете, как правильно настроить CallKit с помощью библиотеки пользовательского интерфейса в приложении.

Необходимые компоненты

Дополнительные сведения см. в библиотеке пользовательского интерфейса iOS с открытым исходным кодом и образце кода приложения.

Настройка интеграции CallKit

Пакет SDK для вызовов iOS Службы коммуникации Azure поддерживает интеграцию CallKit. Эту интеграцию можно включить в библиотеке пользовательского CallCompositeCallKitOptionинтерфейса, настроив экземпляр. Дополнительные сведения см. в разделе "Интеграция с CallKit".

Указание сведений о получателе звонков для исходящих звонков

Чтобы указать сведения об исходящем вызове, создайте экземпляр CallKitRemoteInfo. Если вы не предоставляете CallKitRemoteInfo, необработанное значение идентификатора участника отображается по умолчанию.

Назначьте значение для displayName настройки отображаемого имени вызывающего объекта. Значение, указанное в CallKitRemoteInfo том, как оно отображается в журнале последней телефонной связи.

Также назначьте cxHandle значение. Это то, что приложение получает при обратном вызове этого контакта.

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)

Указание сведений о получателе звонка для входящих вызовов

Чтобы указать сведения о вызывающем вызове, создайте экземпляр CallKitOptions. Если вы не предоставляете CallKitOptions, необработанное значение идентификатора участника отображается по умолчанию.

Назначьте значение для provideRemoteInfo настройки отображаемого имени вызывающего объекта. Значение, указанное в CallKitRemoteInfo том, как оно отображается в журнале последней телефонной связи.

Также назначьте cxHandle значение. Это то, что приложение получает при обратном вызове этого контакта.

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
}

Настройка поставщиков

При необходимости предоставьте CXProviderConfiguration экземпляр CallKitOptions. Дополнительные сведения см. в документации разработчика Apple по CXProviderConfiguration.

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

Настройка звукового сеанса

Настройте звуковой сеанс для вызова перед размещением или принятием входящих вызовов и перед возобновлением вызова, который находится на удержании. Дополнительные сведения см. в документации разработчика Apple по 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
}

Включение CallKit

Чтобы включить CallKit, создайте экземпляр CallKitOptions и предоставьте его 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 удержания и возобновления работы для CallKit, интегрированный в приложение

Для CallKit, встроенного в приложение hold , и resume управления состоянием вызова.

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

Следующие шаги