Application: dOid Package: cz.tchalupnik.doid Version this describes: 0.3.0 on Android. On iPhone and iPad there are two builds and §2.6 is about both: 0.2.1 build 1, which is the only one anybody holds, and 0.3.0 build 1, which has been given to nobody Developer: Tomáš Chalupník Contact: support@doid.online Last updated: 2026-09-11
dOid records how the game is played, and sends a report when it crashes. It does not know who you are.
It is a single-player arcade game with no accounts, no advertisements, no purchases and no messaging. There is no sign-in, no name, no email address, and no field in this game to type anything into.
Two things happen in the background, and this document is mostly about them. The game counts a few moments — the menu appearing, a run starting, a run ending — and sends those counts to Google Analytics, so the developer can tell whether new players work out the controls and whether anybody plays twice. And if the game crashes, it sends a report about the crash to Google Crashlytics, so the crash can be fixed.
You are not asked first, and there is no switch in the game to turn either of them off. That is a deliberate decision by the developer, and this document says so plainly rather than implying a control that does not exist. §5 sets out what you can actually do.
Your scores and your settings are still written to your phone's own storage and still stay there.
This describes dOid version 0.3.0 on Android. On iPhone and iPad it describes two builds of the same game — 0.2.1, which testers have, and 0.3.0, which nobody has — and §2.6 is about both. Five versions of dOid have been on Google Play before this one, and none at all on the App Store. The copies Google Play distributed as 0.1.1, 0.1.2 and 0.1.3 collect nothing: no analytics, no crash reports, no network connection of any kind. If you installed one of those from Google Play, it stays that way until you update. 0.1.4 and 0.2.0 collect what §2.1 describes, and this version collects less than 0.2.0 did: a fourth moment that 0.2.0 reported has been taken out of the game and is reported by nothing here — §2.5 lists what moved. The game's menu screen shows its version, on the same line as the address that brought you here. On Android it reads v0.3.0 · privacy: doid.online/policy; on the iPhone build testers have it reads v0.2.1 in the same place, and §2.6 is why.
That line is what sent you here, and it does not tell you which copy you have. Builds made while dOid was being developed were never put on any store and carry the same version numbers as the releases that were — and some of the ones numbered 0.1.3 do collect what §2.1 describes. §8 says what to do if your copy did not come from Google Play.
Everything below goes to Google, which processes it on the developer's instructions. Nothing goes anywhere else, and nothing is sold.
What the game itself reports. Three moments, and no others:
| Moment | What travels with it |
|---|---|
| The menu appears after the splash screen | How many milliseconds the start-up took, and which band that falls in |
| A run starts | Whether it started from the menu or from PLAY AGAIN, and which run of this session it is |
| A run ends | How long it lasted, the score, what killed you, how quickly you first tapped, how many close passes you made, which of three things happened to the one close pass the game arranges for you three seconds in — you took it, you missed it, or the game never managed to place it — your longest chain, where the run placed in your own top-five table, a one-word verdict on the run — whether it was a new best, placed in your table, beat your best this sitting, or none of those — which run of this session it was, and how many runs you have played on this phone in total |
Every one of those is a number, or a word from a fixed list, about a run rather than about you. The list of words that can appear is short and fixed: menu, play_again, enemy, wall_left, wall_right, the four verdicts new_best, placed, session_best and none, the three words taken, missed and absent for the arranged pass, and the band names. The game sets no user identifier, no user property and no custom key — there are no such calls anywhere in its code.
A fourth moment was reported by the previous version and is gone from this one. 0.2.0 sent one report the first time you survived 30, 45, 60 or 100 seconds on a phone. That feature has been taken out of the game, so nothing here sends it, and §2.2 says what this version does with the values 0.2.0 left on your phone.
What Google Analytics reports by itself, whether or not the game asks. The first launch after installation, the start of a session, periodic engagement while the game is open, a screen being shown, an update to the app or to your phone's operating system, the app being uninstalled, its data being cleared, and an error. Alongside every one of those it attaches: a random number identifying this installation of dOid — not you, and not any other app on your phone — plus the app version, your phone's model, its operating-system version, its language, and a rough region worked out from your network address. dOid never asks for your location and has no way to. The region is derived from a masked address by Google and it is approximate — a country, not a place.
What is sent when the game crashes. A description of where in the code the failure happened, the state the game was in, and details about the phone — model, operating-system version, memory and similar. A separate random number identifies this installation for crash reporting. Nothing is sent unless the game actually fails. Failures in the game's compiled code are covered too: this version ships the crash reporter's native handler, not only the one that watches the game's own scripting.
What is never sent. No name, email address, phone number, contacts, calendar, photos, files, camera or microphone. No precise location. No advertising identifier — this app declares no permission that would let it ask for one, by either of the two routes Android provides, and it switches the collection of it off explicitly. 0.1.4 declared one of those two; 0.2.0 removed it, and this version declares neither, exactly as 0.2.0 did — §2.5 records the change and §2.4 says what removing it did. No account of any kind, because there is none. No score is submitted anywhere; the table of your five best runs stays on your phone.
Whole numbers, written to the app's own private storage. This version stores four things fewer than the last one did, and it deletes values that earlier versions left on your phone.
| What | Why | Shown in the game? |
|---|---|---|
| Your best score | So the game can show it, and tell you when you have beaten it | Yes |
| The four next-best scores under it | The game keeps a table of your five best runs | The top three are drawn as marks while you play; the fourth and fifth are only stored |
| How many runs you have played on this phone | It is reported with each run, so the developer can see whether people come back | No. It is stored and sent, never displayed |
| Whether sound is on | Your setting | Yes |
| Whether reduced motion is on | Your setting | Yes |
| Whether vibration is on | Your setting | Yes |
Three of the nine are never shown to you anywhere in this version: the fourth and fifth entries in your score table, and the run count. The run count is the only one of the three that also leaves the phone. Saying so seemed better than leaving any of them off a list headed "everything".
This version also deletes values that earlier versions wrote, rather than leaving them alone — and which ones depends on which version you had.
This version removes whichever of them your phone holds, the first time you open it, before any part of the game starts. The reason is the same for both and it is not a privacy improvement: the features they were being kept for are gone. The survival marks were taken out of the game by the developer; the chain feature the other two were kept for was never built. Nothing replaces either of them. Neither set was ever sent anywhere, so there is nothing to delete anywhere else.
No phone loses more than four, and no phone loses both sets. 0.2.0 deleted the two chain values the first time it was opened, before any survival mark could be written — so a phone that has only ever moved forward holds either the two or up to the four, and never all six.
That is about storage, not about §2.1. The end of every run still reports the longest chain in that run, and it always did; the figure is worked out while you are playing and is gone from the game's memory when the run is over. What has stopped is any of it being written to your phone.
Scores are kept separately for each scoring rule the game has had, so a run played under the older rule is never ranked against one played under the newer one. That is the only reason a phone upgraded from an earlier version of dOid can hold one number more than a fresh installation does.
Nine numbers on a fresh installation, and at most ten on any phone — that is everything dOid itself writes. Every one of them is a whole number: the game has no way to write text to your phone at all, so there is nothing free-form here and nothing that could carry a name. All of it is private to the app, none of it identifies you, and all of it is deleted when you uninstall dOid.
Two more things are stored on your phone, and dOid does not write them. Google's libraries keep the two random installation numbers described in §2.1 — one for analytics, one for crash reporting — in the app's own private storage, so that the same installation can be recognised across launches. Clearing the app's data or uninstalling removes them, and a later launch generates new ones.
dOid is built on Unity and ships with software libraries from Google and from Unity. Some of them now run; the rest are present and inert, and the difference is the point of this section.
| Packaged | State in this version |
|---|---|
| Google's Firebase Analytics | Running. Switched on in the app's manifest, for every player, with no in-app switch. §2.1 lists what it sends |
| Google's Firebase Crashlytics | Running, including its handler for failures in compiled code. §2.1 lists what it sends |
| Google's advertising library | No advertisement is requested, loaded or shown, and the library is never started by the game. A small piece of it does run before the game starts: it reads dOid's own settings, checks the account number in them is well-formed, and writes one line to the phone's log. It opens no connection and reads no identifier about you |
| Unity's sign-in and leaderboard components | Never started. No sign-in is attempted, no identifier is created and no score is submitted. Two independent switches stand between this packaged code and any identifier being created, and both are off in this version. The components register what they could provide when the app starts, and stop there |
A library that is present but never runs collects nothing. Where that distinction is doing work — the advertising library starts a small piece of itself before the game does — it is stated rather than glossed.
Read out of the built app rather than from a list someone typed. This version holds eight, exactly as the last version did. Nothing was added and nothing was removed — read side by side, the whole of this app's merged manifest is identical to 0.2.0's apart from the version number itself. The paragraph after the table is about two permissions that went at 0.2.0, and it is kept because the last description of dOid explained them.
dOid itself declares one Android permission, for vibration. The rest are added automatically by libraries the game is built on, and each row names which one asks for it.
| Permission | What it is for | Which library asks for it |
|---|---|---|
VIBRATE | Driving the phone's vibration motor. The game asks for a short pulse at four moments: the tap that reverses the dot, the same tap while a run is starting, a button press, and the instant you die. This permission reads nothing. Driving the motor is the only thing it can do; there is no information to come back through it | dOid's own manifest. Of the 77 library archives in this app, not one declares it |
INTERNET | Opening a network connection. This version uses it — it is how the reports in §2.1 leave the phone | Google's advertising, measurement, crash-reporting, data-transport and Firebase Installations libraries, and the Unity advertising wrapper |
ACCESS_NETWORK_STATE | Checking whether a connection exists before using one | AndroidX WorkManager, and the same Google libraries |
WAKE_LOCK | Keeping a background task running long enough to finish | AndroidX WorkManager, Google's measurement libraries |
RECEIVE_BOOT_COMPLETED | Letting a library re-schedule its own background work after the phone restarts. dOid schedules none | AndroidX WorkManager, Google's advertising library |
FOREGROUND_SERVICE | Running a background task with a visible notice. dOid runs no service and shows no notice | AndroidX WorkManager, and nothing else |
BIND_GET_INSTALL_REFERRER_SERVICE | Reading how the app was installed from the Play Store app. No feature of dOid reads it | Google's measurement libraries |
cz.tchalupnik.doid.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION | A permission the app defines for itself and about itself, so one part of the app can hand a message to another part without any other app on your phone being able to listen. It grants nothing to anybody else: only software signed with the same key as dOid can hold it, and nothing else on your phone is | AndroidX Core. The library asks for it under the app's own name, and the name is filled in when the app is built |
Eight rows, and that is the whole list — read out of the built app's own manifest, not assembled from what the app was meant to ask for.
0.1.4 declared two more, and 0.2.0 removed both. They are still out. Both belong to Android's Privacy Sandbox, both were asked for by two of Google's measurement libraries, and neither was asked for by dOid. They were removed by dOid's own build instructing Android's manifest merger to drop them — the libraries still ask for them, and the app now overrides the request.
ACCESS_ADSERVICES_AD_ID permitted an app to ask the Privacy Sandbox for the advertising identifier. Removing it changed no behaviour, because nothing in dOid could ever have used it: the class and the method that would make that request are not in the built app, and were not in 0.1.4 either. This one was a declaration with no code behind it.ACCESS_ADSERVICES_ATTRIBUTION permitted an app to report an installation back to whatever advertised it. Removing this one did change something. The code behind it is in the app — Google's measurement library ships it, in this version as in the last — so until now the honest reason nothing was reported was that dOid buys no advertising and there was nothing to report to. That is a fact about the developer, and it would stop being true the day dOid ran an advertising campaign. It is now a fact about the app instead: without the permission the capability is closed off whatever anyone later decides to do.Nothing in the two removals affects what §2.1 describes. The reports listed there do not travel through the Privacy Sandbox, and the answer to Google's data-safety question about the advertising identifier was No before the removal, No after it, and is No here. What changed is what the No rests on, and it now rests on less.
One thing was deliberately not removed, said here so it is not read as an oversight. The built app still contains a line declaring the Privacy Sandbox as an optional library it can be linked against. That is a statement about linking, not a permission, it grants nothing, and removing permissions does not remove it.
You are never prompted to grant any of these. Not one is the kind of permission Android asks you about. Every one is granted by the system at install time, with no dialog and no choice to make.
No location permission of any kind is in this app, coarse or precise. The approximate region described in §2.1 is worked out by Google from a network address, which needs no permission and gives no better than a country.
Recorded because earlier versions of this document said otherwise, and anyone comparing them deserves an explanation rather than a silent edit.
| Was described | Now |
|---|---|
| "dOid does not collect anything. Nothing you do in this game leaves your device." | No longer true. It was true of the copies Google Play distributed as 0.1.1, 0.1.2 and 0.1.3 — three of the four versions it has carried before this one, and §8 says why that qualifier is there. The fourth, 0.1.4, was the first that collected, and this version sends what §2.1 describes. The change was made deliberately by the developer, and this document was rewritten for it |
| Firebase Analytics "switched off at the platform level, permanently for this build" | On. The earlier build used a setting no running app could reverse; this one uses the ordinary setting, which a consent choice could switch off if one is ever built |
| Crash reporting "gone, and the library itself was removed rather than disabled" | Back, and running, including its handler for failures in compiled code |
| "The game opens no network connection of any kind" | It opens one, for the two purposes in §2.1. The game still plays exactly the same offline — no part of the gameplay waits on a network |
| "At most eleven numbers, and that is everything dOid stores" | Nine on a fresh installation, and at most ten on any phone, plus the two identifiers Google's libraries keep. The figure was eleven, then twelve, then thirteen; this version is the first that stores fewer than the one before it, and it removes what earlier versions left. §2.2 |
| Seven permissions, then ten, then eight | Eight again, and unchanged. §2.4. Nothing was added and nothing removed at this version; the two that went at 0.2.0 are still out, and one of them removed a capability the app really had rather than tidying a declaration nothing could reach |
| "Three moments, and no others" are reported, then "Four" | Three again. §2.1. The fourth existed only in 0.2.0 — it fired the first time you survived 30, 45, 60 or 100 seconds on a phone, once each, ever — and the feature behind it has been taken out of the game. The end of a run now carries one more detail than it did, about the close pass the game arranges for you; §2.1's table says what it is |
| An advertising identifier that "may be accessed", and later a permission whose name suggested it might be | Still not accessed, and now the permission is gone too. 0.1.4 needed a paragraph explaining a Privacy Sandbox permission it declared but could not use. This version does not declare it |
| A score submitted to an anonymous leaderboard | Still not submitted. There is no online leaderboard in dOid, the anonymous sign-in that created an identifier for it is still off, and the five-run score table is on your phone and holds only your own runs |
| An anonymous player identifier | Still not created by Unity's components. Two different random numbers are created, by Google's analytics and crash libraries — §2.1 |
| Advertisements | Still none. They return in a later version, and this document will be rewritten before that version ships |
| The Facebook SDK | Gone, entirely and some time ago. There is no login of any kind |
| Notifications | Gone. The app sends none and can send none |
There are two iPhone builds of dOid, and this section is about both — because the one you could be holding is not the one this page is named after.
| Build | What it is | Who has it |
|---|---|---|
| 0.2.1, build 1 | The only iPhone build Apple has ever accepted | Testers, through Apple's TestFlight. It is the only iPhone build of dOid Apple has distributed to anybody |
| 0.3.0, build 1 | Made on the developer's computer on 11 September 2026, from the same source as the Android version this page is named after | Nobody. It was not made in a form that can be installed, it has not been uploaded, and no one has run it |
If you have dOid on an iPhone, you have the first one, and every sentence below is true of it. You can also be reading this page on an iPhone without having the game at all, and most people who reach it are. The second is described here as well because this page is named after 0.3.0, and a page that named only the build nobody has would describe nothing anybody could check.
The same two things collect on both, they collect the same things, and that is measured rather than assumed. The two builds send the same events carrying the same fields and write the same values to your phone — established by reading both, not by reasoning from one to the other, and the reading is in Where these readings come from at the end of this section.
So §2.1 and §2.2 are true of both, as they are of the Android build. §2.4's permission list is Android's alone: iOS has no equivalent, for the reason the fifth bullet below gives.
§2.3's table is written from the Android build, and one of its four rows is Android's alone. The row about Google's advertising library does not describe either iPhone build — what is and is not in them is the What is not in either iPhone build list below, and it is different answer. The other three rows — Analytics running, Crashlytics running, and Unity's sign-in and leaderboard components packaged and never started — are true of all three builds.
§1 is true of both except for one thing you can see: the version the game draws on its menu screen. The build you have draws v0.2.1, not v0.3.0. The build nobody has draws v0.3.0, exactly as the Android one does. The address beside it is the same in every one of them, and it is the address that brought you here.
Apple has accepted no iOS 0.3.0, and Google Play no Android 0.2.1. The Android 0.2.1 has never been built. The iOS 0.3.0 has been built — it is the second row above — and it has been given to nobody: it was made in the form an app store is uploaded from, which is not a form any phone can install. Its own build record says so in those words: not uploaded, not installed, not played.
Nobody has downloaded dOid from the App Store, and this page is not evidence that anybody will. The app has never been submitted for review and there is no App Store release. If you have reached this page from an App Store link, it was from an app record rather than from a game you installed.
This whole section is new: until September 2026 no version of this page named an iPhone at all.
Google Analytics for Firebase and Firebase Crashlytics are in both iPhone builds, and they do what §2.1 describes, for the reasons §2.1 gives. You are not asked first on iPhone either, and there is no switch in the game to turn either of them off. Each build's own record shows the setting that would switch Analytics off is absent from the app, which leaves collection on.
Read from each build's own record rather than from a list of what was intended, these are the third-party components linked into them: FirebaseAnalytics, FirebaseCore, FirebaseCoreExtension, FirebaseCoreInternal, FirebaseCrashlytics, FirebaseInstallations, FirebaseRemoteConfigInterop, FirebaseSessions, GoogleAppMeasurement, GoogleAppMeasurementIdentitySupport, GoogleAdsOnDeviceConversion, GoogleDataTransport, GoogleUtilities, and three small support libraries (FBLPromises, Promises, nanopb). They are Apple's form of the same Firebase and Google measurement libraries the Android build carries. That list of sixteen is identical in both iPhone builds — read out of each build's own record separately and compared, rather than read once and carried across. Where the two platforms differ is advertising, and the next list is that difference.
Two of those names look like advertising, and they are named here rather than left for somebody to find. GoogleAdsOnDeviceConversion measures whether an advertisement led to an installation. dOid buys no advertising and has nothing to attribute, the advertising SDK that would use it is in neither build, and nothing in the game starts it. GoogleAppMeasurementIdentitySupport is the piece that would let Google's measurement library read the advertising identifier if the app were ever permitted to — and the second bullet below is why it never is.
Neither was asked for by dOid, and this much about where they come from is now established. The app's build asks for exactly three things — Firebase's analytics, core and crash-reporting components — and the sixteen above are everything those three drag in behind them. So both names arrive underneath Firebase. Which Firebase component asks for each one is not established here, and this page does not guess: it would be working backwards from counts in a build log, which is a guess dressed as a reading.
SKAdNetworkItems list, which an app carries to let advertising networks be credited for an installation, is one of those four entries and is not written either.They are read from the builds, not from the project's settings. Making an iPhone app leaves a record of which libraries were linked into it and what the build's own checks found, and that record exists for both builds. The two lists above are read out of it.
Read out of both, separately, and compared. That is what lets this section say the same two things collect on both rather than assuming it: the sixteen libraries are the same sixteen, the advertising checks pass in both, the same four entries are unwritten in both, and the game's own list of what it reports and what it stores is character-for-character the same in the source each was built from. The comparison can tell builds apart when they differ — run against the version Google Play is distributing today it reports the differences that version has.
One difference between the two builds is worth naming so it is not found and misread. The newer one writes a declaration into itself that the older one does not: a statement to Apple about encryption, for customs and export rules. It says nothing about you or about data collection, it is the developer's own answer to Apple's question rather than anything measured from the app, and it is recorded outside this document with the rest of the store paperwork.
They are not a reading of any file Apple has, and they are not a reading of any file you could install. Both builds were made on the developer's own computer. For the build Apple accepted, nothing here names its bytes at all — no fingerprint of it was ever written down where these checks could read one. For the newer build a fingerprint exists, but it was written down by the computer that made the file rather than checked here; those bytes have never been on the machine these checks run on. The build records are the closest thing to the artefacts that exists here, and they are not the artefacts. §8 says what to do if the copy you hold does not match what you read.
Nothing about either iOS build has been examined by anybody qualified, and the same is true of every other sentence on this page.
dOid is not directed at children. Its intended audience is 13 and over, which is what is declared to Google Play.
The app does not ask your age, does not infer it, and makes no claim about it to anyone.
There is no setting in dOid to switch this off, and no dialog asks you first. Saying so is the point of this section.
What you can do:
The advertising identifier is not collected on either platform, so there is nothing there for you to opt out of. On Android it remains yours to reset or switch off at any time in Settings → Privacy → Ads. On iPhone and iPad the question does not arise: §2.6 explains that dOid cannot ask for permission to read it, so there is no choice for you to have made and none to revisit.
If a future version serves advertisements, a consent choice will be presented in the European Economic Area, the United Kingdom and Switzerland before any advertisement loads, and this document will be rewritten before that version ships. That is true whether or not those advertisements are personalised.
If you are in the European Economic Area or the United Kingdom, the GDPR gives you rights of access, rectification, erasure, restriction, portability and objection — and there is something to exercise them against, which was not true of the copies Google Play distributed as 0.1.1, 0.1.2 and 0.1.3. It became true with 0.1.4 and it stays true here.
One limit has to be stated rather than glossed. What is held is filed under a random number generated on your phone. There is no name, email address or account attached to it, so a request arriving by email cannot be matched to your rows without something to match on. What that means in practice: stopping collection and resetting the identifiers is entirely in your hands, by clearing the app's data or uninstalling; matching an existing record to you needs that number, and this version does not show it to you anywhere. So the honest answer to a request to delete what is already held is that it cannot be located, while stopping any further collection is something you can do yourself at any moment.
Write to the address in §9 and you will receive a reply within 30 days.
The current version always lives at the address you reached this page by, and the Last updated date at the top changes when it does. There is no mailing list to notify, because dOid collects no email address.
This document describes one version of the app. A later version that serves advertisements, or that adds a leaderboard, will collect data this one does not, and this document will be rewritten and re-dated before that version reaches anybody.
The App Store has never carried dOid at all. There is no earlier iPhone version to differ from this one, no iPhone copy of dOid in anybody's hands from before it, and nothing on this page about 0.1.1, 0.1.2, 0.1.3, 0.1.4 or 0.2.0 describes an iPhone. §2.6 is the whole of what an iPhone reader needs from this section.
Google Play has carried five versions of dOid before this one, and they do not all behave alike. The copies it distributed as 0.1.1, 0.1.2 and 0.1.3 transmitted nothing at all; §2.5 lists the sentences that were true of them and are not true of this one. 0.1.4 was the first that collected. 0.2.0 collected one thing more than this version does — the fourth moment §2.1 and §2.5 describe — and this version neither sends it nor keeps what it wrote. If you are reading this page while holding an older copy of dOid that came from Google Play, §2.1 does not describe your copy.
Every sentence on this page about 0.1.1, 0.1.2, 0.1.3, 0.1.4 and 0.2.0 is about what Google Play distributed under those names, and that qualifier is doing real work rather than being lawyerly. Builds were made while the game was being developed that were never put on any store, and they carry the same version numbers as the releases that were. They are not all the same software. In particular, some builds numbered 0.1.3 collect exactly what §2.1 describes — they were made after the developer switched collection on and before the version number was raised to 0.1.4. Only one 0.1.3 was ever released through Google Play, and that one collects nothing.
The version line the game draws is identical in every one of them, so it cannot tell them apart and neither can this page. If your copy of dOid did not come from Google Play, write to the address in §9 with the version number you see and you will be told what that particular build does.
This is the same address shown on the app's store listing. Write to it about anything in this document.