Politique de confidentialité de Dish pour Android
En vigueur le 2026-05-21. Cette politique s'applique à l'application Dish pour Android publiée par TinkerNorth (« nous », « TinkerNorth », « Dish ») et distribuée via les Releases GitHub. Si vous lisez ceci depuis l'application, vous pouvez également trouver la dernière version sur https://dish.tinkernorth.com/privacy/dish-android/.
La version courte
Dish pour Android ne collecte aucune information personnelle, identifiant d'appareil, analyse d'usage ou donnée publicitaire. Il n'a pas de système de compte. Le seul processeur exploité par TinkerNorth qu'il contacte jamais est Firebase Crashlytics, et uniquement quand l'application plante. Jamais durant l'usage normal.
Les rapports de plantage transportent une stack trace, le modèle d'appareil, la version d'Android, et un UUID d'installation auto-généré. Ils ne transportent pas vos entrées de manette, les noms ou adresses IP des Satellites avec lesquels vous appairez, votre SSID Wi-Fi, ni aucune information de contact. La portée complète de Crashlytics est détaillée à la section 5 ci-dessous. Vous pouvez désactiver à tout moment depuis l'icône d'engrenage sur l'écran principal → Paramètres → Diagnostics → Partager les rapports de plantage ; le choix persiste entre les lancements et est respecté avant qu'un plantage ne puisse être envoyé au prochain démarrage.
Tout le reste que fait l'application se passe sur votre appareil ou entre votre appareil et les serveurs Satellite que vous avez explicitement appairés sur votre propre LAN. Le flux UDP chiffré de manette est du trafic local uniquement ; nous ne le voyons pas et ne le traitons pas.
La version plus longue ci-dessous explique exactement ce que fait l'application sur l'appareil, quelles permissions elle demande et pourquoi, quelles données vivent où, et quels sont vos droits sous le GDPR (UE), UK GDPR, CCPA / CPRA (Californie) et LGPD (Brésil).
Qui nous sommes
TinkerNorth est un projet de développeur unique qui publie Dish et la suite Satellite comme logiciels libres et open source. Nous n'exploitons pas de service commercial lié à Dish pour Android. Pour les questions de confidentialité, contactez privacy@tinkernorth.com.
1. Informations que nous ne collectons pas
Pour clarifier, voici ce que Dish pour Android ne collecte pas, même si beaucoup d'applis de cette catégorie le font :
- Pas de nom, d'adresse e-mail, de numéro de téléphone ni d'identifiants de compte.
- Pas d'identifiant publicitaire (AAID), Android ID, IMEI ni autres IDs d'appareil de tracking publicitaire.
- Pas de localisation précise ou approximative.
- Pas de contacts, calendrier, photos, fichiers ni audio du microphone.
- Pas d'analyse d'usage générale. Nous n'utilisons pas Firebase Analytics, Google Analytics ni aucun autre pipeline de suivi d'événements. La seule donnée hors appareil est la portée Crashlytics, limitée aux plantages, décrite à la section 5.
- Pas de données publicitaires ni de publicité in-app.
- Pas de métadonnées sur les jeux auxquels vous jouez, les manettes que vous utilisez ou les moments où vous les utilisez.
2. Informations traitées localement sur votre appareil
Les informations suivantes sont traitées localement sur votre appareil. Elles ne quittent pas votre appareil, sauf lorsqu'il est explicitement précisé qu'elles vont vers un serveur Satellite que vous avez appairé sur votre propre LAN :
- Entrées de manette. Pressions de boutons, positions des sticks analogiques et pressions des gâchettes depuis l'overlay tactile à l'écran ou une manette physique attachée à votre téléphone. Elles sont chiffrées de bout en bout (ChaCha20-Poly1305) et envoyées uniquement aux serveurs Satellite avec lesquels vous avez appairé, en UDP sur votre LAN.
- Lectures des capteurs de mouvement. Si vous activez le transfert du gyroscope / accéléromètre, la sortie de l'IMU du téléphone est échantillonnée jusqu'à 250 Hz, chiffrée et envoyée au Satellite appairé. C'est désactivé par défaut et basculé dans l'activité d'overlay de l'application.
- État de la batterie. L'application lit le niveau de batterie et l'état de charge de votre téléphone depuis le
BatteryManagerd'Android afin de transférer une capacité de batterie à votre Satellite toutes les 30 secondes et à chaque transition d'état. Ceci est envoyé chiffré uniquement au Satellite appairé. - Liste des Satellites appairés. Quand vous vous appairez avec un Satellite, l'application stocke l'adresse IP du satellite, le port, le nom d'affichage, l'identifiant d'appareil, et la clé symétrique de 256 bits propre à ce satellite dérivée pendant la poignée de main X25519. Ceci est conservé dans les
SharedPreferencespar appli d'Android et est isolé à l'application. - Hôtes Bluetooth mémorisés. Si vous utilisez la fonctionnalité de passthrough HID Bluetooth, l'application stocke l'adresse MAC et le nom de chaque hôte mémorisé dans
SharedPreferencespour que vous puissiez vous reconnecter sans réappairer. - Serveurs LAN découverts. L'adresse IP, le port et le nom de tout Satellite annoncé sur votre réseau local via mDNS ou diffusion UDP, conservés en mémoire pendant la durée du cycle de découverte. Non persistés entre les lancements à moins que vous ne choisissiez d'appairer.
- Préférences de l'application. Type de manette par emplacement (Xbox / PlayStation), dispositions d'overlay tactile par jeu, sélection de locale. Stockées dans
SharedPreferencessur votre appareil. - Logs Android. Comme toute appli Android, Dish écrit des messages de diagnostic dans le log système Android (
logcat). Ils ne quittent jamais votre appareil ; ils sont visibles pour vous (et pour quiconque a un accès USB debugging à votre téléphone) mais ne sont transmis nulle part.
3. Permissions demandées par l'application, et pourquoi
Les permissions que Dish pour Android déclare dans son AndroidManifest.xml sont listées ci-dessous avec la raison exacte pour laquelle chacune existe.
INTERNET. Requise pour envoyer des paquets UDP chiffrés de manette à un Satellite sur votre LAN et pour effectuer la poignée de main d'appairage HTTPS. Nous ne contactons aucun serveur que nous exploitons.ACCESS_NETWORK_STATE. Permet à l'appli de remarquer quand vous n'avez pas de Wi-Fi et d'afficher une bannière utile au lieu d'échouer en silence.ACCESS_WIFI_STATE. Utilisée pour détecter si vous êtes du tout en Wi-Fi, pour que l'appli puisse vous avertir que Satellite est injoignable en données mobiles.CHANGE_WIFI_MULTICAST_STATE. Requise pour la découverte mDNS / Bonjour de serveurs Satellite sur votre LAN. Sans elle, le seul chemin de découverte est la diffusion UDP héritée.WAKE_LOCK. Maintient l'écran / le CPU éveillé pendant une session de streaming active pour qu'une pression de bouton ne soit pas retardée par Doze.FOREGROUND_SERVICEetFOREGROUND_SERVICE_CONNECTED_DEVICE. Android exige un service de premier plan pour maintenir vivante une longue session connected-device quand l'appli est en arrière-plan. Le type de service connected-device correspond au cas d'usage manette vers hôte.POST_NOTIFICATIONS(Android 13+). Affiche la notification de session continue requise par le service de premier plan, plus des bannières optionnelles pour les changements d'état de connexion. Vous pouvez refuser et l'appli fonctionnera quand même ; simplement la notification ne sera pas visible.VIBRATE. Route les événements de vibrations transférés depuis votre jeu vers le(s) vibreur(s) du téléphone pour que vous les sentiez dans votre main.BLUETOOTH/BLUETOOTH_ADMIN(Android ≤ 11),BLUETOOTH_CONNECTetBLUETOOTH_ADVERTISE(Android 12+). Requises uniquement si vous utilisez la fonctionnalité de passthrough HID Bluetooth pour enregistrer votre téléphone comme manette Bluetooth virtuelle pour un autre hôte. Nous ne scannons ni ne loggons jamais d'appareils que vous n'avez pas explicitement choisi d'appairer.
L'application ne demande aucune de ces permissions : localisation (fine ou grossière), caméra, microphone, contacts, calendrier, SMS, journal d'appels, capteurs corporels, fichiers / médias. Si une future version a besoin de l'une d'elles, cette politique sera mise à jour avant la sortie.
4. Comportement réseau
Dish pour Android initie du trafic réseau à quatre endroits :
- Découverte LAN. L'appli envoie et écoute des requêtes mDNS / Bonjour sur l'adresse multicast
224.0.0.251:5353, et écoute les balises de diffusion UDP héritées sur le port 9879. Ce trafic reste sur votre réseau local. - Poignée de main d'appairage. Quand vous tapez sur un Satellite découvert et entrez le PIN à 4 chiffres affiché sur le Satellite, l'appli effectue une requête HTTPS POST vers l'IP du Satellite sur le port TCP 9443. Le corps de la requête contient une clé publique X25519 de 32 octets, le PIN, l'identifiant d'appareil et le label d'appareil. Le certificat du Satellite est auto-signé et non validé contre une CA publique ; la confiance est établie par le PIN, qui est consommé une fois puis détruit.
- Session de streaming. Une fois appairé, l'appli envoie des paquets UDP authentifiés ChaCha20-Poly1305 à l'IP du Satellite sur le port 9876 et écoute les paquets de chemin de retour (vibrations, barre lumineuse, événements de statut) sur le même socket. Les battements de cœur se déclenchent toutes les 2 secondes.
- Rapports de plantage. Si, et seulement si, l'appli plante ou subit un ANR, le SDK Firebase Crashlytics embarqué envoie un rapport de plantage à Google. La portée détaillée et les exclusions sont à la section 5. Il n'y a pas de chemin de télémétrie en fonctionnement normal : pas d'endpoint d'analyse, pas d'endpoint « vérifier les mises à jour », pas d'endpoint de configuration à distance. Les vérifications de mises à jour sont effectuées par le Google Play Store ou par vous manuellement.
Tout le trafic HTTPS sortant est aussi protégé par un network_security_config.xml explicite qui refuse le texte en clair vers tout hôte, pour qu'une future régression ne puisse pas rétrograder silencieusement une connexion en HTTP simple.
5. Rapport de plantage (Firebase Crashlytics)
Dish pour Android utilise Firebase Crashlytics (fourni par Google LLC) pour collecter les rapports de plantage et d'ANR afin que nous puissions diagnostiquer les bugs qui échappent aux tests. Crashlytics est le seul flux de données de votre appareil vers un processeur exploité par TinkerNorth.
Quand l'appli plante (une exception Kotlin non gérée, un signal fatal dans la couche JNI native, ou un événement Application Not Responding), Crashlytics envoie :
- La stack trace (Kotlin et/ou native).
- Modèle d'appareil, fabricant, version d'Android, locale, RAM libre et disque libre au moment du plantage.
- Le code de version et le nom de version de l'appli.
- Un Firebase Installation ID, c'est-à-dire un UUID auto-généré qui nous permet de compter les installations uniques affectées sans vous identifier personnellement.
- Les quelques dernières lignes de log que nous avons explicitement signalées comme pertinentes. Nous n'envoyons pas le contenu général de
logcat.
Crashlytics ne reçoit pas :
- Les noms, IP ou adresses MAC des Satellites ou hôtes Bluetooth avec lesquels vous appairez.
- Vos événements d'entrée de manette, y compris les flux de mouvement et de pavé tactile.
- Votre SSID, BSSID ou adresse IP Wi-Fi.
- Toute information de contact, adresse e-mail ou nom.
- Le contenu du flux UDP chiffré de manette.
Crashlytics conserve les données de plantage pendant 90 jours, puis les supprime. Voir la politique de confidentialité et de sécurité Firebase de Google pour le rôle de Google en tant que processeur. TinkerNorth est le responsable du traitement ; Google est le processeur.
Se désinscrire. Tapez l'icône d'engrenage sur l'écran principal, puis dans Paramètres sous Diagnostics basculez Partager les rapports de plantage sur off. L'interrupteur est sur on par défaut. Le basculer sur off appelle FirebaseCrashlytics.setCrashlyticsCollectionEnabled(false) et persiste le choix dans le stockage privé de l'appli. Le prochain démarrage de l'appli applique la préférence sauvegardée avant tout chemin de code qui pourrait produire un rapport de plantage, et le contrôleur observe la préférence pendant le reste de la session pour qu'un opt-out en milieu de session prenne effet immédiatement. La préférence est incluse dans la sauvegarde cloud Android, donc elle survit aux transferts d'appareil. Les rapports de plantage déjà collectés avant votre opt-out restent sur Firebase jusqu'à l'expiration de sa rétention standard de 90 jours, puis sont supprimés.
Les variantes de build qui sont livrées sans google-services.json (par exemple, quiconque compile depuis les sources lui-même) n'ont pas du tout de SDK Crashlytics initialisé, même si l'interrupteur est sur on. Le contrôleur détecte cela via FirebaseApp.getApps et ne fait rien.
Nous n'utilisons pas Firebase Analytics. Crashlytics et Analytics sont des produits Firebase distincts et cette appli ne lie que Crashlytics. Nous avons délibérément gardé la dépendance firebase-analytics hors du build : l'inclure auto-collecterait des événements (first_open, session_start, screen_view, app_remove, etc.) et tirerait com.google.android.gms.permission.AD_ID dans le manifeste de production. Aucun des deux n'est vrai aujourd'hui. Si Analytics est jamais ajouté, cette politique sera mise à jour avant la livraison du changement.
6. Services et SDK tiers
Dépendances livrées dans l'APK :
- AndroidX (Google) : bibliothèques de support Android standard.
- Material Components for Android (Google) : widgets d'UI Material 3.
- AndroidX GameActivity (Google) : pont natif de boucle de jeu.
- libsodium (compilée depuis les sources via NDK) : la bibliothèque de primitives cryptographiques, utilisée pour ChaCha20-Poly1305 et X25519. N'initie aucun trafic réseau.
- Firebase Crashlytics + Firebase Installations (Google) : rapport de plantage + ANR uniquement, portée détaillée à la section 5. Le SDK est toujours inclus dans l'APK ; il s'initialise uniquement quand le build a été assemblé avec un
google-services.jsonvalide. Sans ce fichier (par exemple, quiconque compile depuis les sources sans projet Firebase), Crashlytics ne fait rien à l'exécution et rien ne quitte l'appareil.
Firebase Analytics est délibérément absent du build. L'inclure auto-collecterait des événements et tirerait la permission AD_ID dans le manifeste, ce qui entre tous deux en conflit avec cette politique. Le fichier app/build.gradle.kts contient un commentaire expliquant le choix pour qu'un futur contributeur voie la contrainte avant de réajouter la dépendance.
La liste complète des dépendances est dans app/build.gradle.kts dans le dépôt dish-android et la nomenclature logicielle (SPDX + CycloneDX) livrée avec chaque version étiquetée.
Si vous avez obtenu Dish pour Android via Google Play, le Play Store lui-même est régi par la politique de confidentialité de Google. C'est distinct de cette politique et hors de notre contrôle.
7. Données que nous partageons
Nous ne vendons, louons ni partageons d'informations personnelles à des fins publicitaires, marketing ou commerciales. Nous n'avons aucune relation avec des réseaux publicitaires, fournisseurs d'analyse, vendeurs de détection de fraude ou partenaires marketing. Le seul tiers qui reçoit jamais des données de cette appli est Google LLC, agissant comme processeur pour Firebase Crashlytics sous la portée décrite à la section 5.
8. Rétention des données
Les données sur l'appareil vivent jusqu'à ce que vous désinstalliez l'appli ou utilisiez l'option « Effacer le stockage » d'Android dans Paramètres > Applis > Dish.
Deux éléments de données privées de l'appli interagissent différemment avec la sauvegarde cloud Android :
- Les clés partagées des Satellites appairés et les hôtes Bluetooth mémorisés (fichier
connection_store.xml) sont exclues de l'auto-sauvegarde et du transfert d'appareil, pour que le matériel de chiffrement ne quitte jamais votre appareil. Réappairer est la bonne réponse quand vous passez à un nouveau téléphone. - La préférence d'opt-out de rapport de plantage (fichier
user_preferences.xml) est incluse dans la sauvegarde cloud, pour qu'un « non merci » délibéré soit reporté sur un appareil de remplacement sans que vous ayez à rebasculer l'interrupteur.
Crashlytics conserve les rapports de plantage pendant 90 jours sur l'infrastructure de Google, puis les supprime.
9. Confidentialité des enfants
Dish pour Android n'est pas destiné aux enfants de moins de 13 ans (ou de l'âge équivalent dans votre juridiction : 14 en Corée du Sud, 16 dans la plupart de l'UE). La portée Crashlytics décrite à la section 5 ne contient aucune information qui pourrait identifier un enfant en tant qu'enfant (pas de nom, pas de date de naissance, pas d'e-mail). Si vous pensez que les données d'un enfant ont été collectées via cette appli, écrivez à privacy@tinkernorth.com avec le Firebase Installation ID ou un horodatage récent de plantage et nous purgerons les rapports associés.
10. Transferts internationaux
Les données sur l'appareil ne quittent pas votre appareil. La charge utile de rapport de plantage Crashlytics est envoyée à Google LLC et peut être traitée dans tout pays où Google exploite une infrastructure, y compris les États-Unis. Les transferts depuis l'EEE / le Royaume-Uni vers les États-Unis reposent sur les Clauses Contractuelles Types ; voir les Data Processing and Security Terms de Google pour la documentation complète du mécanisme de transfert.
11. Vos droits
11.1 GDPR (Espace Économique Européen)
Si vous êtes dans l'EEE, le Règlement Général sur la Protection des Données (GDPR, ou RGPD en France) vous donne des droits d'accès, de rectification, d'effacement, de limitation du traitement, de portabilité des données et d'opposition. Les seules données personnelles que nous traitons pour les utilisateurs de l'EEE sont le Firebase Installation ID et la charge utile de rapport de plantage décrits à la section 5. Pour exercer l'un de ces droits :
- Arrêter la collecte (droit d'opposition / retrait du consentement) : ouvrez l'appli, tapez l'icône d'engrenage sur l'écran principal, puis dans Paramètres sous Diagnostics basculez Partager les rapports de plantage sur off. La préférence prend effet pour le reste de la session immédiatement et est réappliquée avant qu'un plantage puisse être envoyé à chaque démarrage suivant de l'appli. Désinstaller l'appli ou compiler depuis les sources sans
google-services.jsonsont des chemins équivalents d'arrêt de collecte. - Accès, rectification, suppression, portabilité : écrivez à privacy@tinkernorth.com avec la date / heure approximative du plantage et votre modèle d'appareil. Nous n'exposons pas le Firebase Installation ID dans l'UI in-app, donc nous identifions les rapports par horodatage + modèle d'appareil plutôt qu'en vous demandant de retrouver l'ID dans les logs de debug. Nous chercherons si des rapports correspondent et répondrons sous 30 jours comme requis par l'art. 12(3) du GDPR.
Bases légales. Le traitement local sur l'appareil (entrée de manette, clés d'appairage, hôtes mémorisés) repose sur votre consentement, exprimé en installant l'appli et en accordant les permissions, et sur l'exécution d'un contrat quand vous demandez à l'appli d'appairer et de diffuser vers votre Satellite. Le traitement Crashlytics repose sur notre intérêt légitime (GDPR Art. 6(1)(f)) à maintenir une appli fonctionnelle, équilibré par la portée stricte sans données personnelles décrite à la section 5.
Transferts internationaux. Les données Crashlytics sont traitées par Google LLC, qui peut transférer des données hors de l'EEE sous Clauses Contractuelles Types. Voir les Data Processing and Security Terms de Google.
Vous avez le droit de déposer une plainte auprès de votre autorité nationale de protection des données. Une liste est maintenue par le Comité européen de la protection des données (EDPB). En France, l'autorité compétente est la CNIL.
11.2 UK GDPR (Royaume-Uni)
Si vous êtes au Royaume-Uni, le UK GDPR reflète les droits de la section 11.1 ci-dessus. Votre autorité de contrôle est l'Information Commissioner's Office (ICO). La même portée Crashlytics et le même mécanisme d'opt-out s'appliquent.
11.3 CCPA / CPRA (Californie)
Si vous êtes résident de Californie, le California Consumer Privacy Act (tel qu'amendé par le CPRA) vous donne les droits de savoir, supprimer, corriger, refuser la vente ou le partage, et limiter l'usage d'informations personnelles sensibles. Nous ne vendons ni ne partageons d'informations personnelles (telles que définies par CCPA / CPRA), et nous ne l'avons pas fait au cours des 12 derniers mois. Aucun lien « Do Not Sell or Share My Personal Information » n'est requis car il n'y a aucune vente ni aucun partage dont se désinscrire.
Pour exercer un « droit de savoir » ou un « droit de supprimer » contre la portée de rapport de plantage de la section 5, écrivez à privacy@tinkernorth.com avec votre Firebase Installation ID (ou un horodatage récent de plantage et le modèle d'appareil). Vous pouvez aussi désigner un agent autorisé pour faire une requête en votre nom.
11.4 Autres États américains
Les résidents de Virginie (VCDPA), Colorado (CPA), Connecticut (CTDPA), Utah (UCPA), Texas (TDPSA) et d'autres États avec des lois de confidentialité complètes ont des droits équivalents. La même portée Crashlytics et le même mécanisme d'opt-out s'appliquent.
11.5 LGPD (Brésil)
Si vous êtes au Brésil, la Lei Geral de Proteção de Dados (LGPD) vous donne les droits de confirmation, accès, correction, anonymisation, portabilité et suppression. La même portée Crashlytics et le même mécanisme d'opt-out s'appliquent. Pour exercer un droit, écrivez à privacy@tinkernorth.com. Notre contact DPO est la même adresse.
12. Sécurité
Chaque paquet échangé entre Dish et Satellite est scellé avec ChaCha20-Poly1305 IETF en utilisant une clé symétrique de 256 bits dérivée d'un échange de clés X25519 amorcé par un PIN d'appairage à quatre chiffres. La clé ne quitte jamais votre appareil ni le Satellite appairé, et le PIN est détruit après l'appairage. Pour le modèle de menace complet, voir /security/ sur ce site.
Pour signaler une vulnérabilité, voir SECURITY.md dans le dépôt Satellite.
13. Modifications de cette politique
Nous mettrons à jour cette politique si le comportement de l'appli change d'une manière qui affecte ce qui est décrit ici. Les changements matériels seront annoncés dans les notes de version de l'appli et la date « En vigueur le » en haut de cette page sera mise à jour. La version précédente de chaque politique est préservée dans l'historique git de ce site.
14. Contact
Confidentialité : privacy@tinkernorth.com
Sécurité : voir SECURITY.md dans le dépôt Satellite
Général : ouvrir une issue GitHub sur le dépôt dish-android
← Retour à l'index de confidentialité