Iniciar uma conexão
Quando dispositivos por perto 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 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 recusar uma conexão
Depois que o descobridor solicita uma conexão com um anunciante, o anunciante
é notificado sobre a 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 aceitar, os dois lados serão notificados e precisarão verificar a
conexão usando o 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 permite que os usuários confirmem que estão se conectando ao dispositivo pretendido. Os dois dispositivos recebem o mesmo código, que é uma string curta e aleatória. Cabe a você decidir como fazer a verificação. Normalmente, isso envolve mostrar o token nos dois dispositivos e pedir que os usuários comparem e confirmem manualmente, de forma 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 só é totalmente estabelecida quando os dois lados aceitam. Se um ou ambos rejeitarem, a conexão será descartada.
O exemplo anterior mostra a conexão sendo aceita automaticamente por ambos os lados, mas, dependendo do seu caso de uso, talvez você queira apresentar essa escolha ao usuário de alguma forma.