จัดการการเชื่อมต่อ

เริ่มการเชื่อมต่อ

เมื่อพบอุปกรณ์ที่อยู่ใกล้เคียง ผู้ค้นพบจะเริ่มการเชื่อมต่อได้ ตัวอย่างต่อไปนี้จะขอเชื่อมต่อกับอุปกรณ์ทันทีที่ค้นพบ

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

เมื่อผู้ลงโฆษณายอมรับ ทั้ง 2 ฝ่ายจะได้รับการแจ้งเตือนและต้องยืนยันการเชื่อมต่อผ่านconnectionManager(_:didReceive:from:verificationHandler:) วิธีการมอบสิทธิ์

เราขอแนะนำให้แอปยืนยันการเชื่อมต่อโดยใช้รหัสยืนยันที่ได้จากเมธอด Delegate ซึ่งจะช่วยให้ผู้ใช้ยืนยันได้ว่ากำลังเชื่อมต่อกับอุปกรณ์ที่ต้องการ อุปกรณ์ทั้ง 2 เครื่องจะได้รับรหัสเดียวกัน ซึ่งเป็นสตริงสุ่มแบบสั้นๆ โดยคุณจะเลือกวิธียืนยันได้เอง โดยปกติแล้ว การดำเนินการนี้จะเกี่ยวข้องกับการแสดงโทเค็นบนอุปกรณ์ทั้ง 2 เครื่องและขอให้ผู้ใช้เปรียบเทียบและยืนยันด้วยตนเอง ซึ่งคล้ายกับกล่องโต้ตอบการจับคู่บลูทูธ

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

การเชื่อมต่อจะเสร็จสมบูรณ์ก็ต่อเมื่อทั้ง 2 ฝ่ายยอมรับเท่านั้น หากฝ่ายใดฝ่ายหนึ่งหรือทั้ง 2 ฝ่ายปฏิเสธ ระบบจะยกเลิกการเชื่อมต่อ

ตัวอย่างก่อนหน้านี้แสดงให้เห็นว่าทั้ง 2 ฝ่ายยอมรับการเชื่อมต่อโดยอัตโนมัติ แต่คุณอาจต้องการแสดงตัวเลือกนี้แก่ผู้ใช้ในลักษณะใดลักษณะหนึ่ง ทั้งนี้ขึ้นอยู่กับ Use Case ของคุณ