Développer une application innovante grâce au NFC

Blog des développeurs d'applications Windows 8

Indications sur la conception d'applications de style Metro pour Windows 8, par l'équipe d'ingénierie de Windows 8

Développer une application innovante grâce au NFC

  • Comments 0

Le NFC (Near Field Communication) est une technologie émergente de communication sans fil en champ proche. Grâce à sa portée très précise de l'ordre de 2 cm, les utilisateurs peuvent mettre physiquement en contact deux appareils pour envoyer et recevoir des contenus. Cette opération vous permet de sélectionner quelque chose (ou quelqu'un) très rapidement. Le principe est non seulement rapide, mais aussi très facile à comprendre. Dès lorsque vous avez vu comment fonctionne cette technologie, vous avez tout compris : pas besoin de lire le moindre manuel !

Imaginons par exemple que vous regardez des photos avec une amie et qu'elle souhaite télécharger vos images. Grâce à la technologie NFC, il vous suffit de mettre en contact votre appareil avec son PC pour lui envoyer les photos. Cet exemple est trop simpliste ? C'est possible, mais il montre bien à quel point il est facile de partager des contenus entre des appareils.

'Sur cette image, l'enceinte du Nokia 360 partage ses informations de couplage Bluetooth avec un Windows Phone

Figure 1 : sur cette image, l'enceinte du Nokia 360 partage ses informations de couplage Bluetooth
avec un Windows Phone

Comme les technologies Bluetooth ou Wi-Fi, le NFC est un protocole sans fil standard, défini par le NFC Forum. Votre PC doit posséder un émetteur-récepteur NFC. De nombreux PC Windows 8 intègrent directement des émetteurs-récepteurs NFC. Si votre PC ne possède pas d'équipement NFC, vous pouvez acquérir une clé NFC qui se branche directement à votre PC.

La technologie NFC offre des fonctionnalités vraiment formidables. Ainsi, les utilisateurs peuvent envoyer des photos par simple contact, mettre en contact leur appareil avec une carte pour commander un repas au restaurant, ou même mettre en contact deux appareils pour coupler un appareil Bluetooth. Bien que différents les uns des autres, ces scénarios ont un point commun : le « contact », qui vise à initier l'opération. La technologie NFC est utilisée sur des appareils très divers : PC, téléphones, enceintes, casques audio, écrans sans fil, etc., pour rendre plus intuitive la connexion d'un appareil à un autre. En outre, le NFC utilise également des étiquettes RFID, ces antennes passives, légères et très peu coûteuses qui peuvent stocker une quantité non négligeable de données et qui peuvent être collées à n'importe quel objet, y compris des affiches. Par exemple, on peut dès lors imaginer acheter un ticket de cinéma en mettant en contact le téléphone avec l'affiche du film ! Dans ce cas, on parle « d'étiquette NFC ». Nous examinerons un exemple très simple de mise en contact avec une étiquette NFC, pour présenter quelques-uns des principaux concepts de l'API NFC.

Commençons cependant par regarder de plus près en quoi consiste la mise en contact d'appareils.

Qu'est-ce qu'une mise en contact ?

Qu'il s'agisse de mettre en contact des appareils pour coupler une souris Bluetooth à un ordinateur ou pour partager des photos, il est indispensable de mettre en contact les appareils de la même manière pour tous les utilisateurs. Si nous savons tous à peu près de quoi il s'agit, en pratique la plupart des utilisateurs ne savent pas quoi faire lorsqu'ils doivent mettre en contact un PC avec un autre appareil. Voici quelques recommandations en la matière, qui permettent aux utilisateurs :

  1. De savoir où mettre en contact les appareils, en utilisant un repère visuel (parfois appelé « Approcher pour activer »), qui indique où se trouve l'antenne NFC. Le point de contact diffère selon le modèle de PC utilisé. Ainsi, pour une tablette, le point de contact peut se trouver au dos, tandis qu'il se trouvera plus vraisemblablement en face avant sur un tout-en-un. Voici à quoi ressemble le repère sur un PC Windows 8 compatible NFC :
    Repère « Approcher pour activer »

    Figure 2 : repère « Approcher pour activer »

  2. De savoir si les appareils communiquent entre eux : lors de la mise en contact, les utilisateurs doivent savoir si l'opération se passe comme prévu, même s'ils ne peuvent pas voir que les données sont en cours de transfert. Ainsi, Windows émet un son lorsque des appareils sont dans le champ de portée et communiquent les uns avec les autres.

