github.com/status-im/status-go@v1.1.0/_docs/app-metrics.md (about) 1 2 # Status usage data 3 4 _______ 5 âšī¸: **The release and develop (nightly) version of Status DO NOT collect in-app usage data. A service to do so has been developed and might be used in experimental builds of the app, for testing purposes and with double opt-in only. Any information in this document about data (not) collected and how the service works, only applies if you've deliberately installed an experimental build**. 6 _______ 7 :warning: **We cannot guarantee that there are no ways to de-anonymous usage data you share. If you find yourself at risk if your identity were to be uncovered: don't enable sharing data!** 8 _______ 9 10 Data is only ever shared if you opt in to doing so, you can review all data before it is sent and it is shared over Status' peer-to-peer network (Waku), just like a 1:1 message. 11 12 Sharing data is strictly opt-in, and can be changed at any times in Settings in the app. 13 14 ### What is shared (Opt-in) 15 Status is an open-source platform. To verify that the app only collects and shares the events and metadata listed below, you can view the rules set to store metrics data in the [source code](https://github.com/status-im/status-go/blob/develop/appmetrics/validators.go). 16 17 - Your interactions with the app like clicks and screenviews 18 - Background activity and internal processes 19 - Settings and preferences 20 21 In detail this means the app can collect and share: 22 - Navigation events 23 - Screens that are navigated to 24 - Action events (for example button clicks, list swipes, switch toggles, etc) 25 - The time events are created 26 - Operating System 27 - App version 28 - Batch ID 29 - Time since last batch sent 30 31 For any data to be collected and shared, it needs to meet the rules set in the validator script. By policy of Status' Core Contributors, rules set in the validator script need to be assessed as posing a non-existent to low threat by being in: 32 - local storage over time 33 - aggregated storage from Status over time 34 35 ### What will never be shared 36 No data will be shared unless you opt-in. Furthermore, Status commits to never collect identifiable data in its broadest sense. This means that we will never collect anything that we believe can be linked back to you. Including but not limited to: 37 - IP addresses 38 - Random name 39 - Chat key 40 - Public Ethereum addresses 41 - Account balance(s) 42 - Account history 43 - ENS name 44 - Input field entries (browser address bar, chat key/ENS entry) 45 - Any content you generate (images, messages, profile picture) 46 - Contacts or other (favorite) lists (wallet and browser favorites) 47 - Chat, group, community memberships 48 49 The above data can technically be logged, stored and shared. In order to verify that this does not happen, view the rules defined to store metrics data in the [source code](https://github.com/status-im/status-go/blob/develop/appmetrics/validators.go). 50 51 Moreover, while we made a best effort to make data collection as privacy-preserving as possible, we cannot guarantee that there are no ways to de-anonymous collected data. **If you find yourself at risk if your identity were to be uncovered: don't enable sharing data.** 52 53 ### Purpose of the data 54 Aggregated data is used to inform product development. Given our principles, the type of data that is collected and its rudimentary nature, there is no incentive for Status or other parties to use the data for any other purpose. Status will never use these data for profit. 55 56 57 ### Viewing the data 58 As of writing, we plan to make a Dashboard that shows the aggregated data public; Similar to metrics.status.im. As soon as this Dashboard is available we will provide a link here. The data that is stored on your device and shared can be viewed through the interface of the app. 59 60 _________ 61 62 # How it works 63 `appmetrics` is a way to capture and transfer app usage data, end-to-end encrypted over Waku to a Status managed key. 64 65 66 ## History 67 To learn more about the history, background and debates around this feature, refer to this detailed note: https://notes.status.im/anonymous-metrics 68 69 70 ## Implementation 71 On the Go side, the metrics system is just a table, which can store predefined events and the their values, along with metadata like create time, app version and operating system. The collected data will never contain any personally identifiable information like three letter public name or the public wallet address. There is a validation layer that ensures (to some extent) that developers don't capture sensitive data by mistake. 72 73 ### Opt-in system 74 These data points are saved in the local sqlite database, and are not transferred to our servers until the user opts-in to share metrics. If the user opts-out, we stop capturing data. 75 76 ### Validation and audit 77 The interesting bit is the validation process, which serves two purposes: 78 1. validates the metric before saving it to local db: ensures that we don't capture any sensitive information 79 2. acts as an audit layer: anyone who wishes to check the kind of data being captured, can do so by auditing just one file: https://github.com/status-im/status-go/blob/develop/appmetrics/validators.go 80 81 ### Transmission and deletion 82 Transmission happens over Waku, and as of now, all data is deleted locally after transmission, however (in the future) we might want to keep a copy of the data locally. If a batch is not transmitted within 7 days, data is deleted locally. 83 84 85 ## Events 86 | Event | Value | Description | 87 |-----------------------|--------------------------------------|---------------------------------------------------------------------------------------------------------------------| 88 | navigate-to | {:view_id: "", :params {:screen ""}} | The user navigated to one of the screens. If the `view_id` has a `_stack` suffix, it could signify a top level tab. | 89 | screens/on-will-focus | {:view_id: "", :params {:screen ""}} | The user navigated to a top level tab. | 90 91 ## Related PRs 92 93 ### `status-go` 94 - [#2170 - đ đ Anonymous Metrics V0](https://github.com/status-im/status-go/pull/2170) 95 - [#2195 - Added Anonymous Metrics Send Opt-In Setting](https://github.com/status-im/status-go/pull/2195) 96 - [#2198 - Anon Metrics Broadcast](https://github.com/status-im/status-go/pull/2198) 97 98 ### `status-mobile` 99 - [#11901 - Feature/anon metrics](https://github.com/status-im/status-mobile/pull/11901) 100 - [#11941 - Feature/anon metrics](https://github.com/status-im/status-mobile/pull/11941) 101 - [#11963 - đī¸ Anon metrics batching](https://github.com/status-im/status-mobile/pull/11963) 102 - [#12024 - đ Anon metrics opt-in UI (disabled using feature flags)](https://github.com/status-im/status-mobile/pull/12024)