Перейти к основному содержимому

Обработка дистанционного спуска

Получайте события дистанционного спуска через DeviceDelegate, выполняйте нужное действие камерой приложения и передавайте результат устройству.

Предварительные условия

  • Устройство подключено и поддерживает DeviceRemoteShutterAPI.
  • В приложении задан NSCameraUsageDescription и запрошен доступ к камере.
  • Приложение управляет AVCaptureSession и самостоятельно реализует съёмку.

Реализация с помощью AI

Разработка с AI

Реализуйте этот сценарий с AI

Используйте официальный навык «Реализация удалённого затвора AIBuds» и адаптируйте сценарий к приложению.

Прочитайте и выполните инструкции https://docs-aibuds.github.io/ru/skills/implement-aibuds-remote-shutter. Используйте этот навык, чтобы реализовать «Реализация удалённого затвора AIBuds» в данном iOS-проекте и проверить результат.
Открыть официальный навык

Справочник API

Протокол

Swift
/// The protocol for device remote shutter API.
protocol DeviceRemoteShutterAPI: DeviceAPI {
    /// Syncs the app’s real-time remote-shutter response state to the device after the device triggers remote shutter.
    /// - Parameters:
    ///   - state: The real-time remote-shutter response state to sync to the device.
    ///   - completion: A closure that is called when the operation completes.
    ///     - success: `true` if the operation was successful; otherwise `false`.
    ///     - error: An `NSError` object that describes the error that occurred, or `nil` if the operation was successful.
    func syncRemoteShutterStateToDevice(
        _ state: RemoteShutterState,
        completion: AIBudsCompletionHandler?
    )
}

См. syncRemoteShutterStateToDevice в справочнике API.

Обратный вызов делегата

Swift
/// Callback when remote shutter event received
/// - Parameters:
///   - device: the device
///   - event: the remote shutter event
optional func device(
    _ device: DeviceConvertible,
    didReceiveRemoteShutterEvent event: RemoteShutterEvent
)

Примеры использования

В примере детали работы камеры вынесены в локальные методы, чтобы поток событий SDK оставался понятным.

Swift
func device(
    _ device: DeviceConvertible,
    didReceiveRemoteShutterEvent event: RemoteShutterEvent
) {
    guard let remoteShutter = device as? DeviceRemoteShutterAPI else { return }

    switch event {
    case .enter:
        prepareAppCamera { ready in
            let state: RemoteShutterState =
                ready
                ? .enteredPhotoMode
                : .exitedOrUnableToEnter
            remoteShutter.syncRemoteShutterStateToDevice(state, completion: nil)
        }
    case .capture:
        captureAppPhoto { success in
            remoteShutter.syncRemoteShutterStateToDevice(
                success ? .photoSuccess : .photoFailed,
                completion: nil
            )
        }
    case .exit:
        stopAppCamera()
        remoteShutter.syncRemoteShutterStateToDevice(
            .exitedOrUnableToEnter,
            completion: nil
        )
    case .unknown:
        break
    }
}

Обработка ошибок

Передавайте .photoFailed, если съёмка не удалась из-за отсутствия разрешения, недоступного хранилища или ошибки камеры. Передавайте .exitedOrUnableToEnter, если приложение не смогло войти в режим фото или вышло из него.