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