Quản lý đường kết nối

Bắt đầu kết nối

Khi tìm thấy thiết bị ở gần, người khám phá có thể bắt đầu kết nối. Chiến lược phát hành đĩa đơn ví dụ sau đây yêu cầu kết nối với một thiết bị ngay khi thiết bị đó được kết nối phát hiện.

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 nên hiển thị danh sách thiết bị nào cho người dùng, cho phép họ chọn thiết bị cần kết nối.

Chấp nhận hoặc từ chối kết nối

Sau khi người khám phá đã yêu cầu kết nối với một nhà quảng cáo, nhà quảng cáo đó sẽ được thông báo về yêu cầu kết nối qua advertiser(_:didReceiveConnectionRequestFrom:with:connectionRequestHandler:) uỷ quyền.

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)
  }
}

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 thông tin kết nối qua connectionManager(_:didReceive:from:verificationHandler:) uỷ quyền.

Bạn nên xác minh kết nối ứng dụng bằng cách sử dụng mã xác minh do phương thức ủy quyền cung cấp. Đây là cách để cho phép người dùng xác nhận rằng họ đang kết nối với thiết bị dự định. Cả hai thiết bị đều cho cùng một mã, đó là một chuỗi ngắn ngẫu nhiên; điều này tuỳ thuộc vào bạn quyết định cách xác minh tài khoản. Thông thường, hoạt động 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ư 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 đầy đủ sau khi cả hai bên đều chấp nhận. Nếu có hoặc từ chối cả hai, kết nối đều bị huỷ.

Các ví dụ ở trên cho thấy kết nối được cả hai tự động chấp nhận nhưng tuỳ thuộc vào trường hợp sử dụng của mình, bạn có thể phải đưa ra lựa chọn này cho người dùng theo một cách nào đó.