De vrais appareils, pas des émulateurs
Le parc est en France, avec ses vrais constructeurs, ses vrais réseaux et ses vraies polices. Un émulateur rend la page de la même façon pour tout le monde ; un Redmi sous MIUI, non.
Vous ouvrez une session, le téléphone apparaît dans l'onglet : vous touchez, vous tapez, vous installez votre APK. À la fermeture, l'appareil est remis à zéro — l'APK du client précédent n'y est plus.
Sans carte bancaire pour commencer. Paiement sécurisé par Stripe quand vous changez d'offre.

Capture réelle : l'écran du Redmi du parc, relayé dans le lecteur.
Ce n'est pas une estimation de laboratoire : c'est une session réelle, sur un appareil réel, relevée dans le navigateur. Le flux H.264 traverse Tactile octet pour octet — le relais ne le réécrit pas, il le recopie.
400 unsupported_target.adb shell : uniquement les actions de la barre d’outils, toutes réversibles.Non, pas en v1 : uniquement les actions de la barre d'outils (toucher, clavier, boutons système, rotation, volume, dépôt d'APK, capture, ouverture d'URL). Le shell viendra plus tard, en liste blanche de commandes.
Non : une `capture` du socle exige une cible (`package` ou `url`), il n'existe pas de job « capture l'écran courant ». Sans cible, Tactile répond `400 unsupported_target` au lieu de faire semblant. Le lecteur, lui, capture la vue affichée côté navigateur, sans job.
Non : `GET /api/v1/sessions/:id/logcat` exige un `package` et relance l'application ciblée avec un filtre. Aucune action de contrôle ne donne accès au shell — volontairement.
Pas en phase 1 : les réservations de créneaux, le back-office et le presse-papiers sont hors périmètre. Le plafond de sessions simultanées (`max_parallel`) est enregistré sur la clé mais pas appliqué.
Non : les appareils loués ne sont connectés à aucun compte Google personnel — un compte de service par appareil, ou aucun. Une session ne laisse donc rien derrière elle.
Le parc est en France, avec ses vrais constructeurs, ses vrais réseaux et ses vraies polices. Un émulateur rend la page de la même façon pour tout le monde ; un Redmi sous MIUI, non.
Tactile est le seul produit de la famille mesuré de bout en bout sur un appareil réel : 145 images / 219 ko en 6 s (~30 i/s), `session.ready` 460 × 1024, codec `avc1.640020` reconstruit depuis le SPS. Le flux H.264 est relayé octet pour octet.
Le navigateur ne voit qu'un jeton de session opaque ; le bail du client est remplacé par celui de sa session. C'est ce qui empêche un client de regarder ou de piloter l'appareil d'un autre.
À la fermeture, un job `reset` désinstalle l'APK client, vide les téléchargements et déconnecte les comptes ajoutés pendant la session. Le client suivant ne trouve aucune trace du précédent.
Inactivité de 5 min : avertissement puis fermeture. Navigateur fermé brutalement : le bail est libéré en moins de 60 s (grâce de 10 s puis balayage), et les minutes ne sont débitées qu'une fois.
Le débit suit la transition d'état ouverte → fermée : un double appel (route `DELETE` puis balayeur) ne facture pas deux fois. Un plafond de crédits arrête la session avant la surprise.
Chaque geste du navigateur devient une action précise côté appareil. Rien ne passe par un shell : ce sont des évènements de contrôle, donc rien ne peut rester cassé après votre session.
| Dans le navigateur | Sur l’appareil |
|---|---|
| Clic ou tap sur l’écran | touch down puis up, aux coordonnées de la vidéo ; scrcpy les remet à l’échelle de l’écran réel. |
| Glisser | touch down + move (au plus un toutes les 30 ms) + up : le geste part en continu, pas en saut. |
| Molette | scroll, borné à ±20 unités par événement. |
| Frappe au clavier | les lettres partent en text ; Entrée (66), Retour (67), Suppr (112), flèches, Tab et Échap → Retour partent en key. |
| Ctrl+V | le presse-papiers, tronqué à 500 caractères. |
| Champ « Texte à saisir » + Envoyer | jusqu’à 2 000 caractères d’un seul coup, sans passer par le clavier virtuel. |
| Barre d’outils | Accueil, Retour, Récents, Rotation, Volume +/−, Veille, Réveil : des codes système, pas du shell. |
| Capture et Stats | côté navigateur : l’instantané de la vue affichée et les compteurs (images décodées, file du décodeur, WebSocket, facturation). |
| Fermer | libère l’appareil, déclenche la remise à zéro et débite les minutes consommées — une seule fois. |
Un produit qui cache ses limites fait perdre du temps à tout le monde. Voici les nôtres, aujourd'hui.
Créez un compte, prenez une clé, ouvrez un appareil du parc. L'essai donne 60 minutes, sans carte bancaire.