Windows effectue cette opération automatiquement et vous n'avez donc pas à vous en préoccuper. Pour plus d'informations sur ces éléments d'expérience utilisateur, consultez la spécification Windows 8 Near Field Proximity Implementation (implémentation de la proximité en champ proche dans Windows 8). Maintenant que nous comprenons mieux le principe, examinons quelques scénarios très intéressants qui utilisent la technologie NFC.

Dans quels cas utiliser la technologie NFC ?

Utilisez le NFC lorsqu'un utilisateur doit sélectionner quelque chose ou quelqu'un dans votre application. Le NFC offre une solution intuitive pour sélectionner des éléments, solution qui s'avère souvent plus rapide (et plus amusante !) qu'une recherche manuelle. La mise en contact joue le rôle de déclencheur de l'expérience. Selon la nature de votre application, elle peut déclencher la réception d'une photo ou le lancement d'une liste de lecture. Une fois la mise en contact effectuée, il appartient à votre application de décider du comportement à adopter. Pour plus de simplicité, nous classons ce type d'expériences dans la catégorie « Approcher pour activer ».

Voici quelques exemples qui utilisent la technologie NFC pour sélectionner un élément dans une application. Grâce à une simple mise en contact, vous pouvez…

  • Obtenir des informations à partir d'une affiche : les étiquettes NFC sont des étiquettes RFID légères et peu coûteuses (entre 0,15 et 1 USD pièce, selon les coûts d'impression). Le fonctionnement est similaire à celui des codes QR, mais tout est plus simple et plus rapide. D'un point de vue ergonomique, il est ainsi plus facile de mettre en contact un appareil avec une étiquette plutôt que de prendre en photo un code-barres (en croisant les doigts pour que l'appareil photo trouve le bon angle). De plus en plus de fabricants intègrent des étiquettes à leurs affiches dans les lieux de passage particulièrement fréquentés (aéroports, stations de métro, arrêts de bus, etc.). Elles peuvent stocker entre 48 octets et 4 Ko de données. Vous pouvez programmer une étiquette afin qu'elle ouvre votre application sur une page spécifique.
  • Échanger des coordonnées : au lieu de dicter vos informations de contact à un ami en espérant qu'il ne fera pas d'erreur, il suffit de mettre en contact vos appareils pour échanger vos coordonnées. Comme dans le scénario ci-dessus, vous pouvez programmer vos coordonnées dans une carte de visite/étiquette NFC. Vous pouvez aussi échanger directement des coordonnées par le biais d'une application.
  • Écouter votre station de radio préférée : sur le chemin du travail, en voiture ou confortablement installé dans votre canapé, vous pouvez utiliser une étiquette pour démarrer l'écoute d'une station de radio. Vous pouvez même programmer différentes stations musicales sur différentes étiquettes : une étiquette pour vos séances de jogging, une autre pour la relaxation et une dernière pour vous endormir, par exemple.
  • Commander un menu dans un restaurant très fréquenté : au restaurant, vous devez parfois attendre très longtemps avant de pouvoir commander. Avec la technologie NFC, il suffit de mettre votre appareil en contact avec l'étiquette de votre table pour passer commande.
  • Jouer à un jeu multijoueur avec un ami : vous pouvez facilement jouer en réseau avec un ami à un jeu multijoueur tel que Battleship, Chess ou Scrabble, en mettant en contact les appareils. Une fois la mise en contact effectuée, la connexion est maintenue en mode hors-bande, offrant une portée plus grande et un meilleur débit (Bluetooth ou Wi-Fi Direct, par exemple).

Maintenant que vous comprenez sans doute mieux comment utiliser la technologie NFC, amusons-nous un peu en créant une application qui utilise les API de proximité (NFC) de Windows 8.

Comment mettre en œuvre la technologie NFC ?

Comme vous pouvez le constater, la technologie NFC facilite de nombreuses tâches quotidiennes pour l'utilisateur final. Prenons l'exemple du réglage d'une alarme. Je suis certain que nous avons tous au moins une fois mal réglé notre réveil pour le lendemain. Lorsqu'il est tard et que nous sommes fatigués, nous n'avons pas toujours les idées claires ! Avec le NFC, il vous suffit de mettre en contact votre appareil avec une étiquette préréglée, de confirmer, puis de vous endormir tranquillement, en étant certain d'être réveillé à l'heure. Pour aider les utilisateurs à accomplir cette tâche quotidienne, vous pourriez par exemple développer une application d'alarme élémentaire permettant aux utilisateurs de configurer une alarme en utilisant une étiquette NFC. Divisions le processus en deux scénarios :

  1. Configuration d'une alarme sur l'étiquette : les étiquettes NFC étant réutilisables, l'application peut permettre aux utilisateurs de programmer une alarme. Par exemple, un utilisateur peut avoir besoin de programmer différentes alarmes : une pour la semaine, une autre pour le week-end. Dans ce cas, on parle de « publication » de données sur une étiquette.
  2. Configuration d'une alarme à partir de l'étiquette : Dès lors qu'un utilisateur met son appareil en contact avec l'étiquette, l'application doit être ouverte pour confirmer la configuration de l'alarme. L'application peut ainsi être lancée avec un contexte ou des arguments.

