Zarządzaj połączeniami

Nawiązywanie połączenia

Gdy urządzenia w pobliżu zostaną znalezione, osoba, która je wykryła, może zainicjować połączenia. W przykładzie poniżej żądanie połączenia z urządzeniem jest wysyłane od razu po jego wykryciu.

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

W zależności od przypadku użycia możesz zamiast tego wyświetlić użytkownikowi listę wykrytych urządzeń, aby mógł wybrać, z którymi z nich chce się połączyć.

Akceptowanie i odrzucanie połączenia

Gdy odkrywca poprosi o połączenie z reklamodawcą, reklamodawca otrzyma powiadomienie o prośbie o połączenie za pomocą metody advertiser(_:didReceiveConnectionRequestFrom:with:connectionRequestHandler:)delegate.

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

Gdy reklamodawca zaakceptuje połączenie, obie strony otrzymają powiadomienie i będą musiały zweryfikować połączenie za pomocą metody delegowania connectionManager(_:didReceive:from:verificationHandler:).

Zalecamy, aby aplikacja weryfikowała połączenie za pomocą kodu weryfikacyjnego podanego przez metodę delegowania. Dzięki temu użytkownicy mogą potwierdzić, że łączą się z odpowiednim urządzeniem. Na obu urządzeniach wyświetli się ten sam kod, czyli krótki losowy ciąg znaków. Ty decydujesz, jak go zweryfikować. Zwykle polega to na wyświetleniu tokena na obu urządzeniach i poproszeniu użytkowników o ręczne porównanie i potwierdzenie, podobnie jak w przypadku okna dialogowego parowania 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)
  }
}

Połączenie zostanie w pełni nawiązane dopiero wtedy, gdy obie strony zaakceptują zaproszenie. Jeśli jedna lub obie osoby odrzucą połączenie, zostanie ono odrzucone.

W przykładach powyżej połączenie jest automatycznie akceptowane przez obie strony, ale w zależności od przypadku użycia możesz w jakiś sposób przedstawić użytkownikowi tę opcję.