Comment faire croire à l’iPhone qu’on est dans un Apple Store avec des iBeacon

Depuis l’annonce d’iOS 7, une technologie m’intéresse pas mal : iBeacon. Je trouve ça intéressant et efficaces, et je joue pas mal avec. Depuis l’annonce d’Apple d’intégrer iBeacon dans ses Apple Store, j’essayais de reproduire ça à la maison, mais sans succès. Mais il y a quelques jours, j’ai finalement trouvé les valeurs des balises utilisées par Apple et comme prévu, c’est assez simple de reproduire le fonctionnement à la maison.
ibeacon_01

Petit rappel : un iBeacon, c’est une balise qui émet simplement trois choses : un UUID et deux valeurs. Il n’y a pas de communication entre le iBeacon et l’appareil, le premier émet en permanence, le second reçoit. On peut calculer de façon grossière la portée en mesurant la puissance du signal et donc positionner l’appareil facilement.

Diffuser une valeur précise pour un iBeacon, c’est assez simple : il existe des applications à compiler pour iOS, pour Mac ou pour Android. On peut aussi le faire avec un Raspberry Pi assez facilement ou, dans mon cas, avec du matériel dédié.

Trouver la valeur d’un iBeacon, c’est beaucoup moins simple. Les applications iOS présentent sur l’App Store ne peuvent pas scanner « dans le vide » : il faut fournir la valeur d’un iBeacon pour vérifier s’il est là. C’est par contre possible sous Android, sous Mac OS X ou avec des applications à compiler manuellement. Une société américaine, Radius Network, propose une solution intéressante : en plus d’applications iOS, Android et Mac OS X, la société propose un site communautaire, Wikibeacon.

Wikibeacon place sur une carte les iBeacon détecté par les applications mobiles, et contient la position de plus de 30 000 balises. La recherche est un peu fastidieuse, vu qu’on peut uniquement travailler avec les UUID, mais on peut se balader et chercher les endroits où il y a beaucoup d’iBeacon. Sans but précis, vous allez surtout trouver deux choses : des gens qui s’amusent avec des balises Estimote (une société qui fournit des balises) et l’emplacement des sociétés qui travaillent sur la technologie, le recoupement est assez simple à faire avec Google.

Pour trouver les valeurs des iBeacon en Apple Store, j’ai utilisé une méthode simple : chercher un Apple Store dans une grande ville (San Francisco) en tâtonnant un peu, et ensuite j’ai testé les valeurs pour recouper le tout.

On trouve en fait deux séries d’UUID. La première, f7f489e9-c07e-41b0-beab-a24ce4d49faa, est liée à une valeur majeure qui change en fonction de la ville et une valeur mineure qui est un multiple de 256. Je n’ai pas trouvé à quoi sert cet iBeacon précis, il ne fait pas réagir l’application Apple, mais il semble présent dans pas mal d’Apple Store. La seconde, f1eabf09-e313-4fcd-80df-67c779763888, est liée à une valeur majeure qui correspond à un Apple Store et une valeur mineure.

La valeur majeure correspond à un Apple Store précis : celui qui a la valeur 2050 c’est celui de Palo Alto, par exemple, alors que 2087 est l’Apple Store de San José. La valeur mineure, généralement, correspond plutôt à un endroit précis dans un magasin, par exemple le rayon accessoires, etc.

Pour vérifier si les valeurs sont bien celles d’un Apple Store, il faut d’abord un appareil compatible iBeacon (Bluetooth 4.0) sous iOS 7. Un iPhone 4S au minimum, donc. Pas un iPad, l’application Apple Store n’est pas réellement compatible, mais ça doit fonctionner avec un iPod touch. Ensuite, il faut l’application Apple Store, mais aussi un compte iTunes américain : les notifications ne fonctionnent qu’aux USA et l’application le détecte. Enfin, il faut activer les notifications dans l’application (ce qui n’est pas possible avec un compte iTunes français).

L'option

L’option

Une fois que c’est fait… magie : on reçoit bien les notifications comme si on était dans un Apple Store. Il suffit d’émettre d’une façon ou d’une autre les valeurs et ça fonctionne.

Une notification

Une notification


Une autre notification

Une autre notification

Dans le cas d’Apple, ce n’est pas spécialement un problème qu’il soit possible de simuler une borne iBeacon, mais dans d’autres cas, ça peut l’être, par exemple dans des jeux où quand on veut envoyer des bons de réductions. La solution idéale consiste à coupler, dans l’application, la détection d’un iBeacon avec une position géographique, qui est plus difficilement falsifiable au niveau d’iOS, même si ça reste possible.

A noter que les « faux » Apple Store chinois n’ont pas encore déployé de balises iBeacon…