Privacy Notice
Mahjong Face to Face
TL;DR
This game is fully offline and runs purely on your local network: game data travels only between your friends' devices and never touches a cloud server. We collect only anonymous usage statistics, to understand which rulesets and features are used and guide future work.
We collect nothing that can identify you: nicknames, room codes, seat credentials (playerToken), IP addresses, game records and hand contents are never reported.
What we collect
Anonymous usage statistics via Google Analytics 4 (through the Firebase Analytics Web SDK), strictly limited to:
- Feature usage: creating rooms, starting games, rematches, match settlement, replays;
- Ruleset distribution: share of Chinese Official / Japanese / Sichuan / Guangdong;
- Anonymous frequencies of chi, pong, kong and wins (aggregated per hand, no specific tiles);
- Connection stability: disconnect and reconnect counts.
All events are reported as anonymous aggregated parameters with no identity attached; host and clients are only distinguished by the hostclient role parameter.
What we never collect (privacy red lines)
- Nicknames — the name you sit down with;
- Seat credentials (playerToken) and room codes — kept only in your own browser session for reconnects;
- IP addresses — GA4 does not store full IPs by default;
- Game records and hand contents — no specific tile or discard sequence ever appears in analytics events;
- Any personally identifiable identifier — no accounts, no device fingerprinting, no cross-device profiling (Google Signals is not enabled).
How analytics works
- The analytics SDK is lazy-loaded as a separate bundle and never blocks game startup; if initialization fails it silently disables itself without affecting any feature;
- Older browsers without analytics support simply skip loading it — no errors;
- Ad blockers or private browsers blocking the analytics domain also fail silently; the game goes on as usual;
- Analytics data is processed by Google Analytics 4 under the Google Privacy Policy; we cannot identify any individual from it.
Android permissions & foreground behaviour
The host app (Android) requests the following system permissions, strictly for these purposes:
- Nearby Wi-Fi devices (Android 13+) / fine location (Android 12L and below only) — required to start a hotspot and identify the LAN. Used only to identify the Wi-Fi network: no location is obtained, stored or reported; on Android 13+ the permission is declared neverForLocation;
- Wi-Fi connection state / change Wi-Fi state — to start and keep the hotspot for friends to join;
- No background running — the app requests no background capability (no foreground service, no wake locks, no persistent notification): when the host backgrounds or locks the screen, the LAN service stops with it; reopening the app resumes the game from the autosave and friends rejoin with their original credentials;
- Network access — host-client communication on the LAN; anonymous analytics are sent when internet is available (see above).
Distribution channels & version differences
- Website direct-install build (APK downloaded from this site): includes in-app updates. Installing an update requires you to manually grant "install unknown apps"; that grant is only used to install new versions of this app (downloads are SHA-256 verified) and never installs anything else;
- Google Play build: no in-app updates and no "install unknown apps" permission — all updates go through Google Play;
- Both builds share identical features and privacy behaviour (same anonymous analytics and permissions; the Play build simply lacks the update permission).
Known limitations
- No analytics in offline hotspot games: when the host runs an internet-free hotspot, no device has upstream access, so analytics sends fail silently — gameplay is unaffected, only that session has no stats;
- Failed analytics events are not queued for retry;
- When clients have no internet only host-side data is visible, so reports carry some sampling bias.
Data deletion & contact
- We have no account system, and neither the server nor analytics store anything traceable to a person — there is no per-person deletion path because anonymous statistics cannot be linked to any individual;
- Seat credentials (playerToken), room codes and local preferences live only on your own device (browser sessionStorage/localStorage or the app's private storage); clearing browser data or uninstalling removes them;
- This page is effective as of 2026-08-30; changes will be published here with an updated date.
Questions about this notice: wallys_studio@163.com