Zarządzaj połączeniami

Rozpoczynanie połączenia

Po wykryciu urządzeń znajdujących się w pobliżu urządzenie może zainicjować połączenia. W poniższym przykładzie żądanie połączenia z urządzeniem jest wykrywane natychmiast po 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 wyświetlić listę wykrytych urządzeń, aby umożliwić im wybór urządzeń, z którymi mają się połączyć.

Akceptowanie i odrzucanie połączeń

Po wykryciu powiązania z reklamodawcą reklamodawca jest informowany o tej prośbie za pomocą metody advertiser(_:didReceiveConnectionRequestFrom:with:connectionRequestHandler:)przekazywania.

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 zostaną o tym powiadomione i będą musiały zweryfikować połączenie za pomocą metody connectionManager(_:didReceive:from:verificationHandler:) przekazania.

Zalecamy, aby aplikacja weryfikowała połączenie za pomocą kodu weryfikacyjnego podanego w delegacji. Dzięki temu użytkownicy mogą się upewnić, że łączą się z odpowiednim urządzeniem. Oba urządzenia otrzymują ten sam kod, czyli krótki, losowy ciąg znaków. To Ty decydujesz, jak chcesz go zweryfikować. Zwykle wymaga to wyświetlenia tokena na obu urządzeniach oraz poproszenia użytkowników o ręczne porównanie i potwierdzenie – podobnie jak w przypadku okna 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 jest w pełni nawiązane dopiero po zaakceptowaniu przez obie strony. Jeśli jedno lub oba połączenia zostaną odrzucone, połączenie zostanie odrzucone.

Powyższe przykłady pokazują, że połączenie jest akceptowane automatycznie przez obie strony, ale w zależności od przypadku możesz zdecydować o udostępnieniu użytkownikowi wyboru.