مدیریت کردن اتصال‌ها

راه‌اندازی اتصال

وقتی دستگاه‌های اطراف پیدا شوند، کاوشگر می‌تواند اتصال را شروع کند. مثال زیر به‌محض شناسایی دستگاه، درخواست اتصال به آن را می‌دهد.

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

اتصال فقط زمانی کاملاً برقرار می‌شود که هر دو طرف آن را پذیرفته باشند. اگر یکی یا هر دو رد کنند، اتصال لغو می‌شود.

مثال قبلی نشان می‌دهد که اتصال به‌طور خودکار توسط هر دو طرف پذیرفته می‌شود، اما بسته به مورد استفاده‌تان ممکن است بخواهید این انتخاب را به نحوی به کاربر ارائه دهید.