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)