Administrar conexiones

Inicia una conexión

Cuando se encuentran dispositivos cercanos, el descubierto 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 mostrar una lista de dispositivos descubiertos al usuario, lo que le permite elegir a qué dispositivos conectarse.

Aceptar o rechazar una conexión

Una vez que el descubierto solicita una conexión a un anunciante, el anunciante recibe una notificación de la solicitud a través del método de 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 ambos y debe verificar la conexión a través del método de delegado connectionManager(_:didReceive:from:verificationHandler:).

Te recomendamos que verifiques la conexión con el código de verificación que proporciona el método delegado. Esto permite que los usuarios confirmen si se conectan al dispositivo deseado. Ambos dispositivos reciben el mismo código, que es una string aleatoria y corta. Tú decides cómo verificarlo. Por lo general, esto implica mostrar el token en ambos dispositivos y pedirles a los usuarios que comparen y confirmen manualmente, de manera similar a un diálogo de vinculación por 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 aceptan. Si uno o ambos rechazan, la conexión se descarta.

En los ejemplos anteriores, se muestra que la conexión es aceptada automáticamente por ambos lados, pero, según tu caso de uso, es posible que quieras presentar esta opción al usuario de alguna manera.