Gérer les connexions

Lancer une connexion

Lorsque des appareils à proximité sont détectés, le détecteur peut lancer des connexions. L'exemple suivant demande une connexion avec un appareil dès qu'il est détecté.

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

Selon votre cas d'utilisation, vous pouvez également afficher une liste des appareils détectés à l'utilisateur, ce qui lui permet de choisir les appareils auxquels se connecter.

Accepter ou refuser une connexion

Une fois que le détecteur a demandé une connexion à un annonceur, l'annonceur est informé de la demande de connexion via la méthode déléguée 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)
  }
}

Une fois que l'annonceur a accepté, les deux parties sont informées et doivent vérifier la connexion via la méthode déléguée connectionManager(_:didReceive:from:verificationHandler:).

Nous vous recommandons de vérifier la connexion à l'aide du code de validation fourni par la méthode déléguée. Cela permet aux utilisateurs de confirmer qu'ils se connectent à l'appareil souhaité. Les deux appareils reçoivent le même code, qui est une courte chaîne aléatoire. C'est à vous de décider comment le vérifier. En règle générale, cela implique d'afficher le jeton sur les deux appareils et de demander aux utilisateurs de le comparer et de le confirmer manuellement, comme dans une boîte de dialogue d'association 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 connexion n'est entièrement établie que lorsque les deux parties ont accepté. Si l'une des parties ou les deux refusent, la connexion est supprimée.

Les exemples ci-dessus montrent que la connexion est automatiquement acceptée par les deux parties, mais selon votre cas d'utilisation, vous pouvez présenter ce choix à l'utilisateur d'une manière ou d'une autre.