TubPlayer is an IPTV player whose catalogue and viewing data are primarily stored on your device. Playlist credentials entered directly on the TV are encrypted locally. If you choose phone setup, the credentials you submit are temporarily relayed through our pairing service — hosted on Cloudflare, or on Google Cloud Firestore for older versions of the App — so your TV can retrieve them; that relay is not end-to-end encrypted. We collect anonymous crash reports to fix bugs. If you choose Google Drive backup, your encrypted backup file is stored in your own Google Drive account.

1. Who We Are

TubPlayer ("the App") is developed and published by Tubs Software ("we", "us", "our"). This privacy policy explains what data the App collects, how it is used, and the choices available to you.

2. Data We Collect

DataStorageShared?
Playlist credentials (server, username, password, playlist URL, or Stalker MAC)Encrypted on your TV; temporarily stored on our pairing relay if you choose phone setupOnly for optional phone setup, through Cloudflare or Google Firebase (see Section 3)
Playlist content (channels, movies, series, EPG)Device only; local SQLite databaseNever
Watch history & progressDevice only; local SQLite databaseNever
App settings & preferences (theme, parental PIN, display options)Device only; SharedPreferences (PIN is SHA-256 hashed)Never
Search historyDevice only; SharedPreferences (max 20 entries)Never
Crash reports & diagnosticsFirebase CrashlyticsAnonymous (see Section 4)
Backup files (if you enable cloud backup)Your Google Drive; AES-256-GCM encrypted before uploadYour account only (see Section 5)
Content metadata (posters, plots, ratings)Device only; fetched from TMDB, cached locallyNever

3. Playlist Credentials

Entering details directly on your TV

When you enter playlist details directly in the App, credential values are encrypted at rest on the TV using AES-256-GCM with a key protected by the Android Keystore. They are then used to connect from your TV to your IPTV provider. Preference names and other non-secret metadata may remain visible in the App's local preferences.

Optional phone setup

If you scan the setup QR code and enter details on tubplayer.com/setup.html, your server address, username, password, playlist URL, portal URL, MAC address, and any optional Stalker username/password you submit are sent over HTTPS to TubPlayer's pairing service and temporarily stored there. This allows the paired TV to collect the details.

Two pairing services are currently in use, and which one handles your details depends on the version of the App on your TV. Sessions started by current versions are handled by Cloudflare Workers and Durable Objects. Sessions started by older versions are handled by a Firebase Cloud Function and temporarily stored in Google Cloud Firestore. The setup page tells you which service is handling your session before you submit anything.

The phone-setup payload is encrypted in transit by HTTPS but is not end-to-end encrypted. While it is waiting to be claimed, the readable payload exists in our pairing service environment. Do not use phone setup if you are not comfortable with this temporary relay; you can enter the playlist directly on the TV instead.

A setup session normally expires after 15 minutes. The credential payload is removed when the paired TV claims it or when an expired session is next processed. The remaining session record is then scheduled for automatic deletion — by a scheduled task on Cloudflare, or by Google Cloud Firestore's TTL system for the older service. Deletion is asynchronous and may not happen immediately. Credentials submitted through phone setup are not sent to Firebase Analytics or Crashlytics and are not intentionally written to server logs.

Log messages that might contain stream URLs are sanitised in release builds to strip credentials before being written to Logcat or Crashlytics.

4. Crash Reports & Analytics

The App uses Firebase Crashlytics (provided by Google) to collect anonymous crash reports and non-fatal error diagnostics. Crashlytics is disabled in debug builds and enabled only in release builds.

What is included in crash reports:

What is never included:

Crashlytics data is governed by Google's Firebase privacy policy.

Firebase Analytics:

