Firebase Installations SDK

Firebase Installations SDK (google/firebaseinstallations)

operated by: Google LLC (get company information on datarequests.org)

The Firebase Installations service (FIS) provides a unique identifier for each installed instance of a Firebase app, called Firebase installation ID (FID). Source “Many Firebase services depend on the Firebase Installations API in order to identify app installs and/or authenticate client requests to their servers.” Source Other purposes include user segmentation, message delivery, performance monitoring, tracking the number of unique users, or selecting which configuration values to return. Source

FIDs can also be used by Google Analytics for attribution. Source

Endpoint URLs

These are URLs or regexes of endpoints the tracker sends data to. We use these to determine which adapter to apply to a request. Some trackers use the same endpoint for several formats. In this case we use additional logic to match the adapter to the request, refer to the code for more information.
  • /^https:\/\/firebaseinstallations\.googleapis\.com\/v1\/projects\/.+\/installations$/

Decoding steps

Every tracking library has its own way of transmitting tracking data, often even several. They are regularly pretty convoluted, nested encoding schemes. Because of that, the adapter needs to decode the request information into a consistent format. We try to keep keys and paths intact, but the structure results from our decoding. All steps used in the decoding for this adapter are documented here.
  1. Parse the request body as JSON. Store that in the result for the request body.
  2. Get the property at JSONPath $ in the request headers. Store that in the result for the request headers.
  3. Decode the result for the request headers at x-firebase-client as a Base64 string. Store that in the result for the request headers at x-firebase-client-encoded.
  4. Decompress the result for the request headers at x-firebase-client-encoded as a GZIP archive. Replace the existing value.
  5. Parse the result for the request headers at x-firebase-client-encoded as JSON. Store that in the result for the request headers at x-firebase-client-decoded.
  6. Split the string in the result for the request headers at x-firebase-client into an array on the separator . Store that in the result for the request headers at x-firebase-client-fields.
  7. Split every string in the result for the request headers at x-firebase-client-decoded.heartbeats.*.agent into an array on the separator . Store that in the result for the request headers at x-firebase-client-decoded-fields.
1res.body = parseJson(body)
2res.header = header.$
3res.header.x-firebase-client-encoded = decodeBase64(res.header.x-firebase-client)
4res.header.x-firebase-client-encoded = gunzip(res.header.x-firebase-client-encoded)
5res.header.x-firebase-client-decoded = parseJson(res.header.x-firebase-client-encoded)
6res.header.x-firebase-client-fields = split(res.header.x-firebase-client, {"separator":" "})
7res.header.x-firebase-client-decoded-fields = split.map(res.header.x-firebase-client-decoded.heartbeats.*.agent, {"separator":" "})

Observed data transmissions

