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
- un compte Apple avec Apple Developer Program Membership (payant) ou Apple Developer University Program Membership
- un ordinateur avec le système d’exploitation macOS
- un iBeacon avec son uuid
- un périphérique iOS avec Wallet
- un logiciel permettant de récupérer/vérifer les uuid des beacons (ici Beacon Locator sur Android)
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
- préparation de l’environnement de travail
- génération du passe
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 :
- un dossier SamplePasses qui contient des exemples de passes
- un dossier ServerReference qui ne sera pas traité/utilisé ici
- un dossier signpass qui contient la source du logiciel signpass, que nous compilerons avant de l’utiliser pour signer et compresser
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 :
- ouvrir Xcode
- ouvrir le projet Xcode contenu dans le dossier signpass de l’archive téléchargée précédemment.
- 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érieureProduct
et en cliquant surBuild
. - identifier le dossier de compilation en ouvrant l’organisateur (accessible via dans le menu supérieur via
Window
→Organizer
), puis en localisant l’entréederived 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. - ouvrir le dossier
Products/Release/Debug
. Celui-ci contient le logicielsignpass
compilé. - ouvrir le terminal (Celui-ci peut être trouvé dans
/Applications/utilitaires
). - y taper
sudo cp
suivi d’une espace. - 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é.
- ajouter une espace suivie de
/usr/bin/signpass
- appuyez sur
entrée
. Votre mot de passe vous ait demandé. Tapez-le suivi de la toucheentré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 :
- se rendre, avec son appareil android, sur f-droid.org et cliquer sur “download f-droid”.
- 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”.
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 :
- rendez vous sur Certificates, IDs & Profiles
- dans le menu latéral, sous l’entrée
identifiers
, cliquez surPass Type IDs
- appuyez alors sur le bouton
+
en haut à droite - indiquer alors un nom pour votre pass, ainsi qu’un identificateur pour le passe (pensez à le noter), et appuyer sur
continue
- 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 :
- Dans le dossier
Application
de votre Mac, ouvrez le dossierUtilitaires
et lancerTrousseaux d'accès
. - Dans le menu déroulant de
Trousseaux d'accès
, sélectionnezAssistant de certification
>Demander un certificat à une autorité de certificat
- Dans la fenêtre
Certificate Information
, entrez les informations suivantes : - Dans le champs adresse courriel, entrez votre adresse Mail
- Dans le champs
Common Name
, créez un nom pour votre clé privée (par exemple “Clé de Dev de Jean Dupont”) - Le champs
CA Email Address
devrait être laissé vide. - Dans le groupe
request is
, sélectionner l’optionSaved to disk
. - Cliquez sur
Continue
dansTrousseaux 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 :
- rendez vous sur Certificates, IDs & Profiles
- dans le menu latéral, sous l’entrée
identifiers
, cliquez surPass Type IDs
- cliquez sur le pass kit id précédemment créé, puis sur
edit
- sur la page qui s’ouvre, cliquez sur
Create Certificate...
- 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
. - sur l’écran qui s’affiche, cliquez sur
Choose file...
et sélectionnez le fichier de demande de certificat créé précédemment - l’écran suivant vous permet de télécharger le certificat en cliquant sur
download
- 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 :
- votre team id
- l’identificateur du pass kit id créé précedemment
- pour chaque beacon :
- son uuid
- son major
- son minor
é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 :
- entrer dans le terminal
cd
suivi d’une espace - glisser-déposer le dossier
Generic.pass
dans le terminal, et appuyez surentrée
. - entrer
cd ..
puisentrée
pour atteindre le dossier parent. - entrez la commande
signpass -p Generic.pass
puis appuyez surentrée
- 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 :
- téléchargez d’abord le fichier
serveur.json
et placez-le dans votre répertoire de travail. - créez un dossier
passes-generes/
et placez-y vos .pkpass - connectez l’ordinateur source et le dispositif iOS cible sur le même réseau wifi
- écrivez dans le terminal
node
suivi d’une espace - glissez-déposez le fichier
serveur.js
, puis appuyez surentrée
- repérez l’adresse de l’ordinateur cible sur le réseau local en vous rendant dans
paramètres système
→réseau
- 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 - safari doit vous proposer d’ajouter le passe à Wallet.
à compléter