Administra conexiones

Cómo iniciar 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 prefieras mostrarle al usuario una lista de los dispositivos detectados 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 a un anunciante, se le notifica al anunciante sobre 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, ambas partes reciben una notificación y deben verificar la conexión a través del método de 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 para 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. Tú decides cómo verificarlo. Por lo general, esto implica mostrar el token en ambos dispositivos y pedirles a los usuarios que lo 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 ambos lados aceptan. Si uno o ambos rechazan la conexión, se descarta.

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