התחלת חיבור
כשהמכשיר מוצא מכשירים בקרבת מקום, הוא יכול ליזום חיבורים. בדוגמה הבאה, האפליקציה מבקשת להתחבר למכשיר ברגע שהיא מזהה אותו.
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)
}
}
אחרי שהמפרסם מאשר את הבקשה, שני הצדדים מקבלים הודעה וצריכים לאמת את החיבור באמצעות ה-delegate method של connectionManager(_:didReceive:from:verificationHandler:).
מומלץ שהאפליקציה תאמת את החיבור באמצעות קוד האימות שסופק על ידי שיטת ה-delegate. כך המשתמשים יכולים לוודא שהם מתחברים למכשיר הנכון. שני המכשירים מקבלים את אותו קוד, שהוא מחרוזת אקראית קצרה. אתם יכולים להחליט איך לאמת אותו. בדרך כלל, התהליך הזה כולל הצגה של האסימון בשני המכשירים ובקשה מהמשתמשים להשוות ולאשר באופן ידני, בדומה לתיבת דו-שיח של התאמה ב-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)
}
}
החיבור נוצר באופן מלא רק אחרי ששני הצדדים מאשרים אותו. אם אחד מהם או שניהם דוחים את הבקשה, החיבור נמחק.
בדוגמה הקודמת, החיבור מתקבל באופן אוטומטי על ידי שני הצדדים, אבל בהתאם לתרחיש לדוגמה, יכול להיות שתרצו להציג את האפשרות הזו למשתמש בדרך כלשהי.