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

Сообщение о найденном iPhone

Обработайте инициированный устройством запрос поиска iPhone, управляйте сигналом на стороне iPhone и сообщите устройству, когда пользователь найдёт телефон.

Это обратный сценарий по отношению к поиску устройства: процесс запускает подключённое устройство, а звук, вибрацию и интерфейс для поиска iPhone реализует приложение.

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

Перед сообщением о найденном iPhone убедитесь, что:

  • Запросившее поиск устройство остаётся подключённым и готовым.
  • Приложение обрабатывает deviceDidRequestStartFindingPhone и deviceDidRequestStopFindingPhone либо соответствующие обратные вызовы SDKDelegate.
  • Устройство поддерживает FindPhoneStateReportingAPI.
  • После подтверждения пользователем приложение остановило индикацию на iPhone.

Справочник API

Фреймворк

AIBuds.xcframework

Импорт

Swift
import AIBuds

Протокол

Метод notifyPhoneFound объявлен в FindPhoneStateReportingAPI.

Swift
/// Reports to a connected device that its find-phone request has been resolved.
///
/// Find-phone is initiated by the device rather than by this API. Observe
/// `DeviceDelegate.deviceDidRequestStartFindingPhone(_:)` and
/// `DeviceDelegate.deviceDidRequestStopFindingPhone(_:)`, or the corresponding
/// `SDKDelegate` callbacks, to start and stop the app's phone-side alert.
///
/// After the user locates the phone, call `notifyPhoneFound(_:)` to notify the
/// requesting device. To make the connected device itself emit a locate
/// indication, use `DeviceFindAPI` instead.
public protocol FindPhoneStateReportingAPI: DeviceAPI {
    /// Notifies the connected device that the user has found the phone.
    ///
    /// Call this after handling a device-originated find-phone request and
    /// stopping the phone-side alert. The completion reports delivery and
    /// command processing; it does not represent a new find-phone request.
    /// - Parameters:
    ///   - completion: Called when command processing completes.
    ///     - success: `true` when the device accepted the report; otherwise,
    ///       `false`.
    ///     - error: The command or communication error, or `nil` on success.
    func notifyPhoneFound(_ completion: AIBudsCompletionHandler?)
}

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

Сообщает подключённому устройству, что пользователь нашёл iPhone.

Swift
/// Notifies the connected device that the user has found the phone.
///
/// Call this after handling a device-originated find-phone request and
/// stopping the phone-side alert. The completion reports delivery and
/// command processing; it does not represent a new find-phone request.
/// - Parameters:
///   - completion: Called when command processing completes.
///     - success: `true` when the device accepted the report; otherwise,
///       `false`.
///     - error: The command or communication error, or `nil` on success.
func notifyPhoneFound(_ completion: AIBudsCompletionHandler?)

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

Параметры

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

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

ИмяТипОписание
successBool / BOOLtrue, если устройство приняло сообщение о найденном iPhone; иначе false.
errorNSError?Ошибка команды или связи; при успехе — nil.

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

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

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

Обрабатывайте поступающие от устройства запросы запуска и остановки. Когда пользователь подтвердит, что iPhone найден, сначала остановите сигнал на телефоне, а затем сообщите результат устройству.

Swift
import AIBuds

final class FindPhoneCoordinator: NSObject, DeviceDelegate {
    private weak var requestingDevice: DeviceConvertible?

    func deviceDidRequestStartFindingPhone(_ device: DeviceConvertible) {
        requestingDevice = device
        DispatchQueue.main.async {
            self.startPhoneAlert()
        }
    }

    func deviceDidRequestStopFindingPhone(_ device: DeviceConvertible) {
        DispatchQueue.main.async {
            self.stopPhoneAlert()
        }
    }

    func userConfirmedPhoneFound() {
        stopPhoneAlert()

        guard let reporter = requestingDevice as? FindPhoneStateReportingAPI else {
            print("Device cannot receive a phone-found report")
            return
        }

        reporter.notifyPhoneFound { success, error in
            guard success else {
                print(
                    "Failed to report phone found: \(error?.localizedDescription ?? "Unknown error")"
                )
                return
            }
            print("Phone-found report accepted")
        }
    }
}

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

Не связывайте состояние сигнала на iPhone с доставкой отчёта. Останавливайте сигнал сразу по запросу устройства или подтверждению пользователя, а ошибку связи notifyPhoneFound показывайте без автоматического повторного запуска сигнала.

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

  1. Реагируйте на запросы устройства: запускайте индикацию на iPhone только после соответствующего вызова делегата.
  2. Управляйте поиском iPhone в приложении: реализуйте звук, вибрацию, разрешения, фоновое поведение и интерфейс.
  3. Сначала остановите сигнал: освободите локальные ресурсы оповещения до вызова notifyPhoneFound(_:).
  4. Сохраняйте запросившее устройство: отправляйте отчёт тому же подключённому устройству, которое запустило поиск.
  5. Обновляйте UI в главной очереди: направляйте работу UIKit из делегатов и обработчиков в главную очередь.

Примечания

  • notifyPhoneFound(_:) подтверждает завершение и не запускает поиск iPhone.
  • При запросе остановки от устройства приложение должно прекратить индикацию на iPhone. Это отдельное событие, не равное подтверждению пользователя о найденном телефоне.
  • Если приложение должно запустить индикацию на самом подключённом устройстве, используйте DeviceFindAPI.