Gérer les connexions

Établir une connexion

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

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 afficher à la place une liste des appareils à l'utilisateur, ce qui lui permet de choisir les appareils auxquels se connecter.

Accepter ou refuser une connexion

Une fois que l'utilisateur a demandé à se connecter à un annonceur, celui-ci est informé de la demande de connexion via advertiser(_:didReceiveConnectionRequestFrom:with:connectionRequestHandler:) déléguée.

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 accepte, les deux parties en sont informées et doivent vérifier connexion via connectionManager(_:didReceive:from:verificationHandler:) déléguée.

Nous vous recommandons de vérifier la connexion à l'aide de la propriété de validation fourni par la méthode déléguée. Cela permet de laisser Les utilisateurs confirment qu'ils se connectent au bon appareil. Les deux appareils sont avec ce même code, qui est une courte chaîne aléatoire. c'est à vous de décider comment le vérifier. En général, cela implique d’afficher le jeton sur les deux appareils et demander aux utilisateurs de comparer et de confirmer manuellement, comme avec une 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 un ou les deux, la connexion est supprimée.

Les exemples ci-dessus montrent que la connexion est automatiquement acceptée par les deux côtés, mais selon votre cas d'utilisation, vous souhaiterez peut-être présenter ce choix utilisateur d'une manière ou d'une autre.