Last updated: 2026-07-28 — this version adds the "Crash reporting" section, which is new in app version 1.7.0, and explains why the Google Play listing labels that reporting "Analytics".

Information We Collect

SunZones uses location data ONLY to calculate sunrise, sunset, twilight, and daylight times for your saved locations. Location data is:

  • Used locally on your device — SunZones operates no servers of its own and sends your locations to no server, ours or anyone else's.
  • Stored on-device in the app's local database (Room) only for locations you explicitly save. SunZones explicitly excludes that database from Android cloud backup.
  • Required permissions:
    • ACCESS_FINE_LOCATION — to detect your current location when you tap "Use GPS" to add a location.
    • ACCESS_COARSE_LOCATION — fallback for current location.
    • POST_NOTIFICATIONS — required by Android to show local sunrise/sunset/golden hour reminders you enable. See "Notifications" below.

About the INTERNET permission

SunZones declares the INTERNET permission. It is required by the Google Play Billing library, which bundles Google's standard data-transport component; the permission would be present in the installed app through that library even if we removed our own declaration.

Since version 1.7.0 SunZones also uses the network for one purpose of its own: sending crash reports, described under "Crash reporting" below. Apart from that, SunZones has no backend, no API, no account system and no sync service. Nothing you enter into the app — no place you save, no coordinate, no setting — is sent anywhere by us.

Device backup and transfer

SunZones explicitly excludes its location database (including saved names and coordinates) from Android cloud backup. On Android 12 and later, Android may still carry that database during a direct, encrypted device-to-device transfer when you move to a new phone. That transfer stays under your physical control and is governed by Android's transfer process; SunZones has no access to it. The cached Pro entitlement is excluded from both cloud backup and device transfer because it is device-bound and is restored from Google Play instead.

City Search (Geocoder)

When you search for a city by name, SunZones asks the Android operating system's built-in Geocoder service to resolve it to coordinates. This lookup runs as a system service outside the SunZones app process — SunZones itself never makes a network call. Depending on your Android version and device, the OS-level Geocoder may query Google's servers to perform this lookup; that exchange is governed by Google's Privacy Policy (see "Third Parties" below), not by SunZones.

Notifications (Optional, Local Only)

SunZones can show optional reminders for sunrise, sunset, and golden hour. These reminders are:

  • Scheduled entirely on-device using Android's local alarm/notification APIs.
  • Never sent from a server — there is no push notification service, no backend, and no account involved.
  • Fully under your control: enable, disable, or adjust them anytime in the app, or deny/revoke the notification permission in Android system settings.

Purchases (SunZones Pro)

