启动连接
发现附近的设备时,发现器可以发起连接。通过 下例在连接到设备后立即请求与其建立连接 。
Swift
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:)
委托方法。
Swift
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:)
的连接
委托方法。
建议您的应用使用 通过 delegate 方法提供的验证码。这样,您就可以 用户确认自己连接的是目标设备。这两种设备都是 即一个简短的随机字符串;由您决定 验证方法。这通常需要在两台设备上显示令牌 要求用户手动比较并确认,类似于蓝牙配对 对话框。
Swift
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)
}
}
只有在双方都接受的情况下,双方才会完全建立连接。如果有 或两者都拒绝,则连接会被丢弃。
上面的示例显示了这两个服务器自动接受该连接 但根据您的使用场景,您可以向 在某种程度上为用户提供了