API de Estadísticas
API de Estadísticas
Section titled “API de Estadísticas”¡A partir de la versión 1.3.0, el sistema de actualización puede enviar estadísticas!
Por defecto, todas las estadísticas se envían a nuestro servidor, para entender el uso e investigar.
Si quieres enviar estos datos a tu servidor en su lugar, cambia la configuración a continuación:
// capacitor.config.json{ "appId": "**.***.**", "appName": "Name", "plugins": { "CapacitorUpdater": { "statsUrl": "YOUR_URL" } }}Estructura de Datos
Section titled “Estructura de Datos”Lo que tu servidor recibirá es:
interface AppInfosStats { "action": "set", // puede ser set, delete, set_fail, reset, revert // Luego es la misma info que actualización "app_id": "**.***.**", // identificador de la app en la tienda "device_id": "*******", // id único por instalación de app "platform": "ios", // o android "custom_id": "user_1", // representa tu usuario "version_name": "1.2.3", // versión del build web "version_build": "1.2.0", // versión del build nativo "version_code": "120", // número de build del build nativo "version_os": "16", // versión del OS del dispositivo "plugin_version": "4.0.0"// para hacer que tu api se comporte de manera diferente con diferentes plugins "is_emulator": false, "is_prod": false,}También puedes deshabilitarlo totalmente, con una cadena vacía. Ten en cuenta que las estadísticas se hacen de forma privada amigable y me ayudan a entender cómo las personas usan el Plugin, para resolver problemas y mejorarlo.
Comportamiento esperado cuando no hay actualización
Section titled “Comportamiento esperado cuando no hay actualización”Cuando tu endpoint de actualización no tenga una versión nueva, debe responder con un payload de error como:
{ "error": "no_new_version_available", "message": "No new version available" }El código error debe ser exactamente no_new_version_available. El message puede ser cualquier cadena (solo para logs/depuración). Este es el comportamiento esperado y se devuelve igualmente con HTTP 200. Si tu endpoint en su lugar devuelve un 200 sin url, el plugin lo tratará como un fallo de descarga y enviará download_fail.
Ejemplo de Implementación
Section titled “Ejemplo de Implementación”Aquí hay un ejemplo de código en JavaScript para guardar las estadísticas del Plugin:
interface AppInfos { version_name: string action: 'ping' | 'delete' | 'reset' | 'set' | 'get' | 'set_fail' | 'update_fail' | 'download_fail' | 'windows_path_fail' | 'canonical_path_fail' | 'directory_path_fail' | 'unzip_fail' | 'low_mem_fail' | 'download_10' | 'download_20' | 'download_30' | 'download_40' | 'download_50' | 'download_60' | 'download_70' | 'download_80' | 'download_90' | 'download_complete' | 'download_manifest_start' | 'download_manifest_complete' | 'download_zip_start' | 'download_zip_complete' | 'download_manifest_file_fail' | 'download_manifest_checksum_fail' | 'download_manifest_brotli_fail' | 'decrypt_fail' | 'app_moved_to_foreground' | 'app_moved_to_background' | 'uninstall' | 'needPlanUpgrade' | 'missingBundle' | 'noNew' | 'disablePlatformIos' | 'disablePlatformAndroid' | 'disableAutoUpdateToMajor' | 'cannotUpdateViaPrivateChannel' | 'disableAutoUpdateToMinor' | 'disableAutoUpdateToPatch' | 'channelMisconfigured' | 'disableAutoUpdateMetadata' | 'disableAutoUpdateUnderNative' | 'disableDevBuild' | 'disableEmulator' | 'cannotGetBundle' | 'checksum_fail' | 'NoChannelOrOverride' | 'setChannel' | 'getChannel' | 'rateLimited' | 'disableAutoUpdate' | 'InvalidIp' | 'blocked_by_server_url' 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) // Guárdalo en tu base de datos return { status: 'ok' }}Este endpoint debe devolver un JSON:
{ "status": "ok" }Acciones
Section titled “Acciones”Para descripciones detalladas de todos los códigos de acción y sus significados, por favor consulta la documentación de depuración:
- Acciones enviadas desde el dispositivo: Ver la sección documentación de depuración - Enviado desde el dispositivo
- Acciones enviadas desde el backend: Ver la sección documentación de depuración - Enviado desde el backend