Skip to content
This repository has been archived by the owner on Nov 2, 2021. It is now read-only.

Telemetry

Benjamin Cheng edited this page Sep 5, 2018 · 1 revision

For clients that have "send usage data" enabled, Scryer sends a "core" ping and an "event" ping to Mozilla's telemetry service. Sending telemetry can be disabled in the app's settings. Builds of "Scryer" have telemetry enabled by default ("opt-out").

Note: Scryer is still in development and this documentation is subject to change.

Install campaign tracking

We use Adjust SDK to evaluate the effectiveness of our campaign channel. What data has been collected can be found in the code here. The evaluation process is accomplished by 1. Receive INSTALL_REFERRER Intent from Google Play; 2. Send the referrer string back to adjust server(https://app.adjust.com) when the application is alive.

Scryer uses Firebase to improve our product

Scryer also uses Google’s Firebase platform to help us improve performance, support crashes, understand your experience with Scryer and improve the user experience through A/B testing and in-product messaging. Below are the specific Firebase Products we use

  • Google Analytics; to analyze anonymous user attributions and behavior to make informed decisions on our product roadmap.
  • Remote Config; to customize your Scryer experience such as changing the look and feel, rolling out features gradually, running A/B tests, delivering customized content, or making other updates without deploying a new version.
  • Cloud Messaging; to send messages and notifications so we can bring contextual hints to you to help you use Scryer better
  • Crashlytics; to understand crashes better so you can use Scryer without problems
  • Performance Monitoring; to diagnose app performance issues so we can keep Scryer really fast

Learn more about Firebase data collection here or you have the option to turn off Firebase by disabling “Send Usage Data” in your Settings. For events automatically collected by Firebase, see here

Core ping

Scryer creates and tries to send a "core" ping whenever the app goes to the background. This core ping uses the same format as Firefox for Android and is documented on firefox-source-docs.mozilla.org.

Event ping

In addition to the core ping an event ping for UI telemetry is generated and sent as soon as the app is sent to the background. All the telemetry mechanism is leverage from the library telemetry-android which is also been used in Firefox Focus for Android.

Settings

As part of the event ping the most recent state of the user's setting is sent (default values in bold):

Setting Key Value
Enable Capture Service pref_key_enable_capture_service true / false
Enable Floating Screenshot Button pref_key_enable_floating_screenshot_button true / false
Enable Add to Collection pref_key_enable_add_to_collection true / false

Events

The event ping contains a list of events (see event format on firefox-source-docs.mozilla.org) for the following actions:

Home

Event category method object value
Click on search bar action click home_search_bar

Limits

  • An event ping will contain up to but no more than 500 events
  • No more than 40 pings per type (core/event) are stored on disk for upload at a later time
  • No more than 100 pings are sent per day

Implementation notes

  • Event pings are generated (and stored on disk) whenever the onStop() callback of the main activity is triggered. This happens whenever the main screen of the app is no longer visible (The app is in the background or another screen is displayed on top of the app).

  • Whenever we are storing pings we are also scheduling an upload. We are using Android’s JobScheduler API for that. This allows the system to run the background task whenever it is convenient and certain criteria are met. The only criteria we are specifying is that we require an active network connection. In most cases, this job is executed immediately after the app is in the background.

  • Whenever an upload fails we are scheduling a retry. The first retry will happen after 30 seconds (or later if there’s no active network connection at this time). For further retries a exponential backoff policy is used: [30 seconds] * 2 ^ (num_failures - 1)

  • An earlier retry of the upload can happen whenever the app is coming to the foreground and sent to the background again (the previously scheduled job is reset and we are starting all over again).