utiliser des iBeacons avec Wallet

La technologie beacon (balise) d’Apple, iBeacon, permet de générer, sur iOS, des notifications sur l’écran de verrouillage lorsque le périphérique se trouve à proximité d’une balise. Cela, sans application additionnelle.

Il faut, pour cela, passer par l’application Wallet, installé par défaut sur iOS, et qui fait office de portefeuille numérique. On peut notamment ajouter à cette application des “passes”, qui peuvent être des cartes d’embarquement, de réduction, de fidélité, des billets d’entrée d’exposition ou de spectacle.

En utilisant la technologie PassKit d’apple, il est possible de générer un de ces passes, qui, si l’on renseigne l’id d’un message et qu’on l’associe à un message, afficher ce message sur l’écran de verrouillage du périphérique iOS lorsque celui-ci entre dans la zone de portée de la balise.

n.b. : Il faut bien noter que :

  • cette page ne concerne qu’iOS et iBeacon, et bien qu’on puisse imaginer que cela puisse être aussi utilisable sur android/EddyStone. Cela n’est pas traité ici.
  • il n’est possible de générer des notifications que sur l’écran de verrouillage du dispositif iOS
  • la notification est un court texte, et ne peut être une URL clicable (on peut toujours afficher une URL, mais cliquer dessus ne renverra pas sur un navigateur, ni quoi que ce soit)
  • cette documentation en traite pas de la mise en forme des passes, uniquement de leur génération. Pour la forme, se référer au Wallet Developer Guide

Prérequis

Il est à priori possible de générer des passes sans macOS ou Xcode. Ce sujet n’est pas traité ici.

Je vous recommande de créer un fichier numérique selon le modèle suivant afin de noter au fur et à mesure les informations nécéssaires pour le passe :

## informations générales

team id :
pass type id :

## beacons

### beacon 1

uuid :
major :
minor :

Étapes

  1. préparation de l’environnement de travail
    1. fichiers de travail
    2. Xcode
    3. signpass
    4. certificats
    5. beacon locator
    6. node.js
    7. éditeur de texte pour la programmation
  2. génération du passe
    1. récupération du team identifier et création du pass kit id
    2. création du passe
    3. signature et compression
    4. test du passe avec iOS Simulator
    5. déploiement via wifi

préparation de l’environnement de travail

Fichiers de travail

Apple fournit des exemple, modèles, ainsi que le logiciel signpass dans une archive qui accompagne le Wallet Developer Guide.

Attention ! Pour pouvoir télécharger depuis ces liens, il faut au préalable s’identifier sur developer.apple.com, faute de quoi les liens ne seront pas actifs !

Téléchargez et décompressez cette archive, qui contient :

Xcode

Attention, ce logiciel nécéssite un téléchargement de plusieurs gigaoctets !

Le logiciel Xcode va être utilisé pour compiler signpass, le logiciel de base fournit par Apple pour compresser et signer les passes, dont nous avons téléchargé le sources dans la partie précédente. Le logiciel iOS Simulator, fournit avec Xcode, nous permettra quant à lui de tester les passes avant déploiement.

Xcode peut être installé via l’application App Store.

Il peut être préférable de télécharger le programme d’installation sur les serveur d’Apple. On peut trouver les liens de différentes versions sur cette page.

Attention ! Pour pouvoir télécharger depuis ces liens, il faut au préalable s’identifier sur developer.apple.com, faute de quoi les liens ne seront pas actifs !

signpass

Nous allons maintenant compiler signpass à l’aide du logiciel Xcode, et l’installer.

Pour cela :

  1. ouvrir Xcode
  2. ouvrir le projet Xcode contenu dans le dossier signpass de l’archive téléchargée précédemment.
  3. compiler le logiciel en cliquant sur le symbole en haut à gauche de l’écran, ou en faisant le raccourci clavier ⌘B, ou encore en se rendant dans le menu supérieure Product et en cliquant sur Build.
  4. identifier le dossier de compilation en ouvrant l’organisateur (accessible via dans le menu supérieur via WindowOrganizer), puis en localisant l’entrée derived data et enfin en cliquant sur la flêche à droite du nom du dossier. Cela à pour effet d’ouvrir le dossier contenant les données dérivées du projet.
  5. ouvrir le dossier Products/Release/Debug. Celui-ci contient le logiciel signpass compilé.
  6. ouvrir le terminal (Celui-ci peut être trouvé dans /Applications/utilitaires).
  7. y taper sudo cp suivi d’une espace.
  8. Glisser-déposer l’utilitaire dans le terminal, ce qui aura pour effet d’ajouter à ce que précédemment tapé le chemin d’accès du programme compilé.
  9. ajouter une espace suivie de /usr/bin/signpass
  10. appuyez sur entrée. Votre mot de passe vous ait demandé. Tapez-le suivi de la touche entrée. Le mot de passe n’apparaît pas au fur et à mesure que vous tapez, cela est normal.

