إدارة الاتصالات

بدء عملية ربط

عند العثور على أجهزة قريبة، يمكن للمكتشف بدء الاتصالات. تشير رسالة الأشكال البيانية في المثال التالي يطلب الاتصال بالجهاز بمجرد من اكتشاف.

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

لا يتم إنشاء الاتصال بالكامل إلا عندما يقبل كلا الجانبين. إذا كانت إحدى أو يتم رفضهما، يتم تجاهل الاتصال.

يوضح المثالان أعلاه الاتصال الذي يتم قبوله تلقائيًا من قبل كليهما ولكن بناءً على حالة الاستخدام التي تستخدمها، قد ترغب في تقديم هذا الخيار إلى المستخدم بطريقة ما.