Zarządzaj połączeniami

Nawiązywanie połączenia

Po znalezieniu urządzeń w pobliżu wykrywacz może zainicjować połączenia. W poniższym przykładzie żądanie połączenia z urządzeniem jest wysyłane, gdy tylko zostanie ono wykryte.

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 urządzeniami chce się połączyć.

Akceptowanie i odrzucanie połączenia

Gdy urządzenie wykrywające poprosi o połączenie z reklamodawcą, reklamodawca zostanie powiadomiony o prośbie o połączenie za pomocą metody delegowania 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)
  }
}

Gdy reklamodawca zaakceptuje zaproszenie, obie strony zostaną powiadomione i będą musiały zweryfikować połączenie za pomocą metody przekazywania uprawnień connectionManager(_:didReceive:from:verificationHandler:).

Zalecamy, aby aplikacja weryfikowała połączenie za pomocą kodu weryfikacyjnego podanego przez metodę delegowaną. Dzięki temu użytkownicy mogą potwierdzić, że łączą się z właściwym urządzeniem. Na obu urządzeniach wyświetla się ten sam kod, który jest krótkim, losowym ciągiem znaków. To od Ciebie zależy, jak go zweryfikujesz. 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 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 nawiązane dopiero wtedy, gdy obie strony zaakceptują zaproszenie. Jeśli jedna lub obie strony odrzucą połączenie, zostanie ono odrzucone.

W poprzednim przykładzie połączenie jest automatycznie akceptowane przez obie strony, ale w zależności od przypadku użycia możesz w jakiś sposób przedstawić ten wybór użytkownikowi.