Gestisci connessioni

Avviare una connessione

Quando vengono trovati dispositivi nelle vicinanze, il rilevatore può avviare le connessioni. L'esempio seguente richiede una connessione a 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 di dispositivi rilevati per consentire a quest'ultimo di scegliere i dispositivi a cui connettersi.

Accettare o rifiutare una connessione

Dopo aver richiesto una connessione a un inserzionista, quest'ultimo viene avvisato della richiesta di connessione tramite il metodo advertiser(_:didReceiveConnectionRequestFrom:with:connectionRequestHandler:)delegato.

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 connectionManager(_:didReceive:from:verificationHandler:)delegato.

È consigliabile che l'app verifichi la connessione utilizzando il codice di verifica fornito dal metodo del delegato. In questo modo gli utenti possono confermare che si stanno collegando al dispositivo previsto. A entrambi i dispositivi viene assegnato lo stesso codice, che è una breve stringa casuale; sta a te decidere come verificarlo. In genere, ciò comporta mostrare il token su entrambi i dispositivi e chiedere agli utenti di confrontare e confermare manualmente, in modo simile a una finestra di dialogo per l'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 è stabilita solo quando entrambe le parti hanno accettato. Se uno o entrambi rifiutano, la connessione viene ignorata.

Gli esempi precedenti mostrano la connessione accettata automaticamente da entrambi i lati, ma a seconda del caso d'uso potrebbe essere opportuno presentare questa scelta all'utente.