L'API NFC offre plusieurs solutions pour parvenir au même résultat. Dans ce billet, je vais présenter la façon la plus simple de mettre en œuvre ce scénario.

Examinons le processus de configuration d'une alarme sur une étiquette NFC :

  1. Mario lance l'application d'alarme et définit une heure, par exemple 7 h. Pour l'instant, rien d'exceptionnel : la technologie NFC n'est pas utilisée.
  2. Mario sélectionne une option permettant de « Configurer l'alarme sur une étiquette NFC ». À cet instant, l'application appelle les API NFC afin de publier des informations sur l'émetteur-récepteur NFC, en particulier une chaîne d'identificateur d'application & 07:00. Les étiquettes NFC utilisent un format standardisé de messages, appelé NDEF (NFC Defined Exchange Format). Votre application n'a pas à gérer la mise en forme des données du message NDEF : Windows s'en occupe ! L'utilisateur peut alors mettre en contact son appareil avec l'étiquette NFC.
  3. Mario met en contact l'étiquette avec le PC, et l'application confirme la programmation de l'étiquette. Au moment de la mise en contact avec l'étiquette, il est important d'indiquer à l'utilisateur que l'application a bien programmé l'étiquette. Comme nous l'avons déjà évoqué, le fait de mettre en contact un PC avec une étiquette est un concept inconnu de la plupart des utilisateurs. La confirmation permet ainsi à l'utilisateur d'être certain que l'opération s'est bien déroulée. L'application sait qu'un message a été correctement transmis en s'inscrivant auprès d'un gestionnaire de message transmis.

Les API NFC se trouvent dans l'espace de noms Windows.Networking.Proximity. Elles sont utilisées à partir de l'étape 2, lorsque l'utilisateur sélectionne l'option permettant de « Configurer l'alarme sur une étiquette NFC ». Tout d'abord, l'application initialise un objet de proximité. L'objet de proximité est utilisé pour indiquer quand une étiquette (ou un appareil) se trouve à l'intérieur du champ de portée ou au contraire hors de portée. Nous ajoutons ensuite le gestionnaire d'événements DeviceArrival. Ce gestionnaire détecte à quel moment l'étiquette est mise en contact avec un appareil, ce qui signifie que nous pouvons commencer à écrire des données sur l'étiquette. Il est important de signaler aux utilisateurs à quel moment vous écrivez des informations sur une étiquette, pour qu'il ne sorte pas du champ de portée. Vous pouvez utiliser le même événement pour détecter quand un appareil de proximité est mis en contact.

L'extrait de code ci-dessous montre comment initialiser et ajouter un gestionnaire d'événements DeviceArrival.

JavaScript

var proximityDevice;

function initializeProximityDevice() {
proximityDevice = Windows.Networking.Proximity.ProximityDevice.getDefault();

if (proximityDevice) {
proximityDevice.addEventListener("devicearrived", proximityDeviceArrived);

}
else {
// No NFC radio on the PC, display an error message
}


function proximityDeviceArrived(device) {
// Let the user know we’re ‘Writing to Tag’

}
}

C#
private void InitializeProximityDevice()
{

Windows.Networking.Proximity.ProximityDevice proximityDevice;
proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null) {
proximityDevice.DeviceArrived += ProximityDeviceArrived;

}
else
{
// No NFC radio on the PC, display an error message
}
}

private void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
// Let the user know we’re ‘Writing to Tag’

}


Publions ensuite ces informations sur l'étiquette. L'application publie deux informations : une chaîne d'identificateur d'application, qui se compose d'un ID d'application et d'une plateforme d'application, ainsi que des arguments de lancement. Pour Windows 8, l'ID d'application est <nom de famille du package>!<ID d'application> et la plateforme d'application est « Windows ». Vous devez copier la valeur d'ID d'application qui figure dans l'attribut ID de l'élément Application du manifeste de package de votre application. L'argument de lancement est « 07:00 », c'est-à-dire l'heure définie par l'utilisateur. Appelons-le message.

