Inicia una conexión
Cuando se encuentran dispositivos cercanos, el descubridor puede iniciar conexiones. En el siguiente ejemplo, se solicita una conexión con un dispositivo en cuanto se descubre.
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.
}
}
Según tu caso de uso, es posible que quieras mostrarle al usuario una lista de dispositivos descubiertos para que elija a cuáles conectarse.
Cómo aceptar o rechazar una conexión
Después de que el descubridor solicita una conexión con un anunciante, este recibe una notificación de la solicitud de conexión a través del método delegado 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)
}
}
Una vez que el anunciante acepta, se notifica a ambas partes y deben verificar la conexión a través del método delegado connectionManager(_:didReceive:from:verificationHandler:).
Se recomienda que tu app verifique la conexión con el código de verificación que proporciona el método delegado. Esto proporciona una forma de permitir que los usuarios confirmen que se están conectando al dispositivo previsto. Ambos dispositivos reciben el mismo código, que es una cadena aleatoria corta. Depende de ti decidir cómo verificarlo. Por lo general, esto implica mostrar el token en ambos dispositivos y pedirles a los usuarios que los comparen y confirmen de forma manual, de manera similar a un diálogo de vinculación de Bluetooth.
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)
}
}
La conexión se establece por completo solo cuando ambas partes la aceptaron. Si uno o ambos rechazan, se descarta la conexión.
En el ejemplo anterior, se muestra que ambos lados aceptan la conexión automáticamente, pero, según tu caso de uso, es posible que quieras presentar esta opción al usuario de alguna manera.