Управление подключениями

Установить соединение

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

Быстрый

extension Example: DiscovererDelegate {
  func discoverer(
    _ discoverer: Discoverer, didFind endpointID: EndpointID, with context: Data) {
    // An endpoint was found. We request a connection to it. The endpoint info can be used
    // to provide arbitrary information to the discovering device (e.g. device name or type).
    discoverer.requestConnection(to: endpointID, using: "My Device".data(using: .utf8)!)
  }

  func discoverer(_ discoverer: Discoverer, didLose endpointID: EndpointID) {
    // A previously discovered endpoint has gone away.
  }
}

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

Принять или отклонить соединение

После того, как исследователь запросил соединение с рекламодателем, рекламодатель уведомляется о запросе на соединение с помощью метода делегата advertiser(_:didReceiveConnectionRequestFrom:with:connectionRequestHandler:) .

Быстрый

extension Example: AdvertiserDelegate {
  func advertiser(
    _ advertiser: Advertiser, didReceiveConnectionRequestFrom endpointID: EndpointID,
    with context: Data, connectionRequestHandler: @escaping (Bool) -> Void) {
    // Call with `true` to accept or `false` to reject the incoming connection request.
    connectionRequestHandler(true)
  }
}

Как только рекламодатель соглашается, обе стороны получают уведомление и должны проверить соединение с помощью метода делегата connectionManager(_:didReceive:from:verificationHandler:) .

Рекомендуется, чтобы ваше приложение проверяло соединение с помощью кода подтверждения, предоставленного методом делегата. Это позволяет пользователям подтвердить, что они подключаются к предполагаемому устройству. Оба устройства получают один и тот же код, представляющий собой короткую случайную строку; Вам решать, как это проверить. Обычно это включает отображение токена на обоих устройствах и просьбу пользователей вручную сравнить и подтвердить, аналогично диалоговому окну сопряжения Bluetooth.

Быстрый

extension Example: ConnectionManagerDelegate {
  func connectionManager(
    _ connectionManager: ConnectionManager, didReceive verificationCode: String,
    from endpointID: EndpointID, verificationHandler: @escaping (Bool) -> Void) {
    // Optionally show the user the verification code. Your app should call this handler
    // with a value of `true` if the nearby endpoint should be trusted, or `false`
    // otherwise.
    verificationHandler(true)
  }
}

Соединение полностью устанавливается только тогда, когда обе стороны его приняли. Если один или оба отклоняются, соединение разрывается.

В приведенных выше примерах показано, что соединение автоматически принимается обеими сторонами, но в зависимости от вашего варианта использования вы можете каким-то образом представить этот выбор пользователю.