Gerenciar conexões

Iniciar uma conexão

Quando dispositivos próximos são encontrados, o descobridor pode iniciar conexões. O exemplo a seguir solicita uma conexão com um dispositivo assim que ele é descoberto.

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

Dependendo do seu caso de uso, talvez você queira mostrar uma lista de dispositivos descobertos ao usuário, permitindo que ele escolha a quais dispositivos se conectar.

Aceitar ou rejeitar uma conexão

Depois que o descobridor solicita uma conexão a um anunciante, o anunciante é notificado da solicitação de conexão pelo 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)
  }
}

Depois que o anunciante aceita, os dois lados são notificados e precisam verificar a conexão pelo método delegado connectionManager(_:didReceive:from:verificationHandler:).

Recomendamos que seu app verifique a conexão usando o código de verificação fornecido pelo método delegado. Isso oferece uma maneira de permitir que os usuários confirmem que estão se conectando ao dispositivo pretendido. Os dois dispositivos recebem o mesmo código, que é uma string aleatória curta. Você decide como verificar. Normalmente, isso envolve mostrar o token nos dois dispositivos e pedir aos usuários que comparem e confirmem manualmente, semelhante a uma caixa de diálogo de pareamento 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)
  }
}

A conexão é totalmente estabelecida somente quando os dois lados aceitam. Se um ou ambos rejeitarem, a conexão será descartada.

Os exemplos acima mostram a conexão sendo aceita automaticamente pelos dois lados, mas, dependendo do seu caso de uso, talvez você queira apresentar essa opção ao usuário de alguma forma.