Privacy policy
Privacy policy
Last updated 2026-07-17
Midnight Mahjong Solitaire is operated by TLM Software Design, Inc., a Michigan corporation with offices at 27280 Haggerty Road, Ste C-6, Farmington Hills, MI 48331, USA ("we", "us", "our"). This policy describes what the app collects, why, where it goes, and the choices you have.
Summary
- The game itself is fully offline. We don't run a server that your gameplay touches.
- Your selected layout, tile set, audio settings, and per-layout wins/best-times/streaks live only on your device and are lost on uninstall.
- No account, no sign-in, no profile lookup. We never see your name or your progress.
- The only network traffic the app generates is to Google AdMob (ads), RevenueCat (purchase verification for the one-time Mahjong Unlimited unlock), and Google Firebase (crash reports and basic install/lifecycle analytics).
- On iOS the app does not request App Tracking Transparency and does not read the IDFA. Ad personalization is otherwise governed by Google AdMob, applicable regional consent (GDPR / CCPA), and your device-level ad settings.
What the app stores on your device
The following values are written to platform key-value storage
(SharedPreferences on Android,
NSUserDefaults on iOS). None of it is
transmitted to our servers, the ad network, or any third party.
- Selected layout and tile set — which of the 5 board layouts and 5 tile themes you last chose.
- Per-layout stats — wins, best completion times, and current streak. Nothing is uploaded to a leaderboard; there isn't one.
- Hint balance — how many of today's free hints remain (resets daily; not tracked once Mahjong Unlimited is unlocked, since hints are unlimited).
- Audio settings — independent toggles for background music and game sound effects.
- Mahjong Unlimited entitlement flag — a cached boolean (set by RevenueCat on successful purchase/restore) so the app can skip the paywall without a network round-trip on every launch. RevenueCat is the authoritative source; this cache is advisory only.
There is no account, no cloud sync, no backup target. Wiping the data is one app-uninstall away.
Network behavior
Gameplay is fully offline. Dealing, matching, undo, hints, the timer, and stats all run locally. Only three external services receive traffic:
- Google AdMob — when the app needs to fetch an ad creative (banner, an interstitial every 3rd game, or an optional rewarded video for bonus hints).
- RevenueCat — when you initiate or restore the Mahjong Unlimited purchase.
- Google Firebase — Crashlytics uploads on crash, Analytics on app-launch and lifecycle events.
If the device is offline, the game runs normally. Banner and interstitial slots remain reserved but blank, and the purchase flow retries once connectivity returns. Crash reports queue locally and upload on the next connectivity window.
Android permissions
The app declares exactly three permissions in its Android manifest:
android.permission.INTERNET— required for AdMob, RevenueCat, and Firebase.android.permission.ACCESS_NETWORK_STATE— lets the app check connectivity before a network call.android.permission.VIBRATE— haptic feedback on tile interactions.
No camera, microphone, location, contacts, storage, calendar, or biometric permissions are requested.
Ad network — Google AdMob
The free tier of Midnight Mahjong Solitaire is ad-supported. Google AdMob serves:
- A banner ad on the board screen.
- An interstitial ad every 3rd game started.
- An optional rewarded video, shown only if you choose "watch an ad" for a bonus hint after your daily free hints are spent.
On iOS the app does not request App Tracking Transparency and does not read the IDFA, so iOS ads are served without that identifier. The app does not set ad-personalization flags itself — whether ads are personalized is governed by your Google AdMob settings, applicable regional consent (GDPR / CCPA), and your device-level ad preferences. AdMob's data practices are governed by Google's privacy policy at policies.google.com/privacy and the AdMob & AdSense privacy and terms page at policies.google.com/technologies/partner-sites.
Purchasing the one-time Mahjong Unlimited unlock ($3.99) permanently removes all ads — banner, interstitial, and the rewarded-hint offer.
In-app purchase — RevenueCat
The Mahjong Unlimited non-consumable purchase ($3.99) is managed by RevenueCat. When you initiate or restore a purchase, RevenueCat receives an anonymous, app-generated user ID and the store receipt to verify the entitlement. Payment itself is handled entirely by Apple App Store or Google Play — we and RevenueCat never see your payment method or financial details.
Crash reporting and analytics — Google Firebase
Firebase Crashlytics captures stack traces, device model, OS version, app version, and a Firebase installation ID when the app crashes. Firebase Analytics records a small set of install and lifecycle events, on both iOS and Android. Neither service receives gameplay data, board state, your stats, or your saved settings.
Firebase data is governed by Google's privacy policy. Default retention is up to 14 months for Analytics; Crashlytics reports can be purged on demand from the Firebase console.
Children
Midnight Mahjong Solitaire is intended for a general audience aged 13 and up (16 in the EU/UK). It is not listed as a children's app and is not directed at children, and we do not knowingly collect personal data from children. If you believe a child has interacted with the app and we have collected anything we shouldn't have, contact privacy@swtlm.com and we will delete it.
Your rights and choices
Because we hold no account data or personally identifiable information on our servers, most data-subject rights — access, portability, deletion — are satisfied by uninstalling the app, which removes all on-device storage. Ad-personalization preferences can be managed through your device's settings (Settings › Privacy › Ads on Android; iOS Tracking is never requested). For AdMob or Firebase data held by Google, see Google's privacy controls.
To exercise any rights or raise a privacy concern, email privacy@swtlm.com and we will respond within 30 days.
This website
These pages (apps.swtlm.com/mahjong-solitaire) are
static and hosted on AWS S3 + CloudFront. As of this
writing, no Google Analytics (or any other) tag is wired into this site — it loads no
third-party scripts and sets no cookies at all. If GA4
is added in a future update, it will only load after you explicitly accept via a cookie
banner, and this section will be updated to describe the consent-gated analytics cookies
(_ga, _ga_*)
and how to withdraw consent. The only data that flows today is standard CDN access logs
(IP address, timestamp, requested URL) retained by AWS per their default logging policy —
not joined to any in-app identifier.
Service providers
- Google AdMob — in-app advertising (banner, interstitial, rewarded video).
- RevenueCat — Mahjong Unlimited in-app purchase management and entitlement verification.
- Google Firebase — Crashlytics + Analytics.
- Amazon Web Services (S3 + CloudFront) — hosts this marketing page; receives standard CDN access logs that are not joined to any in-app identifier.
Changes to this policy
We will post material changes here and update the "Last updated" date above.
Contact
Privacy questions: privacy@swtlm.com. General support: info@swtlm.com.
TLM Software Design, Inc.27280 Haggerty Road, Ste C-6
Farmington Hills, MI 48331
USA