SunZones offers an optional, one-time in-app purchase ("SunZones Pro") that unlocks additional features. All payment processing is handled entirely by Google Play's billing system:

  • SunZones never sees, receives, or stores your payment details (card numbers, billing address, etc.). Those stay with Google Play and are governed by Google's Privacy Policy and the Google Play Terms of Service.
  • The app communicates with the Google Play Store app on your device to display the price, start a purchase, and verify whether SunZones Pro is owned. SunZones makes no network calls of its own.
  • The only thing SunZones stores on your device is whether Pro is unlocked, so the app works offline.
  • Refunds and payment management are handled through Google Play (https://play.google.com/store/account).

Home Screen Widget

SunZones offers an optional home screen widget showing sun times for a chosen location. The widget reads the same on-device data as the app and does not collect or transmit any additional information.

Crash Reporting (On by default, and you can turn it off)

Since version 1.7.0, SunZones sends crash reports to Firebase Crashlytics, a service operated by Google. This is the only thing SunZones itself transmits.

It is on by default. If you would rather it were not, open Settings → Diagnostics in the app and turn off "Send crash reports". Turning it off stops future reports and also deletes any report still waiting on your device to be sent.

Why it exists. Version 1.6.4 shipped a bug that crashed the app on every launch. Without crash reports there is no way to learn that from anyone except the few people who write in, and no way to see the line of code responsible. That is the entire purpose; there is no other use of this data.

What SunZones removes before a report leaves your device. The app rewrites each report first, replacing:

  • the coordinates of any place, wherever they appear in the text of an error;
  • the names of the places you have saved.

What a report still contains, and you should know about. Removing something from an error message does not make the report empty. It carries:

  • the crash itself — the type of error, its message after the removals above, and the stack trace showing which lines of code ran;
  • how many places you have saved (the number, never the places);
  • information Google's library adds below any layer SunZones can reach: a Crashlytics Installation UUID and a Firebase Installations ID — pseudonymous identifiers for this installation of the app, not for you or your device, which are regenerated if you reinstall the app or clear its data — together with your device brand and model, Android version, screen orientation, free memory, free storage, and whether the device is rooted.

SunZones cannot strip that last group. It is generated and sent by Google's library itself. This policy names it rather than implying it does not exist.

Who processes it, and for how long. The processor is Google (Firebase Crashlytics), under Google's Privacy Policy: https://policies.google.com/privacy. Per Firebase's own documentation, Crashlytics keeps crash stack traces and the associated identifiers for 90 days before beginning to remove them from live and backup systems.

Legal basis (GDPR). Legitimate interests, Art. 6(1)(f) — keeping the app from crashing for the people using it. Because reporting is on by default, it is deliberately not described here as consent: consent under the GDPR has to be an affirmative act, and a switch you have to find and turn off is not one. The switch in Settings → Diagnostics is your right to object under Art. 21, and it takes effect immediately. No crash-report data is used for advertising, profiling, or any automated decision-making.

What We DON'T Collect

  • No advertising identifiers
  • No personal information (name, email, account)
  • No account, login, or profile
  • No cloud sync or backend operated by SunZones — the app runs no server; saved locations are excluded from Android cloud backup

On analytics: SunZones integrates no analytics or tracking SDK and sends no usage data to anyone — nothing about which screens you open, which features you use, or how long you spend in the app. Firebase Analytics is deliberately not enabled in this project, which is why the crash reports described above carry no "breadcrumb" trail of your activity: that feature requires Analytics, and Analytics is absent.

It does integrate one crash-reporting SDK, Firebase Crashlytics, described under "Crash reporting" above. That is a deliberate exception to an otherwise absolute rule, it is the only thing the app transmits, and it has a switch.

Why the Play listing says "Analytics", and what that does not mean. Google Play's Data Safety form does not let a developer write their own purpose; it offers a fixed list, and the entry that covers crash reports is the one Google labels Analytics — its own definition of it reads "to monitor app health, to diagnose and fix bugs or crashes". That is the purpose declared for the crash reports described above, which is why SunZones' Data Safety card on Google Play shows Data used for: Analytics.

It does not mean SunZones measures how you use it. Everything in the paragraph above still holds: no analytics SDK, no usage data, nothing recorded about which screens you open or how long you stay. The only thing declared under that label is the crash report — one payload, sent only when the app has crashed, only while the switch is on, with your coordinates and the names of your saved places removed before it leaves. If the two statements look like they disagree, it is because Google's word for the purpose and the ordinary word for the data are the same word, and they mean different things here.

Third Parties

  • Firebase Crashlytics (Google) — receives the crash reports described under "Crash reporting", when that setting is on. Subject to Google's Privacy Policy: https://policies.google.com/privacy
  • Google Play Services Location API (FusedLocationProviderClient) — used to obtain your device's GPS location when you tap "Use GPS". Subject to Google's Privacy Policy.
  • Google Play Billing — processes the optional one-time purchase and bundles Google's diagnostics transport. Subject to Google's Privacy Policy.
  • Android Geocoder — a built-in OS service for converting city names to/from coordinates. It runs outside the SunZones app and may query Google servers depending on your Android version. Subject to Google's Privacy Policy.

Your Rights

Delete the app to remove all data stored by SunZones on your device. There is no external account to manage and, apart from crash reports, we hold no copy of your data. Saved locations are excluded from Android cloud backup.

On crash reports specifically: turning off Settings → Diagnostics → "Send crash reports" stops future reports and deletes any still queued on your device. Reports already delivered to Firebase are identified only by a per-installation identifier, so there is no reliable way to hand you back "your" reports or delete only them — they age out under the 90-day retention above. Clearing the app's data or reinstalling resets that identifier, which severs any link between past reports and future ones. If you want to raise anything about this, write to the address below.

Contact

pawel@orzech.me