Estadísticas de API
Copia un prompt de configuración con los pasos de instalación y la guía completa en markdown para este plugin.
Estadísticas de API
Sección titulada “Estadísticas de API”¡Desde la versión 1.3.0, el sistema de actualizaciones puede enviar estadísticas!
Por defecto, todas las estadísticas se envían a nuestro servidor para analizar el uso e investigar.
Si prefieres enviar estos datos a tu propio servidor, cambia la configuración:
// capacitor.config.json{ "appId": "**.***.**", "appName": "Name", "plugins": { "CapacitorUpdater": { "statsUrl": "YOUR_URL" } }}Estructura de datos
Sección titulada “Estructura de datos”Esto es lo que recibirá tu servidor:
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, or electron "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,}También puedes desactivarlo por completo usando un string vacío. Ten en cuenta que las estadísticas son privadas y me ayudan a entender cómo se usa el plugin para resolver errores y mejorarlo.
Comportamiento esperado ante “no update”
Sección titulada “Comportamiento esperado ante “no update””Cuando tu endpoint de actualización no tenga una nueva versión, debería responder con un payload de error como este:
{ "error": "no_new_version_available", "message": "No new version available" }El error code debe ser exactamente no_new_version_available. El message puede ser cualquier string (solo sirve para logs/debugging). Este es el comportamiento esperado y se sigue devolviendo con HTTP 200. Si tu endpoint de update devuelve en su lugar un 200 respuesta sin un url, el plugin lo tratará como un fallo de descarga y enviará un download_fail stat.
Ejemplo de implementación
Sección titulada “Ejemplo de implementación”Aquí tienes un ejemplo de code en JavaScript para guardar los stats del plugin:
interface AppInfos { version_name: string action: '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' | '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' | 'disablePlatformElectron' | 'disableProdBuild' | 'disableDevice' | 'customIdBlocked' | 'cannotGetBundle' | 'checksum_fail' | 'checksum_required' | 'NoChannelOrOverride' | 'setChannel' | 'getChannel' | 'rateLimited' | 'disableAutoUpdate' | 'keyMismatch' | 'ping' | 'InvalidIp' | 'blocked_by_server_url' | 'download_manifest_start' | 'download_manifest_complete' | 'download_zip_start' | 'download_zip_complete' | 'download_manifest_file_fail' | 'download_manifest_checksum_fail' | 'download_manifest_brotli_fail' | 'backend_refusal' | 'app_crash' | 'app_crash_native' | 'app_anr' | 'app_killed_low_memory' | 'app_killed_excessive_resource_usage' | 'app_initialization_failure' | 'app_memory_warning' | 'webview_javascript_error' | 'webview_unhandled_rejection' | 'webview_resource_error' | 'webview_security_policy_violation' | 'webview_unclean_restart' | 'webview_render_process_gone' | 'webview_content_process_terminated' | 'os_version_changed' | 'native_app_version_changed' | 'download_0' 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' }}Este endpoint debe devolver un JSON:
{ "status": "ok" }Acciones
Sección titulada “Actions”Para descripciones detalladas de todos los códigos de acción y su significado, consulta la documentación de debugging:
- Acciones enviadas desde el dispositivo: Consulta la documentación de debugging - Enviado desde el dispositivo sección
- Acciones enviadas desde el backend: Consulta la documentación de depuración - Enviado desde el backend sección
Continúa con las estadísticas de API
Sección titulada “Continúa con las estadísticas de API”Si estás usando Estadísticas de API para planificar las operaciones del dashboard y de API, conéctalo con Al usar @capgo/capacitor-updater para la funcionalidad nativa al usar @capgo/capacitor-updater, Resumen de API para los detalles de implementación en API Overview, Introducción para los detalles de implementación en la Introducción, Claves de API para los detalles de implementación en las claves de API, y Dispositivos para el detalle de implementación en Devices.