Verbindung initiieren
Wenn Geräte in der Nähe gefunden werden, kann der Entdecker Verbindungen herstellen. Im folgenden Beispiel wird eine Verbindung mit einem Gerät angefordert, sobald es erkannt wird.
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.
}
}
Je nach Anwendungsfall kann es sinnvoll sein, dem Nutzer stattdessen eine Liste der gefundenen Geräte anzuzeigen, damit er auswählen kann, mit welchen Geräten er eine Verbindung herstellen möchte.
Verbindung annehmen oder ablehnen
Nachdem der Discoverer eine Verbindung zu einem Werbetreibenden angefordert hat, wird der Werbetreibende über die Delegatmethode advertiser(_:didReceiveConnectionRequestFrom:with:connectionRequestHandler:) über die Verbindungsanfrage benachrichtigt.
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)
}
}
Sobald der Werbetreibende die Anfrage akzeptiert, werden beide Seiten benachrichtigt und müssen die Verbindung über die connectionManager(_:didReceive:from:verificationHandler:)-Delegatmethode bestätigen.
Es wird empfohlen, dass Ihre App die Verbindung mithilfe des Bestätigungscodes überprüft, der von der Delegatmethode bereitgestellt wird. So können Nutzer bestätigen, dass sie eine Verbindung zum gewünschten Gerät herstellen. Beide Geräte erhalten denselben Code, einen kurzen zufälligen String. Es liegt an dir, wie du ihn verifizierst. In der Regel wird das Token auf beiden Geräten angezeigt und die Nutzer werden aufgefordert, es manuell zu vergleichen und zu bestätigen, ähnlich wie bei einem Bluetooth-Kopplungsdialog.
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)
}
}
Die Verbindung wird erst hergestellt, wenn beide Seiten zugestimmt haben. Wenn eine oder beide Seiten die Verbindung ablehnen, wird sie verworfen.
Im vorherigen Beispiel wird die Verbindung von beiden Seiten automatisch akzeptiert. Je nach Anwendungsfall möchten Sie diese Auswahl jedoch möglicherweise dem Nutzer präsentieren.