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