Si l'application fonctionne sur plusieurs plateformes, Windows vous permet de publier d'autres ID d'application et plateformes d'application. Vous pouvez ainsi mettre en contact la même étiquette avec d'autres appareils compatibles NFC, par exemple un téléphone Windows Phone 8 ! Vous trouverez des informations supplémentaires sur les autres ID sur MSDN.

L'application publie les données sur l'étiquette en utilisant une méthode appelée publishBinaryMessage. Cette méthode accepte trois paramètres : messageType, message, ainsi qu'une fonction messageTransmittedHandler. Définissons le paramètre messageType sur « LaunchApp:WriteTag ». Ceci indique à Windows que votre application souhaite écrire des informations sur une étiquette NFC. Le message est celui que nous avons défini plus tôt (chaîne d'identification de l'application et arguments de lancement). Nous devons stocker le message sous forme de message binaire dans un tampon. La fonction messageTransmittedHandler assure l'inscription des rappels. Ainsi, votre application sait que le message a bien été écrit sur l'étiquette. Nous utiliserons cette fonction pour signaler à l'utilisateur que le message a bien été écrit sur l'étiquette et qu'il n'est plus nécessaire que l'étiquette reste dans le champ de portée.

Les messages continuent à être publiés jusqu'à ce que nous appelions la fonction StopPublishingMessage ou jusqu'à ce que l'objet ProximityDevice soit publié. Dans cet exemple, nous utilisons la fonction stop. PublishBinaryMessage renvoie un ID de publication. Nous utiliserons ce même ID de publication pour arrêter la publication du message sur l'émetteur-récepteur NFC.

L'extrait de code suivant montre comment écrire des données sur une étiquette NFC :

JavaScript

var proximityDevice;

function getAlarmTime(){

// Grab time set by the user, call this variable ‘Alarm’
return Alarm;

}

function publishLaunchApp() {
proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice) {
// The format of the app launch string is: "<args>\tWindows\t<AppName>".
// The string is tab or null delimited.

// The <args> string can be an empty string ("").
var launchArgs = getAlarmTime();

// The format of the AppName is: PackageFamilyName!PRAID.
var praid = "AlarmApp"; // The Application Id value from your package.appxmanifest.

var appName = Windows.ApplicationModel.Package.current.id.familyName + "!" + praid;

var launchAppMessage = launchArgs + "\tWindows\t" + appName;

var dataWriter = new Windows.Storage.Streams.DataWriter();
dataWriter.unicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.utf16LE;
dataWriter.writeString(launchAppMessage);
var launchAppPubId =
proximityDevice.publishBinaryMessage(
"LaunchApp:WriteTag",
dataWriter.detachBuffer(),
proximityWriteTagLaunchAppMessageTransmitCallback);

if (launchAppPubId != -1) {
// Stop publishing the message on NFC radio
proximityDevice.stopPublishingMessage(launchAppPubId);
}

}
}

function proximityWriteTagLaunchAppMessageTransmitCallback() {
// Inform the user that: the message has been successfully written to a tag & the tag no longer needs to be in range
}

C#
Windows.Networking.Proximity.ProximityDevice proximityDevice;

private string GetAlarmTime(){

// Grab time set by the user, call this variable ‘Alarm’
return Alarm;
}

private void PublishLaunchApp()
{
proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null)
{
// The format of the app launch string is: "<args>\tWindows\t<AppName>".
// The string is tab or null delimited.

// The <args> string can be an empty string ("").
string launchArgs = getAlarmTime();

// The format of the AppName is: PackageFamilyName!PRAID.
string praid = "MyAppId"; // The Application Id value from your package.appxmanifest.

string appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + praid;

string launchAppMessage = launchArgs + "\tWindows\t" + appName;

var dataWriter = new Windows.Storage.Streams.DataWriter();
dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
dataWriter.WriteString(launchAppMessage);
var launchAppPubId =
proximityDevice.PublishBinaryMessage(
"LaunchApp:WriteTag", dataWriter.DetachBuffer(),
proximityWriteTagLaunchAppMessageTransmitCallback);

if (launchAppPubId!= -1)
{
proximityDevice.StopPublishingMessage(launchAppPubId);
// Stop publishing the message on NFC radio
}

}
}

private void proximityWriteTagLaunchAppMessageTransmitCallback(
Windows.Networking.Proximity.ProximityDevice sender,
long messageId)
{
// Inform the user that: the message has been successfully written to a tag & the tag no longer needs to be in range
}

