Bloqueos de App Center (Cordova)

Importante

Visual Studio App Center está programado para retirarse el 31 de marzo de 2025. Aunque puede seguir usando Visual Studio App Center hasta que se retire por completo, hay varias alternativas recomendadas a las que puede considerar la posibilidad de migrar.

Obtenga más información sobre las escalas de tiempo y las alternativas de soporte técnico.

Nota

El soporte técnico para aplicaciones cordova finalizó en abril de 2022. Obtenga más información en el blog de App Center.

Los bloqueos de App Center generarán automáticamente un registro de bloqueos cada vez que se bloquee la aplicación. El registro se escribe primero en el almacenamiento del dispositivo y, cuando el usuario vuelve a iniciar la aplicación, el informe de bloqueo se enviará a App Center. La recopilación de bloqueos funciona tanto para aplicaciones beta como para aplicaciones activas, es decir, las enviadas a la App Store. Los registros de bloqueo contienen información valiosa para ayudarle a corregir el bloqueo.

Siga la sección Introducción si aún no ha configurado el SDK en la aplicación.

Generación de un bloqueo de prueba

App Center Crashes proporciona una API para generar un bloqueo de prueba para facilitar las pruebas del SDK. Esta API solo se puede usar en aplicaciones de prueba o beta y no hará nada en las aplicaciones de producción.

AppCenter.Crashes.generateTestCrash();

Nota

La aplicación Cordova debe compilarse en modo de versión para que este bloqueo se envíe a App Center.

Obtener más información sobre un bloqueo anterior

App Center Crashes tiene dos API que proporcionan más información en caso de que la aplicación se bloquee.

¿La aplicación recibió una advertencia de memoria baja en la sesión anterior?

En cualquier momento después de iniciar el SDK, puede comprobar si la aplicación recibió una advertencia de memoria en la sesión anterior:

var success = function(hadLowMemoryWarning) {
    console.log(`there was ${hadLowMemoryWarning ? "a" : "no"} memory warning`);
}

var error = function(error) {
    console.error(error);
}

AppCenter.Crashes.hasReceivedMemoryWarningInLastSession(success, error);

Nota

En algunos casos, es posible que la ejecución de memoria baja de un dispositivo no desencadene eventos rastreables.

¿Se bloqueó la aplicación en la sesión anterior?

En cualquier momento después de iniciar el SDK, puede comprobar si la aplicación se bloqueó en el inicio anterior:

var success = function(didCrash) {
    console.log("there was " + (didCrash ? "a" : "no") + " crash");
}

var error = function(error) {
    console.error(error);
}

AppCenter.Crashes.hasCrashedInLastSession(success, error);

Esto resulta útil en caso de que quieras ajustar el comportamiento o la interfaz de usuario de la aplicación después de que se haya producido un bloqueo. Es posible que algunos desarrolladores quieran mostrar algo para disculparse a sus usuarios o para ponerse en contacto después de que se haya producido un bloqueo.

Detalles sobre el último bloqueo

Si la aplicación se bloqueó anteriormente, puedes obtener detalles sobre el último bloqueo.

var success = function(crashReport) {
    //do something with crash report
}

var error = function(error) {
    console.error(error);
}

AppCenter.Crashes.lastSessionCrashReport(success, error);

Personalización del uso de bloqueos de App Center

Los bloqueos de App Center proporcionan capacidades para que los desarrolladores realicen acciones adicionales antes y al enviar registros de bloqueo a App Center.

Procesamiento de bloqueos en JavaScript

Puede configurar el SDK para enviar informes de bloqueo automáticamente o procesar bloqueos en JavaScript cambiando el valor de preferencia APPCENTER_CRASHES_ALWAYS_SEND en config.xml. Para procesar bloqueos en JavaScript, establézcalo falseen .

<preference name="APPCENTER_CRASHES_ALWAYS_SEND" value="false" />

A continuación, puede usar AppCenter.Crashes.process(processFunction, errorCallback) el método para personalizar la procesión de bloqueos.

¿Se debe procesar el bloqueo?

Pase false al sendCallback si desea decidir si es necesario procesar o no un bloqueo determinado. Por ejemplo, podría haber un bloqueo de nivel de sistema que le gustaría omitir y que no desea enviar a App Center.

var errorCallback = function(error) {
    console.error(error);
};

var processFunction = function(attachments, sendCallback) {
    sendCallback(false); //crash won't be sent
};

AppCenter.Crashes.process(processFunction, errorCallback);

De lo contrario, pase true a la sendCallback función y se enviará el bloqueo.

var errorCallback = function(error) {
    console.error(error);
};

var processFunction = function(attachments, sendCallback) {
    sendCallback(true); //crash will be sent
};

AppCenter.Crashes.process(processFunction, errorCallback);

Nota

Para usar esta característica, debe establecer APPCENTER_CRASHES_ALWAYS_SEND el valor de preferencia en config.xml en false.

Por lo tanto, esta característica depende de los bloqueos de procesamiento en JavaScript.

Agregar datos adjuntos a un informe de bloqueo

Puede agregar datos adjuntos binarios y de texto a un informe de bloqueo. El SDK los enviará junto con el bloqueo para que pueda verlos en el portal de App Center. La siguiente devolución de llamada se invocará justo antes de enviar el bloqueo almacenado desde inicios de aplicación anteriores, pero no en el momento del bloqueo. Asegúrese de que el archivo adjunto no tiene nombre minidump.dmp , ya que ese nombre está reservado para los archivos minivolcados. Este es un ejemplo de cómo adjuntar un texto y una imagen a un bloqueo:

var errorCallback = function(error) {
    console.error(error);
};

var processFunction = function(attachments, sendCallback) {
    for (var i = 0; i < attachments.length; i++) {
        attachments[i].addTextAttachment('Hello text attachment!', 'hello.txt');
        var imageAsBase64string = '...';
        attachments[i].addBinaryAttachment(imageAsBase64string, 'logo.png', 'image/png');
    }
    sendCallback(true); //crash will be sent
};

AppCenter.Crashes.process(processFunction, errorCallback);

Nota

Para usar esa característica, debe establecer APPCENTER_CRASHES_ALWAYS_SEND el valor de preferencia en config.xml en false.

Por lo tanto, esta característica depende de los bloqueos de procesamiento en JavaScript.

Nota

El límite de tamaño es actualmente de 1,4 MB en Android y 7 MB en iOS. Si se intenta enviar un archivo adjunto mayor, se producirá un error.

Habilitación o deshabilitación de bloqueos de App Center en tiempo de ejecución

Puede habilitar y deshabilitar bloqueos de App Center en tiempo de ejecución. Si la deshabilita, el SDK no hará ningún informe de bloqueos para la aplicación.

var success = function() {
    console.log("crashes disabled");
}

var error = function(error) {
    console.error(error);
}

AppCenter.Crashes.setEnabled(false, success, error);

Para habilitar los bloqueos de App Center de nuevo, use la misma API, pero pase true como parámetro.

var success = function() {
    console.log("crashes enabled");
}

var error = function(error) {
    console.error(error);
}

AppCenter.Crashes.setEnabled(true, success, error);

El estado se conserva en el almacenamiento del dispositivo en los inicios de la aplicación.

Comprobación de si los bloqueos de App Center están habilitados

También puede comprobar si los bloqueos de App Center están habilitados:

var success = function(result) {
    console.log("crashes " + (result) ? "enabled" : "disabled");
}

var error = function(error) {
    console.error(error);
}
AppCenter.Crashes.isEnabled(success, error);