The App also includes the Firebase Analytics SDK, which is bundled with Crashlytics and supports its diagnostics. The App itself logs no custom analytics events. The SDK does, as standard Firebase behaviour, automatically collect a limited set of anonymous app-usage signals (such as app opens and session counts) and a pseudonymous app-instance identifier. This data is used only to support app stability and diagnostics — never for advertising and never to identify you. Advertising-ID collection and ad-personalisation are explicitly turned off: the advertising-ID permission is removed from the App, and the SDK's ad-ID and ad-personalisation signals are disabled. This data is governed by Google's Firebase privacy policy.

5. Google Drive Backup (Optional)

If you choose to connect your Google account for cloud backup, the App uses Google's drive.file scope. This is the most restrictive Drive scope available — it only allows the App to access files that it has created itself.

The App cannot read, list, or modify any other files in your Google Drive.

How backup works:

If you do not enable Google Drive backup, no data is sent to Google Drive and no Google account connection is made. Local backups to your device's Downloads folder are also available and do not involve any cloud service.

6. TMDB (The Movie Database)

The App uses the TMDB API to fetch content metadata such as movie posters, plot summaries, cast information, and ratings. These requests are made directly from your device to TMDB's servers and contain only the content title being searched — no personal information, credentials, or device identifiers are included. Fetched metadata is cached locally in the App's database.

TMDB is a third-party service governed by its own privacy policy.

7. Data Stored on Your Device

App data — including playlists, channel guides, watch history, favourites, parental settings, and preferences — is stored locally on your device in a SQLite database and Android SharedPreferences. Data is transmitted when required for features you choose, including connecting to your IPTV provider, fetching TMDB metadata, diagnostics described in Section 4, Google Drive backup described in Section 5, and optional phone setup described in Section 3.

The parental control PIN, if set, is stored as a one-way SHA-256 hash. The original PIN cannot be recovered from the stored hash.

8. Third-Party Services

ServicePurposeData Sent
Your IPTV providerStream content, fetch channel lists, EPGCredentials you configured
Cloudflare Workers & Durable ObjectsOptional phone-to-TV playlist setup (current App versions)Submitted playlist details and a pseudonymous session/network identifier for the short-lived relay (see Section 3)
Firebase Cloud Functions & Cloud FirestoreOptional phone-to-TV playlist setup (older App versions); Google Drive backup authorisationSubmitted playlist details and a pseudonymous session/network identifier for the short-lived relay (see Section 3)
Firebase CrashlyticsCrash reportingAnonymous diagnostics (see Section 4)
Firebase AnalyticsAnonymous app-usage diagnostics (bundled with Crashlytics; no custom events)Anonymous automatic usage signals; no advertising ID (see Section 4)
TMDB APIContent metadataContent titles only
Google DriveCloud backup (optional)Encrypted backup file to your own account
The App contains no advertisements and uses no advertising SDKs. Apart from the anonymous Firebase Analytics and Crashlytics diagnostics described in Section 4, the App performs no user tracking — your viewing activity, watch history, and credentials are never sent to any analytics or tracking service.

9. Children's Privacy

The App is not directed at children under the age of 13. We do not knowingly collect personal information from children. The App includes parental controls that allow a parent or guardian to restrict access to playlist management features using a PIN.

10. Data Retention & Deletion

All locally stored data can be deleted by:

Crashlytics data is retained by Google according to their standard retention policy (typically 90 days for crash data). We do not have the ability to associate crash reports with individual users.

For optional phone setup, the credential payload is removed when claimed or when expiry is processed. Sessions normally expire after 15 minutes. The remaining session record is scheduled for asynchronous deletion one hour after session expiry — by a scheduled task on Cloudflare, or by a Firestore TTL timestamp on the older service; actual deletion may occur later.

Google Drive backup files remain in your Google Drive until you delete them. Disconnecting Google Drive from the App does not automatically delete previously created backup files.

11. Changes to This Policy

We may update this privacy policy from time to time. The effective date at the top of this page will be updated accordingly. Continued use of the App after changes constitutes acceptance of the updated policy.

12. Contact

For questions about this privacy policy or how the App handles data, contact us at support@tubplayer.com.