Vai al contenuto

Statistics API

Questo contenuto non è ancora disponibile nella tua lingua.

Statistics API

Starting from version 1.3.0 the update system is able to send stats!

By default, all stats are sent to our server, to understand usage and research.

If you want to send this data to your server instead, change the config below:

// capacitor.config.json
{
"appId": "**.***.**",
"appName": "Name",
"plugins": {
"CapacitorUpdater": {
"statsUrl": "YOUR_URL"
}
}
}

Data Structure

What your server will receive is:

interface AppInfosStats {
"action": "set", // can be set, delete, set_fail, reset, revert
// Then it's the same info as update
"app_id": "**.***.**", // app identifier in the store
"device_id": "*******", // unique id per app install
"platform": "ios", // or android
"custom_id": "user_1", // represent your user
"version_name": "1.2.3", // version of the web build
"version_build": "1.2.0", // version of the native build
"version_code": "120", // build number of the native build
"version_os": "16", // OS version of the device
"plugin_version": "4.0.0"// to make your api behave differently with different plugins
"is_emulator": false,
"is_prod": false,
}

You can also totally disable it, with an empty string. Keep in mind, statistics are made private friendly and help me to understand how people use the plugin, to resolve issues and improve it.

Implementation Example

Here is an example of code in JavaScript to save the stats of the plugin:

interface AppInfos {
version_name: string
action: 'delete' |
'reset' |
'set' |
'set_fail' |
'update_fail' |
'windows_path_fail' |
'canonical_path_fail' |
'directory_path_fail' |
'unzip_fail' |
'low_mem_fail' |
'download_fail' |
'update_fail' |
'download_10' |
'download_20' |
'download_30' |
'download_40' |
'download_50' |
'download_60' |
'download_70' |
'download_80' |
'download_90' |
'download_complete'
version_build: string
version_code: string
version_os: string
plugin_version: string
platform: string
app_id: string
device_id: string
custom_id?: string
is_prod?: boolean
is_emulator?: boolean
}
export const handler: Handler = async (event) => {
const body = JSON.parse(event.body || '{}') as AppInfos
const {
platform,
app_id,
action,
version_code,
version_os,
device_id,
version_name,
version_build,
plugin_version,
} = body
console.log('update asked', platform,
app_id,
action,
version_os,
version_code,
device_id,
version_name,
version_build,
plugin_version)
// Save it in your database
return { status: 'ok' }
}

This endpoint should return a JSON:

{ "status": "ok" }

Actions

  • delete: when a bundle is deleted locally
  • reset: when the app reset to the built-in bundle
  • set: when app sets a new bundle
  • set_fail: when app couldn’t find the ID of the bundle set
  • update_fail: send after the delay and notifyAppReady never called
  • download_fail: when download never finished
  • download_complete: When download finish
  • download_xx: Send every 10% of download ex : download_20, download_70
  • update_fail: when the bundle fails to do notifyAppReady in the timeframe