Bắt đầu kết nối
Khi tìm thấy thiết bị ở gần, thiết bị khám phá có thể bắt đầu kết nối. Ví dụ sau đây yêu cầu kết nối với một thiết bị ngay khi phát hiện thấy thiết bị đó.
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.
}
}
Tuỳ thuộc vào trường hợp sử dụng, bạn có thể muốn hiển thị danh sách các thiết bị được phát hiện cho người dùng, cho phép họ chọn thiết bị để kết nối.
Chấp nhận hoặc từ chối kết nối
Sau khi thiết bị khám phá yêu cầu kết nối với một thiết bị quảng cáo, thiết bị quảng cáo sẽ được thông báo về yêu cầu kết nối thông qua phương thức uỷ quyền 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)
}
}
Sau khi nhà quảng cáo chấp nhận, cả hai bên đều được thông báo và phải xác minh mối liên kết thông qua connectionManager(_:didReceive:from:verificationHandler:)phương thức uỷ quyền.
Bạn nên xác minh kết nối của ứng dụng bằng cách sử dụng mã xác minh do phương thức uỷ quyền cung cấp. Điều này giúp người dùng xác nhận rằng họ đang kết nối với thiết bị mong muốn. Cả hai thiết bị đều được cung cấp cùng một mã, là một chuỗi ngẫu nhiên ngắn; bạn có thể quyết định cách xác minh mã này. Thông thường, việc này bao gồm việc hiển thị mã thông báo trên cả hai thiết bị và yêu cầu người dùng so sánh và xác nhận theo cách thủ công, tương tự như hộp thoại ghép nối Bluetooth.
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)
}
}
Kết nối chỉ được thiết lập hoàn toàn khi cả hai bên đều chấp nhận. Nếu một hoặc cả hai bên từ chối, kết nối sẽ bị huỷ.
Ví dụ trước cho thấy kết nối được cả hai bên tự động chấp nhận, nhưng tuỳ thuộc vào trường hợp sử dụng, bạn có thể muốn trình bày lựa chọn này cho người dùng theo một cách nào đó.