Signpass est maintenant installé sur votre ordinateur.

certificats

Pour pouvoir signer les passes, il sera nécessaire d’obtenir des certificats de la part d’Apple par le biais de votre compte Apple.

Pour que les certificats accordés par Apple soient reconnus par signpass, il faut que soit installé dans votre environnement de travail le certificat de la Apple Worldwide Developer Relations Certification Authority (WWDR) disponible sur cette page ou directement ici.

supprimer les certificats périmés

Il est probable que le certificat de la WWDR soir déjà installé sur votre ordinateur. Toutefois, il est possible qu’il s’agisse de la version périmée au 14 février 2016. Si c’est le cas, il vous faut obligatoirement supprimer ce certificat de votre trousseau d’accès, faute de quoi la procédure de signature des passes échouera et ceux-ci seront refusés par Wallet.

Pour supprimer un certificat périmé :

à compléter

installer un nouveau certificat

Dans le cas où une version non périmée du certificat de la WWRD ne serait pas déjà installée dans Trousseaux d’accès, il vous suffit de télécharger celui-ci ici (ou sur cette page), puis de double-cliquer sur celui-ci pour l’installer dans Trousseaux d’accès.

beacon locator

Après avoir utilisé l’application d’un fournisseur de beacons et m’être aperçu que les uuid fournis par celle-ci ne correspondait pas à ceux détecté par iOS, je vous propose d’utiliser le logiciel beacon locator pour android, lequel a fourni des uuid exploitables dans les passes.

installer f-droid

f-droid est un dépôt d’applications (comme Google Play ou App Store sur macOS) libres. Celui-ci permet d’installer l’application beacon locator, il est donc nécessaire de l’installer.

Pour installer f-droid :

  1. se rendre, avec son appareil android, sur f-droid.org et cliquer sur “download f-droid”.
  2. suivre le processus d’installation

installer beacon locator

Après avoir ouvert f-droid, rechercher le logiciel beacon locator, et lancer l’installation.

utiliser beacon locator

Après avoir lancé le bluetooth et la géolocalisation (ce qui est requis par android pour lancer des recherches sur des périphériques bluetooth low energy ou BLE), appuyer sur “scan”.

capture d'écran de beacon locator

Les éléments qui nous intéressent ici sont l’UUID (identifiant unique du beacon) et les champs major et minor. Notez-les, nous les réutiliseront plus tard.

node.js

Le déploiement des passes peut être fait par courriel. Ici nous connecterons l’ordinateur source avec le périphérique cible en les connectant au même réseau wifi et en lançant un serveur sur l’ordinateur source. Pour cela, nous utiliserons node.js.

Pour télécharger node.js, se rendre sur nodejs.org, lancer le téléchargement puis installer node une fois celui-ci terminé.

Pour vérifier que node est bien installé (ou pour vérifier s’il est déjà installé), ouvrir un terminal et lancer la commande suivante :

node -v

éditeur de texte pour la programmation

Nous allons avoir besoin pour travailler d’un éditeur de texte adapté. Vous pouvez utiliser votre éditeur de texte pour la programmation préféré, ou installer atom, si vous n’en avez pas déjà un.

Dans ce cas, téléchargez atom et installez-le.

génération du passe

récupération du team identifier et création du pass kit id

récupération du team identifier

