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

התחלת חיבור

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

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

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

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