بدء عملية ربط
عند العثور على أجهزة مجاورة، يمكن للجهاز المكتشِف بدء الاتصالات. يطلب المثال التالي الاتصال بجهاز بمجرد اكتشافه.
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:)
المفوَّض.
ننصحك بأن يتحقّق تطبيقك من الاتصال باستخدام رمز التحقّق الذي توفّره طريقة التفويض. ويوفّر ذلك طريقة تتيح للمستخدمين التأكّد من أنّهم يتصلون بالجهاز المطلوب. يتم منح كلا الجهازين الرمز نفسه، وهو عبارة عن سلسلة عشوائية قصيرة، ويعود إليك قرار كيفية التحقّق منه. يتضمّن ذلك عادةً عرض الرمز المميّز على كلا الجهازَين وطلب مقارنته وتأكيده يدويًا من المستخدمين، على غرار مربّع حوار الإقران عبر البلوتوث.
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)
}
}
يتم إنشاء الاتصال بالكامل فقط عندما يقبل كلا الطرفين. إذا رفض أحدهما أو كلاهما، يتم تجاهل الاتصال.
يوضّح المثال السابق قبول الاتصال تلقائيًا من كلا الطرفين، ولكن بناءً على حالة الاستخدام، قد ترغب في تقديم هذا الخيار للمستخدم بطريقة ما.