ตั้งค่า Connection Manager
เครื่องมือจัดการการเชื่อมต่อจะจัดการเหตุการณ์การเชื่อมต่อทั้งหมด และเป็นอินเทอร์เฟซสำหรับ การโอนข้อมูลระหว่างอุปกรณ์ ข้อกำหนดสำหรับโฆษณา และการค้นพบ
ก่อนอื่น คุณควรเลือกรหัสบริการเพื่อระบุแอปโดยไม่ซ้ำกัน ขอแสดงความนับถือ
ให้ใช้ชื่อแพ็กเกจของแอป (เช่น com.example.app
)
จากนั้นให้เลือกกลยุทธ์สำหรับกรณีการใช้งานของคุณ
กลยุทธ์ที่คุณเลือกจะเป็นตัวกำหนดโทโพโลยีการเชื่อมต่อสำหรับแอปของคุณ (.cluster
.star
.pointToPoint
)
เริ่มต้นเครื่องมือจัดการการเชื่อมต่อและใช้เมธอดการมอบสิทธิ์
Swift
import NearbyConnections
class Example {
let connectionManager: ConnectionManager
init() {
connectionManager = ConnectionManager(serviceID: "com.example.app", strategy: .cluster)
connectionManager.delegate = self
}
}
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)
}
func connectionManager(
_ connectionManager: ConnectionManager, didReceive data: Data,
withID payloadID: PayloadID, from endpointID: EndpointID) {
// A simple byte payload has been received. This will always include the full data.
}
func connectionManager(
_ connectionManager: ConnectionManager, didReceive stream: InputStream,
withID payloadID: PayloadID, from endpointID: EndpointID,
cancellationToken token: CancellationToken) {
// We have received a readable stream.
}
func connectionManager(
_ connectionManager: ConnectionManager,
didStartReceivingResourceWithID payloadID: PayloadID,
from endpointID: EndpointID, at localURL: URL,
withName name: String, cancellationToken token: CancellationToken) {
// We have started receiving a file. We will receive a separate transfer update
// event when complete.
}
func connectionManager(
_ connectionManager: ConnectionManager,
didReceiveTransferUpdate update: TransferUpdate,
from endpointID: EndpointID, forPayload payloadID: PayloadID) {
// A success, failure, cancelation or progress update.
}
func connectionManager(
_ connectionManager: ConnectionManager, didChangeTo state: ConnectionState,
for endpointID: EndpointID) {
switch state {
case .connecting:
// A connection to the remote endpoint is currently being established.
case .connected:
// We're connected! Can now start sending and receiving data.
case .disconnected:
// We've been disconnected from this endpoint. No more data can be sent or received.
case .rejected:
// The connection was rejected by one or both sides.
}
}
}
เริ่มโฆษณา
หากต้องการเริ่มโฆษณา ให้เริ่มต้นผู้ลงโฆษณา และใช้วิธีการมอบสิทธิ์
และโทรหา startAdvertising(using:)
Swift
import NearbyConnections
class Example {
let connectionManager: ConnectionManager
let advertiser: Advertiser
init() {
connectionManager = ConnectionManager(serviceID: "com.example.app", strategy: .cluster)
connectionManager.delegate = self
advertiser = Advertiser(connectionManager: connectionManager)
advertiser.delegate = self
// The endpoint info can be used to provide arbitrary information to the
// discovering device (e.g. device name or type).
advertiser.startAdvertising(using: "My Device".data(using: .utf8)!)
}
}
extension Example: AdvertiserDelegate {
func advertiser(
_ advertiser: Advertiser, didReceiveConnectionRequestFrom endpointID: EndpointID,
with context: Data, connectionRequestHandler: @escaping (Bool) -> Void) {
// Accept or reject any incoming connection requests. The connection will still need to
// be verified in the connection manager delegate.
connectionRequestHandler(true)
}
}
เริ่มต้น Discovery
ในการเริ่มค้นหา ให้เริ่มต้นเครื่องมือค้นพบ และใช้วิธีการมอบสิทธิ์
และโทรหา startDiscovery()
Swift
import NearbyConnections
class Example {
let connectionManager: ConnectionManager
let discoverer: Discoverer
init() {
connectionManager = ConnectionManager(serviceID: "com.example.app", strategy: .cluster)
connectionManager.delegate = self
discoverer = Discoverer(connectionManager: connectionManager)
discoverer.delegate = self
discoverer.startDiscovery()
}
}
extension Example: DiscovererDelegate {
func discoverer(
_ discoverer: Discoverer, didFind endpointID: EndpointID, with context: Data) {
// An endpoint was found.
}
func discoverer(_ discoverer: Discoverer, didLose endpointID: EndpointID) {
// A previously discovered endpoint has gone away.
}
}