ניהול החיבורים

התחלת חיבור

כשנמצאים מכשירים בקרבת מקום, המגלה יכול ליזום חיבורים. בדוגמה הבאה אנחנו מבקשים חיבור למכשיר ברגע התגלתה.

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:) להענקת גישה.

מומלץ שהאפליקציה תאמת את החיבור באמצעות בקוד האימות שסופק על ידי השיטה להענקת גישה. היא מאפשרת המשתמשים מאשרים שהם מתחברים למכשיר המיועד. שני המכשירים לקבל את אותו הקוד, שהוא מחרוזת אקראית קצרה; אתה מחליט איך לאמת אותו. בדרך כלל הדבר כרוך בהצגת האסימון בשני המכשירים בקשה מהמשתמשים להשוות ולאשר אותם באופן ידני, בדומה להתאמת 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)
  }
}

החיבור נוצר באופן מלא רק אחרי ששני הצדדים מסכימים. אם רוצים או ששניהם דוחים, החיבור יבוטל.

הדוגמאות שלמעלה מראות את החיבור שמתקבל באופן אוטומטי על ידי שני המכשירים אבל בהתאם לתרחיש לדוגמה שלך ייתכן שתרצו להציג את הבחירה הזו בפני המשתמש באופן מסוים.