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

Отключение устройства

Операция отключения устройства удаляет связь между устройствами. Эта операция полезна, когда вам нужно разорвать подключение к устройству навсегда или подготовить его для подключения к другому устройству.

Предварительные требования​

Перед выполнением отключения убедитесь:

  • Устройство подключено и находится в стабильном состоянии
  • Завершена все необходимая синхронизация данных
  • Пользователь понимает, что после отключения устройство отключится

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

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

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

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

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

API-справочник​

Фреймворк​

AIBuds.xcframework

Импорт​

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

Swift
import AIBuds

Протокол​

Метод unpair определён в следующем протоколе. Протокол наследуется от базового протокола API устройства.

Swift
/// Defines common device operations including unpairing
protocol DeviceCommonAPI: DeviceAPI {
    /// Unpairs the device
    /// - Parameters:
    ///   - completion: A completion callback that returns the operation result
    ///     - success: `true` if the operation succeeds, `false` otherwise
    ///     - error: An `NSError` object describing the error that occurred, or `nil` if the operation succeeds
    func unpair(_ completion: AIBudsCompletionHandler?)
}

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

Отключает устройство от подключенного устройства.

iOS 15.0+

Swift
/// Unpairs the device
/// - Parameters:
///   - completion: A completion callback that returns the operation result
///     - success: `true` if the operation succeeds, `false` otherwise
///     - error: An `NSError` object describing the error that occurred, or `nil` if the operation succeeds
func unpair(_ completion: AIBudsCompletionHandler?)

Параметры​

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

Параметры callback:

ИмяТипОписание
successBooltrue, если операция прошла успешно, иначе false
errorNSError?Содержит информацию об ошибке, если операция не удалась, иначе nil

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

Этот метод не возвращает значение напрямую. Результат предоставляется через callback.

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

Swift
import AIBuds

class DeviceManager {

    /// Connected device
    weak var device: DeviceConvertible?

    /// Unpairs the connected device
    func unpairDevice() {
        // Check if the device supports the unpair protocol
        guard let device = device as? DeviceCommonAPI else {
            print("Device does not support unpairing")
            return
        }

        // Execute unpair with completion handler
        device.unpair { [weak self] success, error in
            // Handle failure case
            if !success {
                let errorMessage = {
                    if let error = error {
                        return "\(error)"
                    }
                    return "Unknown error"
                }()
                print("Unpair failed: \(errorMessage)")
                return
            }
            // Handle success case
            print("Unpair completed successfully")
        }
    }
}

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

Callback может вернуть следующие типы ошибок:

Домен ошибок: AIBudsSDK.ErrorDomain

Код ошибкиОписаниеРекомендация по восстановлению
.deviceNotConnectedУстройство не подключеноУбедитесь, что устройство спарено и подключено
.bleCommandExecFailedDueToTimeoutИстекло время ожидания операцииПовторить операцию
.deviceBusyУстройство занято другой операциейДождитесь завершения выполняющихся операций
.deviceNotSupportОтключение не поддерживается этим устройствомПроверить возможности устройства перед вызовом

Лучшие практики​

  1. Подтверждение у пользователя: Всегда отображайте диалог подтверждения перед началом отключения, так как эта операция отключит устройство и потребует повторного подключения.

  2. Обработка фонового выполнения: При обновлении UI заверните callback в блок DispatchQueue.main.async.

  3. Слабая ссылка на self: Используйте [weak self] в callback, чтобы избежать утечек памяти.

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

  5. Обработка отключения: После успешного отключения устройства корректно обработайте его отключение и предоставьте рекомендации по повторному подключению.

Ограничения платформы​

Ограничение системного Bluetooth в iOS​

В iOS системные настройки Bluetooth не позволяют приложениям программно отключать Bluetooth-устройства. Это ограничение на уровне системы, установленное Apple по соображениям безопасности и контроля пользователей.

Что это означает:

  • После вызова unpair iOS по-прежнему будет хранить информацию о BLE-связывании устройства
  • Устройство может автоматически переподключиться при перезапуске приложения или включении Bluetooth
  • Устройство останется видимым в iOS Настройки > Bluetooth

Рекомендуемые инструкции для пользователя:

При реализации функции отключения в приложении iOS вы должны направлять пользователей к ручному отключению через настройки iOS:

  1. Для полного отключения: Направьте пользователя в Настройки > Bluetooth, найдите устройство, нажмите значок "i", затем выберите "Забыть это устройство"
  2. Обеспечьте четкую обратную связь в UI: Покажите пользователям инструкции или глубокую ссылку на настройки Bluetooth при запросе на отключение
  3. Отключение на уровне приложения: Метод unpair по-прежнему отключает устройство с точки зрения вашего приложения, но системное связывание сохраняется
Swift
/// Prompt user to unpair from iOS Settings
func promptUserToUnpairFromSettings() {
    // Show alert with instructions
    let alert = UIAlertController(
        title: "Unpair Device",
        message:
            "To completely unpair the device, go to Settings > Bluetooth, find your device, tap the 'i' icon next to it, then select 'Forget This Device'.",
        preferredStyle: .alert
    )
    alert.addAction(
        UIAlertAction(title: "Open Settings", style: .default) { _ in
            // Deep link to Bluetooth settings
            if let url = URL(string: "App-prefs:Bluetooth") {
                UIApplication.shared.open(url)
            }
        })
    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))

    // Present alert
    if let viewController = UIApplication.shared.windows.first?.rootViewController {
        viewController.present(alert, animated: true)
    }
}

Примечания​

  • После выполнения команды отключения устройство отключится
  • Для повторного подключения устройства потребуется повторная синхронизация
  • Все данные о подключении будут удалены с обоих устройств
  • Любые выполняющиеся операции будут прерваны
  • Отключение может занять несколько секунд