AppTelemetry was designed from the ground up with privacy in mind. An important principle of AppTelemetry is to only save the least amount of data it absolutely needs, and to not save any data that can be used to identify specific users' identities.
That is why the AppTelemetry Client code is completely open source, so that users and developers can see for themselves the data that AppTelemetry saves.
Any data that is transmitted to the analytics server consists of the following:
- An anonymized user identifier. The identifier is constant for each app install but cannot be traced back to any personally identifiable information.
- An action taken, such as "App Launched" or "Settings Opened". These actions are defined by the developer.
- A time stamp when the action was taken.
- Device metadata, namely platform, system version, app version, build number, if the build was downloaded via App Store or TestFlight, and the device model type (i.e. iPhone X, iPad Air, or iPhone 12).
IP addresses are never stored on the AppTelemetry Server, neither in the database, nor in any log files, nor at any other place.
A developer is a person who creates or maintains an app which includes the AppTelemetry Client code. They are responsible for making sure they only hand anonymized data to the AppTelemetry Client.
The AppTelemetry Client is the code that transmits data to the AppTelemetry Server. It can be viewed on GitHub in its entirety.
A user is a person who uses any app created by a developer. It is our job to make sure their data stays safe.
A signal is one instance of data sent from the app to the AppTelemetry Server using the AppTelemetry Client.
AppTelemetry Viewer is the app that developers use to see signal data, both raw and in aggregated form as Insights.
- Using no user identifer at all. This will give them the greatest piece of mind, while still allowing AppTelemetry to help them out with statistical analysis.
- Using Apple's "IdentifierForVendor" API. This is the default behaviour for AppTelemetry. The identifier generated out with this method has no relation to any of the user's identifiable information or private data. Deleting and reinstalling the app will generate a new identifier and sever any connection to the old one.
- Using a custom string identifier, such as the user's username or email address. This string will never transferred directly to the server. Instead, the AppTelemetry Client will create a hash out of that string and only ever transmit that hash. This allows AppTelemetry to detect the same user on multiple devices, but it is impossible for both the developer and any person having access to AppTelemetry's database to retrieve the original custom string identifier.
Developers can include any metadata they wish with signals they send using AppTelemetry Client. They are urged to not send any data that might identify their users. They must include the types of data they send in their own apps' privacy policies.
Using AppTelemetry Viewer
Developers using the AppTelemetry Viewer app are sending signals to the AppTelemetry Server as well. These do not contain any user data. The types of data are:
- App was launched
- Which part of the app was navigated to?
- Standard metadata: platform, system version, app version, build number, if the build was downloaded via App Store or TestFlight, and the device model type (i.e. iPhone X, iPad Air, or iPhone 12).