Установить соединение
Когда обнаруживаются находящиеся поблизости устройства, обнаруживающий может инициировать соединения. В следующем примере запрашивается соединение с устройством сразу после его обнаружения.
Быстрый
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)
}
}
Соединение считается полностью установленным только после того, как обе стороны подтвердят согласие. Если одна или обе стороны отклонят согласие, соединение разрывается.
Приведенные выше примеры показывают, что соединение автоматически принимается обеими сторонами, но в зависимости от вашего сценария использования вы можете захотеть каким-либо образом предоставить пользователю этот выбор.