[SWIFT] Neu in iOS14, Interaktion in der Nähe

Eine schnelle Überprüfung von Near by Interaction, einer neuen Funktion in iOS 14.

Versuchte Umgebung

Ungefähr was es ist

Framework aus iOS14 SDK hinzugefügt.

Locate and interact with nearby devices using identifiers, distance, and direction.

Dies ermöglicht die Identifizierung und Interaktion mit Geräten in der Nähe mithilfe von Kennungen / Entfernungen / Richtungen.

Nutzungsbedingungen

Sie können nicht nur iOS14 verwenden (das im Herbst 2020 veröffentlicht werden soll), und es gibt eine Einschränkung, dass Sie es nur mit einem iPhone verwenden können, das mit einem U1-Chip ausgestattet ist. Ab September 2020 kann es nur auf Terminals der iPhone 11-Serie (11, 11 Pro, 11 Pro Max) verwendet werden.

Wenn Sie zustimmen, Standort / Kennung mit Geräten in der Nähe zu teilen, ist eine Interaktion möglich.

Was ist ein U1-Chip?

Ultra Wide Band (UWB) = Ein Chip, der drahtlose Kommunikation verwenden kann und als Ultra Wide Band Radio bezeichnet wird. Diese Kommunikationstechnologie wurde ursprünglich für industrielle und militärische Zwecke verwendet, aber es scheint das erste Mal zu sein, dass ein Verbraucherprodukt in Betrieb genommen wird. Es scheint, dass die Release-Version derzeit nur zur Beschleunigung von AirDrop verwendet wird. Wird sie jedoch für die Zusammenarbeit mit einem Tag zur Verhinderung verlorener Gegenstände oder für die Verwendung von Autoschlüsseln verwendet?

Anwendungsfall von Apple Documentation

NIイメージ1

Bildquelle: https://developer.apple.com/documentation/nearbyinteraction

Verwendung des Frameworks für die Interaktion in der Nähe

Verwenden Sie Server, Bluetooth, P2P-Kommunikation (Multipeer-Konnektivität) usw., um mit Geräten in der Nähe zu interagieren. Jedes Gerät erstellt eine "NISession" und verwendet das oben genannte Netzwerk, um Erkennungstoken ("NIDiscoveryToken") auszutauschen. Nach Erhalt des Tokens von der anderen Partei initiiert die App tatsächlich eine NI-Sitzung (Near by Interaction). Der U1-Chip des Geräts verwaltet den Datenaustausch, sodass NI kontinuierlich relative Positionen mit anderen Geräten bereitstellen kann.

let niSession = NISession()

Beim Erstellen einer Instanz einer Sitzung wird der Benutzer wahrscheinlich zur Erlaubnis aufgefordert.

Sobald Sie das Erkennungstoken der Person haben, mit der Sie kommunizieren, können Sie die Sitzung starten.

let token: NIDiscoveryToken = ...
let config = NINearbyPeerConfiguration(peerToken: token)
niSession.run(config)

Wenn eine Sitzung ausgeführt wird, wird das von NI festgelegte Token der anderen Partei überprüft, und wenn es gültig ist, kann "session (_: didUpdate :)" von "NISessionDelegate" aufgerufen werden, um Informationen über die relative Position mit dem Kommunikationspartner zu erhalten.

class ViewController: UIViewController {
    func ...() {
        niSession.delegate = self
    }
}

extension ViewController: NISessionDelegate {
    func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) {
        //NINearbyObject enthält Informationen zum Kommunikationspartner
    }
}

Die Delegate-Methode wird auch benachrichtigt, wenn die Sitzung aufgrund der Hintergrundbewegung der App unterbrochen oder deaktiviert wird. Wird zum Neustart und zur Fehlerbehandlung verwendet.

NISessionDelegate

public protocol NISessionDelegate : NSObjectProtocol {
    optional func session(_ session: NISession, didRemove nearbyObjects: [NINearbyObject], reason: NINearbyObject.RemovalReason)

    optional func sessionWasSuspended(_ session: NISession)

    optional func sessionSuspensionEnded(_ session: NISession)

    optional func session(_ session: NISession, didInvalidateWith error: Error)
}

Inhalt von NINearbyObject

Schauen Sie mit Xcode hinein.

@available(iOS 14.0, *)
open class NINearbyObject : NSObject, NSCopying, NSSecureCoding {
    @NSCopying open var discoveryToken: NIDiscoveryToken { get }
}

@available(iOS 14.0, *)
@available(macOS, unavailable)
extension NINearbyObject {

    public var distance: Float? { get }

    public var direction: simd_float3? { get }
}

Ziemlich minimaler Inhalt. Sie können die folgenden drei Daten erhalten.

  1. Das Entdeckungstoken der anderen Partei
  2. Entfernung zur anderen Partei
  3. Richtung der anderen Partei

Der für Richtungsdaten verwendete Typ "simd_float3" ähnelt einem dreidimensionalen Vektor. Es scheint, dass es häufig in ARKit und SceneKit verwendet wird. Liegt es daran, dass das Discovery-Token abgerufen werden kann, weil bei der Kommunikation mit mehreren anderen Parteien die andere Partei identifiziert werden muss?

Betriebsbeschränkungen

Gemäß der offiziellen Dokumentation sind die folgenden Einschränkungen erforderlich, um ein genaues Verhalten zu gewährleisten:

Es wird gesagt, dass das andere Terminal mit dem unten gezeigten Bild überprüft wird.

NIイメージ2

Bildquelle: https://developer.apple.com/documentation/nearbyinteraction/initiating_and_maintaining_a_session

Bewegen Sie es tatsächlich (mit einem Simulator)

Ich startete zwei Simulatoren und tauschte Entdeckungs-Token über P2P-Kommunikation miteinander aus, um relative Positionsinformationsdaten zu erhalten. Obwohl der Abstand von "NINearbyObject" problemlos ermittelt werden konnte, gibt die Richtung immer Null zurück. Dies kann nutzlos sein, wenn Sie es nicht auf der tatsächlichen Maschine bewegen.

nearby.gif

Zusammenfassung

Ich denke, es wäre interessant, es für ein Meet-up-Event oder ein Meeting für eine Dating-App zu verwenden. Auf der anderen Seite gibt es viele Einschränkungen, so dass ich den Eindruck habe, dass es noch nicht das praktische Stadium erreicht hat. Ich frage mich, welche Art von Anwendungsfall herauskommen wird (oder wird er überhaupt nicht verwendet?).

Referenz

Recommended Posts

Neu in iOS14, Interaktion in der Nähe
Was ist neu in Java 8?
Was ist neu in Java 9,10,11
Änderungen des Kernstandorts in iOS 14
Was ist neu in Apache Camel 2.19.0?