Gestire le connessioni

Avvia una connessione

Quando vengono trovati dispositivi nelle vicinanze, il rilevatore può avviare le connessioni. L'esempio seguente richiede una connessione con un dispositivo non appena viene rilevato.

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.
  }
}

A seconda del caso d'uso, potresti voler mostrare all'utente un elenco dei dispositivi rilevati, consentendogli di scegliere a quali connettersi.

Accetta o rifiuta una connessione

Dopo che il discoverer ha richiesto una connessione a un advertiser, quest'ultimo viene informato della richiesta di connessione tramite il metodo delegato 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 volta che l'inserzionista accetta, entrambe le parti ricevono una notifica e devono verificare la connessione tramite il metodo delegato connectionManager(_:didReceive:from:verificationHandler:).

Ti consigliamo di verificare la connessione della tua app utilizzando il codice di verifica fornito dal metodo delegato. In questo modo, gli utenti possono confermare che si stanno connettendo al dispositivo previsto. A entrambi i dispositivi viene assegnato lo stesso codice, che è una breve stringa casuale; spetta a te decidere come verificarlo. In genere, questo comporta la visualizzazione del token su entrambi i dispositivi e la richiesta agli utenti di confrontare e confermare manualmente, in modo simile a una finestra di dialogo di accoppiamento 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 connessione viene stabilita completamente solo quando entrambe le parti hanno accettato. Se una o entrambe le parti rifiutano, la connessione viene ignorata.

L'esempio precedente mostra che la connessione viene accettata automaticamente da entrambi i lati, ma a seconda del caso d'uso potresti voler presentare questa scelta all'utente in qualche modo.