شروع یک اتصال
وقتی دستگاههای نزدیک پیدا میشوند، کاشف میتواند اتصال را آغاز کند. مثال زیر به محض کشف یک دستگاه، درخواست اتصال به آن را میدهد.
سویفت
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.
}
}
بسته به مورد استفاده شما، ممکن است بخواهید لیستی از دستگاههای کشف شده را به کاربر نمایش دهید و به آنها اجازه دهید انتخاب کنند که به کدام دستگاهها متصل شوند.
پذیرش یا رد اتصال
پس از اینکه کاشف درخواست اتصال به یک تبلیغکننده را داد، تبلیغکننده از طریق متد delegate به نام 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)
}
}
به محض اینکه تبلیغکننده (advertiser) درخواست را پذیرفت، هر دو طرف مطلع میشوند و باید اتصال را از طریق متد delegate به connectionManager(_:didReceive:from:verificationHandler:) تأیید کنند.
توصیه میشود برنامه شما با استفاده از کد تأیید ارائه شده توسط متد delegate، اتصال را تأیید کند. این روشی را فراهم میکند تا کاربران تأیید کنند که به دستگاه مورد نظر متصل شدهاند. به هر دو دستگاه کد یکسانی داده میشود که یک رشته تصادفی کوتاه است؛ تصمیم گیری در مورد نحوه تأیید آن به شما بستگی دارد. معمولاً این شامل نمایش توکن در هر دو دستگاه و درخواست از کاربران برای مقایسه و تأیید دستی است، مشابه یک کادر محاورهای جفت شدن بلوتوث.
سویفت
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)
}
}
اتصال تنها زمانی به طور کامل برقرار میشود که هر دو طرف آن را پذیرفته باشند. اگر یکی یا هر دو آن را رد کنند، اتصال از بین میرود.
مثالهای بالا نشان میدهند که اتصال به طور خودکار توسط هر دو طرف پذیرفته میشود، اما بسته به مورد استفاده شما، ممکن است بخواهید این انتخاب را به نحوی به کاربر ارائه دهید.