Le team identifier est un identifiant unique qui vous est attribué et qu’il va vous falloir renseigner dans le passe. Pour le trouver, il vous suffit de vous rendre sur la page vue d’ensemble (overview) accessible depuis le panneau latéral. Le team id apparaît alors dans l’URL (https://developer.apple.com/account/#/overview/<votre team id>). Notez-le.

création du pass kit id

Pour créer un pass kit id :

  1. rendez vous sur Certificates, IDs & Profiles
  2. dans le menu latéral, sous l’entrée identifiers, cliquez sur Pass Type IDs
  3. appuyez alors sur le bouton + en haut à droite
  4. indiquer alors un nom pour votre pass, ainsi qu’un identificateur pour le passe (pensez à le noter), et appuyer sur continue
  5. sur la page suivante, vérifiez les informations et cliquer sur Done pour indiquer que vous avez terminé

Pensez à noter l’identificateur de votre pass type id, nous en aurons besoin plus tard.

récupération du certificat de signature

Pour signer votre passe, vous allez devoir récupérer un certificat certifié par Apple, ou plus précisemment par la Apple Worldwide Developer Relations Certification Authority, déjà évoquée plus haut.

produire le fichier de demande certificat (CSR)

Avant de pouvoir obtenir ce passe, il vous faut éditer une demande comme suit :

  1. Dans le dossier Application de votre Mac, ouvrez le dossier Utilitaires et lancer Trousseaux d'accès.
  2. Dans le menu déroulant de Trousseaux d'accès, sélectionnez Assistant de certification > Demander un certificat à une autorité de certificat
  3. Dans la fenêtre Certificate Information, entrez les informations suivantes :
  4. Dans le champs adresse courriel, entrez votre adresse Mail
  5. Dans le champs Common Name, créez un nom pour votre clé privée (par exemple “Clé de Dev de Jean Dupont”)
  6. Le champs CA Email Address devrait être laissé vide.
  7. Dans le groupe request is, sélectionner l’option Saved to disk.
  8. Cliquez sur Continue dans Trousseaux d'accès, pour terminer le processus de génération de la demande de certificat

soumettre la demande à Apple et télécharger le certificat

Afin d’obtenir le certificat qui va vous permettre de signer votre passe, faites ce qui suit :

  1. rendez vous sur Certificates, IDs & Profiles
  2. dans le menu latéral, sous l’entrée identifiers, cliquez sur Pass Type IDs
  3. cliquez sur le pass kit id précédemment créé, puis sur edit
  4. sur la page qui s’ouvre, cliquez sur Create Certificate...
  5. la page qui s’affiche indique les instructions que nous avons suivi précédemment pour générer la demande de certificat. Cliquez sur Continue.
  6. sur l’écran qui s’affiche, cliquez sur Choose file... et sélectionnez le fichier de demande de certificat créé précédemment
  7. l’écran suivant vous permet de télécharger le certificat en cliquant sur download
  8. une fois le certificat téléchargé, installez-le dans l’application Trousseaux d'accès.

Vérifier la validité du certificat

Si le certificat est considéré par l’application Trousseaux d'accès comme non valide, signpass produira un passe invalide qui sera refusé par Wallet et sera donc inexploitable.

à compléter

création du passe

Cette documentation ne traite pas de la mise en forme des passes. Nous utiliserons ici les modèles de passe fournis par Apple.

Prérequis

Avant de commencer, assurez-vous d’avoir les informations suivantes sous la main. Nous avons obtenus ces informations en suivant les étapes précédentes :

édition du modèle de passe générique

Faites une copie du dossier WalletCompanionFiles/SamplePasses/Generic.pass/ situé dans l’archive téléchargée en début de procédure.

Dans votre éditeur de texte, ouvrez le fichier pass.json contenu dans le dossier que vous venez de copier.

team id et pass type identifier

Dans le fichier pass.json, recherchez le champs passTypeIdentifier, et remplacez la valeur pass.com.apple.devpubs.example par l’identificateur choisi.

Faites de même pour le champ teamIdentifier où il vous faudra remplacer la valeur A93A5CM278 par votre team id.

ajout des beacons

Pour ajouter des beacons, il vous faut ajouter au fichier JSON la clé beacons au fichier. Observez les autres clés pour comprendre comment insérer celle-ci, ainsi que le modèle suivant, pour deux beacons.

"beacons": [
  {
    "proximityUUID":"AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE",
    "relevantText":"Message à afficher",
    "major":1,
    "minor":1,
  },
  {
    "proximityUUID":"AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE",
    "relevantText":"Message à afficher",
    "major":1,
    "minor":1,
  },
],

Il faut bien sûr remplacer les valeurs des clés par celles notées pour chaque beacon

signature et compression

Pour compresser et signer les passes, nous allon sutiliser signpass, compilé et installé précédemment.

Pour cela, il faut tout d’abord ouvrir un terminal, et se placer dans le dossier parent de notre dossier Generic.pass. Pour cela :

  1. entrer dans le terminal cd suivi d’une espace
  2. glisser-déposer le dossier Generic.pass dans le terminal, et appuyez sur entrée.
  3. entrer cd .. puis entrée pour atteindre le dossier parent.
  4. entrez la commande signpass -p Generic.pass puis appuyez sur entrée
  5. le passe est alors généré

test du passe avec iOS Simulator

Pour tester le passe avec iOS Simulator, la procédure est assez simple. Il suffit d’ouvrir iOS Simulator et de glisser-déposer le passe dans la fenêtre dudit logiciel.

à compléter

déploiement via wifi

Pour opérer au déploiement :

  1. téléchargez d’abord le fichier serveur.json et placez-le dans votre répertoire de travail.
  2. créez un dossier passes-generes/ et placez-y vos .pkpass
  3. connectez l’ordinateur source et le dispositif iOS cible sur le même réseau wifi
  4. écrivez dans le terminal node suivi d’une espace
  5. glissez-déposez le fichier serveur.js, puis appuyez sur entrée
  6. repérez l’adresse de l’ordinateur cible sur le réseau local en vous rendant dans paramètres systèmeréseau
  7. sur le dispositif iOS cible, ouvrez safari, et tapez en guise d’URL l’adresse de l’ordinateur cible suivi de :8080, d’une barre oblique et enfin du nom de fichier du .pkpass, ce qui devrait donne rune URL ressemblant à 192.168.1.25:8080/Generic.pkpass, puis validez
  8. safari doit vous proposer d’ajouter le passe à Wallet.

à compléter