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