[SWIFT] Nouveau dans iOS14, Interaction à proximité

Une vérification rapide de Near by Interaction, une nouvelle fonctionnalité d'iOS 14.

Environnement éprouvé

À peu près ce que c'est

Framework ajouté à partir du SDK iOS14.

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

Cela permet d'identifier et d'interagir avec les appareils à proximité en utilisant des identifiants / distances / directions.

Conditions d'utilisation

Vous ne pouvez pas simplement utiliser iOS14 (qui devrait sortir à l'automne 2020), et il existe une limitation selon laquelle vous ne pouvez l'utiliser qu'avec un iPhone équipé d'une puce U1. Depuis septembre 2020, il ne peut être utilisé que sur les terminaux de la série iPhone 11 (11, 11 Pro, 11 Pro Max).

Si vous acceptez de partager la position / les identifiants avec les appareils à proximité, une interaction est possible.

Qu'est-ce qu'une puce U1?

Ultra Wide Band (UWB) = Une puce qui peut utiliser la communication sans fil appelée radio ultra large bande. Cette technologie de communication était à l'origine utilisée à des fins industrielles et militaires, mais il semble que ce soit la première fois pour obtenir un produit de consommation. Il semble que la version de sortie pour le moment ne soit utilisée que pour accélérer AirDrop, mais est-elle utilisée pour la coopération avec une étiquette de prévention des objets perdus ou pour l'utilisation de clés de voiture?

Cas d'utilisation de la documentation Apple

NIイメージ1

Source de l'image: https://developer.apple.com/documentation/nearbyinteraction

Comment utiliser le cadre d'interaction à proximité

Utilisez des serveurs, Bluetooth, communication P2P (connectivité multipoint), etc. pour interagir avec les appareils à proximité. Chaque appareil crée une NISession et utilise le réseau ci-dessus pour échanger des jetons de découverte ( NIDiscoveryToken). Lors de la réception du jeton de l'autre partie, l'application lance en fait une session Near by Interaction (NI). La puce U1 de l'appareil gère l'échange de données, permettant à NI de fournir en permanence une position relative aux autres appareils.

let niSession = NISession()

Lors de la création d'une instance d'une session, l'utilisateur est susceptible d'être invité à obtenir une autorisation.

Une fois que vous avez le jeton de découverte de la personne avec laquelle vous communiquez, vous pouvez démarrer la session.

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

Lorsqu'une session est exécutée, le jeton de l'autre partie défini par NI est vérifié, et s'il est valide, session (_: didUpdate:) of NISessionDelegate peut être appelé pour obtenir des informations sur la position relative avec le partenaire de communication.

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

extension ViewController: NISessionDelegate {
    func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) {
        //NINearbyObject contient des informations sur le partenaire de communication
    }
}

La méthode déléguée sera également notifiée lorsque la session est interrompue ou désactivée en raison du mouvement en arrière-plan de l'application. Utilisé pour le redémarrage et la gestion des erreurs.

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

Contenu de NINearbyObject

Jetez un œil à l'intérieur avec Xcode.

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

Contenu assez minime. Vous pouvez obtenir les trois données suivantes.

  1. Le jeton de découverte de l'autre partie
  2. Distance de l'autre partie
  3. Direction de l'autre partie

Le type simd_float3 utilisé pour les données de direction est comme un vecteur tridimensionnel. Il semble qu'il soit souvent utilisé dans ARKit et SceneKit. Est-ce parce que le jeton de découverte peut être obtenu parce qu'il est nécessaire d'identifier l'autre partie lors de la communication avec plusieurs autres parties?

Restrictions opérationnelles

Selon la documentation officielle, les restrictions suivantes sont nécessaires pour fournir un comportement précis:

On dit que l'autre terminal sera vérifié avec l'image ci-dessous.

NIイメージ2

Source de l'image: https://developer.apple.com/documentation/nearbyinteraction/initiating_and_maintaining_a_session

Déplacez-le en fait (à l'aide d'un simulateur)

J'ai démarré deux simulateurs et échangé des jetons de découverte entre eux via une communication P2P pour acquérir des données d'informations de position relatives. Bien que la distance de NINearbyObject puisse être obtenue sans problème, la direction renvoie toujours nil. À ce propos, cela peut être inutile si vous ne le déplacez pas sur la machine réelle.

nearby.gif

Sommaire

Je pense qu'il serait intéressant de l'utiliser pour un événement de rencontre ou une réunion pour une application de rencontre. D'un autre côté, il y a beaucoup de restrictions, j'ai donc l'impression que cela n'a pas encore atteint le stade pratique. Je me demande quel type de cas d'utilisation va sortir (ou ne sera-t-il pas utilisé du tout?).

référence

Recommended Posts

Nouveau dans iOS14, Interaction à proximité
Nouveautés de Java 8
Nouveautés de Java 9,10,11
Modifications de l'emplacement principal dans iOS 14
Quoi de neuf dans Apache Camel 2.19.0