This is data that we observed being transmitted by this tracker. Not every request contains all of this data. The context of the data describes where we found the data in the request, the path describes the location of the data in the decoded request. The examples are a selection of observed values.
PropertyContextPathExamples of observed values
App IDheaderX-Android-Packagecom.scorp.who
spapps.com.windmap
com.chatx
com.PSVStudio.HippoBabyBall
omegle.tv
headerx-ios-bundle-identifierde.immonet.iphone
Gravidkalender
com.outerspaceapps.itranslate
MeinVodafone
com.itranslate.itranslateone
Device nameheader$.x-firebase-client-fields[?(@.startsWith('device-name/'))]device-name/sdk_gphone_x86_64_arm64
device-name/sdk_gphone_x86_64
header$.x-firebase-client-decoded-fields.*[?(@.startsWith('device-name/'))]device-name/sdk_gphone_x86_64_arm64
device-name/sdk_gphone_x86_64
Unique installation IDbodyfid Tracker documentation on this propertydYPvivoVTOWuVT5l_T_rmF
dvTCDZc1TReAs7a5fB783C
f3EIaCMMQ22NqcuBfCnjoG
c7oYdAg3THCnFuh9Qs81yx
cFO-78AFSgyXF00ygbOVZ_
Manufacturerheader$.x-firebase-client-fields[?(@.startsWith('device-brand/'))]device-brand/google
header$.x-firebase-client-decoded-fields.*[?(@.startsWith('device-brand/'))]device-brand/google
Modelheader$.x-firebase-client-fields[?(@.startsWith('device-model/'))]device-model/generic_x86_64_arm64
device-model/emu64xa
header$.x-firebase-client-fields[?(@.startsWith('device/'))]device/iPhone9,3
device/iPhone10,4
device/iPhone10,6
header$.x-firebase-client-decoded-fields.*[?(@.startsWith('device-model/'))]device-model/generic_x86_64_arm64
device-model/emu64xa
header$.x-firebase-client-decoded-fields.*[?(@.startsWith('device/'))]
Tracker SDK versionbodysdkVersiona:16.3.3
a:16.3.5
a:16.3.2
a:16.3.1
a:16.2.1
headerx-firebase-clientkotlin/1.4.10 fire-auth/19.4.0 fire-analytics/17.6.0 fire-installations/16.3.3 fire-fst/21.7.1 fire-iid/20.3.0 fire-gcs/19.2.0 fire-fcm/20.1.7_1p fire-android/ fire-cls/17.2.2 fire-fn/19.1.0 fire-core/19.3.1
kotlin/1.4.10 fire-installations/16.3.3 fire-iid/20.2.3 fire-android/ fire-fcm/20.2.4 fire-analytics/17.5.0 fire-core/19.3.1
fire-installations/16.3.3 fire-rc/20.0.0 kotlin/1.3.72 fire-iid/21.0.0 fire-fcm/20.1.7_1p fire-abt/20.0.0 fire-analytics/18.0.0 fire-android/ fire-cls/17.2.2 fire-core/19.3.1
fire-installations/16.3.3 fire-rc/19.2.0 fire-iid/20.2.4 fire-android/ fire-fcm/20.2.4 fire-analytics/17.5.0 fire-core/19.3.1 fire-abt/19.1.0
fire-analytics/17.6.0 fire-installations/16.3.2 kotlin/1.3.50 fire-android/ fire-core/19.3.1
headerx-firebase-client-decoded.heartbeats.*.agentandroid-target-sdk/31 fire-transport/18.1.1 kotlin/1.6.10 device-model/generic_x86_64_arm64 android-installer/ device-name/sdk_gphone_x86_64_arm64 fire-core/20.1.0 fire-cls/18.2.9 fire-fcm/23.0.2 android-min-sdk/19 fire-analytics/20.1.1 fire-installations/17.0.1 fire-android/30 device-brand/google android-platform/
fire-transport/18.1.1 kotlin/1.5.31 fire-analytics/19.0.0 device-model/generic_x86_64_arm64 android-target-sdk/30 android-installer/ fire-core/20.1.0 device-name/sdk_gphone_x86_64_arm64 fire-fcm/23.0.1 fire-installations/17.0.1 fire-android/30 device-brand/google android-platform/ android-min-sdk/21 fire-cls/18.0.1
fire-transport/18.1.1 fire-core-ktx/20.1.0 fire-db-ktx/20.0.4 fire-core/20.1.0 android-installer/ device-name/sdk_gphone_x86_64_arm64 fire-cls/18.2.9 fire-fcm/23.0.2 fire-auth/21.0.2 fire-cfg-ktx/21.0.2 fire-abt/21.0.1 fire-analytics/20.1.1 fire-android/30 fire-analytics-ktx/20.1.1 android-min-sdk/21 android-platform/ fire-gcs/20.0.1 android-target-sdk/31 kotlin/1.6.10 device-model/generic_x86_64_arm64 fire-cls-ktx/18.2.9 fire-perf/20.0.6 fire-fst/24.0.2 fire-fst-ktx/24.0.2 fire-installations/17.0.1 fire-perf-ktx/20.0.6 device-brand/google fire-rc/21.0.2 fire-auth-ktx/21.0.2 fire-rtdb/20.0.4 fire-fcm-ktx/23.0.2 fire-stg-ktx/20.0.1
fire-analytics/21.0.0 fire-core/20.3.2 fire-analytics-ktx/21.0.0 kotlin/1.8.21 fire-fcm/23.0.5 fire-core-ktx/20.3.2 android-installer/ fire-abt/21.1.0 fire-cfg-ktx/21.2.1 fire-android/30 fire-cls-ktx/18.2.11 android-platform/ android-target-sdk/33 fire-transport/18.1.4 device-model/generic_x86_64_arm64 android-min-sdk/24 fire-db-ktx/unspecified device-name/sdk_gphone_x86_64 fire-installations/17.1.0 device-brand/google fire-rc/21.2.1 fire-fcm-ktx/23.0.5 fire-rtdb/20.2.2 fire-cls/18.2.11
fire-core/20.3.2 device-model/generic_x86_64_arm64 fire-cls/18.3.7 kotlin/1.7.10 fire-analytics/21.3.0 android-installer/ android-min-sdk/22 fire-cls-ndk/18.3.7 device-name/sdk_gphone_x86_64 fire-fcm/20.2.0 fire-android/30 device-brand/google fire-installations/17.1.3 android-platform/ fire-iid/20.2.0 android-target-sdk/33
References