C'est tout ! Vous savez maintenant comment écrire des données sur une étiquette NFC à partir d'une application du Windows Store. Puisque la procédure est relativement simple, passons au scénario suivant et configurons une alarme à partir de l'étiquette. Examinons le processus permettant de lire une alarme à partir d'une étiquette NFC :
  1. Mario lit son écran d'accueil, rédige un courrier électronique, joue à un jeu ou utilise Windows, et réalise qu'il doit régler une alarme pour lundi matin. Il attrape son étiquette « Alarme semaine » et la met en contact avec son PC. Un toast s'affiche pour l'inviter à lancer son application Alarme. Pour le moment, Windows s'occupe de tout et votre application n'a pas encore été utilisée.
  2. Mario accepte. Votre application démarre et affiche un écran « Confirmer l'alarme ? » qui indique 7 h. Une fois le toast accepté par Mario, Windows transmet les arguments de lancement (comme ci-dessus) à votre application lors de l'activation. Nous désignons cette opération par le terme « lancement contextuel ». Cela revient à ouvrir votre application sur une page spécifique.
  3. Mario configure l'alarme. Cette opération est totalement classique et n'implique pas la technologie NFC.

Il est relativement simple d'obtenir les arguments de lancement auprès de l'étiquette NFC. L'application doit gérer un lancement contextuel à partir d'une étiquette NFC. Le lancement contextuel revient à ouvrir votre application sur une page spécifique. Nos arguments de lancement configurent l'alarme sur 7 h et votre application utilise cette information pour afficher l'alarme proposée. En outre, si jamais votre application n'est pas installée sur le PC, Windows invite Mario à installer votre application à partir du Windows Store, le tout de façon automatisée !

L'extrait de code suivant montre comment mettre en œuvre le lancement contextuel.

JavaScript

app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket") {
//do nothing here.
}
else {
// Use args.detail.arguments to parse out ’07.00’ string, and display to the user
}

args.setPromise(WinJS.UI.processAll());
}
}

C#
async protected override void OnLaunched(LaunchActivatedEventArgs args)
{
if (args.Arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket")
{
_isLaunchedByTap = true;
}
else
{
// Use args.Arguments to parse out ’07.00’ string, and display to the user

}
Window.Current.Activate();
}


Tout cela suffit pour que votre application prenne en charge la lecture des étiquettes NFC et l'écriture sur ces étiquettes : plutôt simple, pour un scénario vraiment innovant ! Avant de conclure, évoquons une bonne pratique : la gestion des erreurs.

Gestion des erreurs

Votre application est susceptible de rencontrer un certain nombre d'erreurs courantes.

  • L'étiquette mise en contact n'est pas au format NDEF. Windows 8 ne prend pas en charge la conversion automatique des étiquettes au format NDEF. Par conséquent, vous devez télécharger et installer un outil de mise en forme NDEF.
  • L'étiquette mise en contact est en lecture seule. Certaines étiquettes NFC peuvent être verrouillées en lecture seule (comme ces bonnes vieilles cassettes VHS).
  • L'étiquette mise en contact est trop petite et ne peut pas stocker toutes les données.
  • Le PC de l'utilisateur ne possède pas d'émetteur-récepteur NFC. Comme je l'ai expliqué au début de ce billet, la technologie NFC est encore émergente, mais son adoption à grande échelle est en cours. Pour savoir si un PC prend en charge les transferts de proximité, utilisez la méthode ProximityDevice.getDefault(). Elle renvoie la valeur NULL si aucun émetteur-récepteur radio n'est installé.

Une technologie aussi amusante qu'intuitive

La technologie NFC est enfin à la portée du grand public : Windows possède l'écosystème requis et une expérience utilisateur complète extrêmement bien conçue. Le potentiel de cette technologie est immense et devrait rendre les applications et les expériences utilisateur des appareils incroyablement interactives. Son fonctionnement est amusant et intuitif.

Le NFC est un domaine très vaste et nous publierons probablement d'autres billets de blog pour présenter d'autres fonctionnalités NFC mises en œuvre par des développeurs sur Windows 8.

Pour plus d'informations sur le NFC et les transferts de proximité, consultez les ressources ci-dessous.

Ressources

Merci !

Priya Dandawate
Chef de projet, Appareils et mise en réseau

Avec la participation de Max Morris, Marzena Makuta, Mike Loholt, Jake Sabulsky et Vishal Mhatre

  • Loading...
Leave a Comment
  • Please add 1 and 4 and type the answer here:
  • Post