ارتباطات را مدیریت کنید

یک اتصال را آغاز کنید

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

سویفت

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:) به تبلیغ‌کننده اطلاع داده می‌شود.

سویفت

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 connectionManager(_:didReceive:from:verificationHandler:) ارتباط را تأیید کنند.

توصیه می شود برنامه شما با استفاده از کد تأیید ارائه شده توسط روش نمایندگی، اتصال را تأیید کند. این روشی را فراهم می کند تا کاربران تأیید کنند که به دستگاه مورد نظر متصل هستند. به هر دو دستگاه کد یکسانی داده می شود که یک رشته تصادفی کوتاه است. این به شما بستگی دارد که تصمیم بگیرید چگونه آن را تأیید کنید. معمولاً این شامل نشان دادن توکن در هر دو دستگاه و درخواست از کاربران برای مقایسه و تأیید دستی است، شبیه به گفتگوی جفت شدن بلوتوث.

سویفت

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

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

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