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

Синхронизация времени устройства

Синхронизируйте внутренние часы подключённого устройства с текущим временем. Этот способ подходит, когда не требуется передавать конкретную дату.

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

Перед синхронизацией времени устройства убедитесь, что:

  • Устройство подключено и находится в стабильном состоянии.
  • Устройство поддерживает протокол DeviceInfoAPI.

Справочник API

Фреймворк

AIBuds.xcframework

Импорт

В файлах, где используется SDK, импортируйте основной фреймворк:

Swift
import AIBuds

Протокол

Метод syncDeviceTime объявлен в DeviceInfoAPI. Этот протокол наследуется от базового протокола API устройства.

Swift
/// The protocol for device information related API.
protocol DeviceInfoAPI: DeviceAPI {
    /// Synchronizes the device time with the current time.
    /// - Parameters:
    ///   - completion: A closure that is called when the operation completes.
    ///     - success: `true` if the operation was successful; otherwise `false`.
    ///     - statusCode: The status code returned by the device. `nil` if the operation failed.
    ///     - error: An `NSError` object that describes the error that occurred, or `nil` if the operation was successful.
    func syncDeviceTime(_ completion: AIBudsStatusCodeCompletionHandler?)
}

Метод экземпляра

Синхронизирует время устройства с текущим временем.

Swift
/// Synchronizes the device time with the current time.
/// - Parameters:
///   - completion: A closure that is called when the operation completes.
///     - success: `true` if the operation was successful; otherwise `false`.
///     - statusCode: The status code returned by the device. `nil` if the operation failed.
///     - error: An `NSError` object that describes the error that occurred, or `nil` if the operation was successful.
func syncDeviceTime(_ completion: AIBudsStatusCodeCompletionHandler?)

Параметры

ПараметрТипОписание
completionAIBudsStatusCodeCompletionHandler?Необязательный обработчик, вызываемый после завершения операции.

Параметры обратного вызова:

ИмяТипОписание
successBool / BOOLtrue, если операция выполнена успешно; иначе false.
statusCodeNSNumber?Код состояния, возвращённый устройством. Согласно документации SDK, при ошибке значение равно nil.
errorNSError?Сведения об ошибке при неудачной операции; иначе nil.

Возвращаемое значение

Метод не возвращает значение напрямую. Результат передаётся обработчику завершения.

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

Swift
import AIBuds

final class DeviceManager {

    /// The connected device
    weak var device: DeviceConvertible?

    /// Synchronizes the connected device with the current time
    func synchronizeDeviceTime() {
        guard let device = device as? DeviceInfoAPI else {
            print("Device does not support time synchronization")
            return
        }

        device.syncDeviceTime { success, statusCode, error in
            if !success {
                print(
                    "Time synchronization failed: "
                        + (error?.localizedDescription ?? "Unknown error")
                )
                return
            }

            print(
                "Time synchronized successfully. Status code: " + (statusCode?.stringValue ?? "N/A")
            )
        }
    }
}

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

Обработчик завершения сообщает результат синхронизации:

  1. Считайте операцию завершённой только после проверки success.
  2. Если success равно false, сведения о причине доступны в error.
  3. Если доступен statusCode, сохраняйте его для диагностики или обработки особенностей устройства.
  4. Не полагайтесь на конкретный код ошибки или состояния, если он не задокументирован для данного устройства.

Рекомендации

  1. Проверяйте соответствие протоколу: перед вызовом метода убедитесь, что устройство поддерживает DeviceInfoAPI.

  2. Вызывайте после подключения: синхронизируйте время только после подключения и готовности устройства.

  3. Обрабатывайте все значения: проверяйте success, statusCode и error, а не только error.

  4. Обновляйте UI в главной очереди: выполняйте вызванные завершением обновления UIKit в главной очереди.

Примечания

  • syncDeviceTime не принимает целевое значение Date; если дату требуется передать явно, используйте setDeviceTime(to:completion:).
  • Публичный API описывает синхронизацию с текущим временем, но не определяет правила преобразования UTC.
  • Поддержка синхронизации времени зависит от модели устройства и версии прошивки.