Falhas no App Center (Cordova)

Importante

O Visual Studio App Center está programado para ser desativado em 31 de março de 2025. Embora você possa continuar a usar o Visual Studio App Center até que ele seja totalmente desativado, há várias alternativas recomendadas para as quais você pode considerar migrar.

Saiba mais sobre linhas do tempo e alternativas de suporte.

Observação

O suporte para o Cordova Apps terminou em abril de 2022. Encontre mais informações no blog do App Center.

As falhas do App Center gerarão automaticamente um log de falhas sempre que o aplicativo falhar. O log é gravado pela primeira vez no armazenamento do dispositivo e, quando o usuário iniciar o aplicativo novamente, o relatório de falha será enviado para o App Center. A coleta de falhas funciona para aplicativos beta e ao vivo, ou seja, aqueles enviados para o App Store. Os logs de falhas contêm informações valiosas para ajudar a corrigir a falha.

Siga a seção Introdução se você ainda não configurou o SDK em seu aplicativo.

Gerar uma falha de teste

O App Center Crashes fornece uma API para gerar uma falha de teste para facilitar o teste do SDK. Essa API só pode ser usada em aplicativos de teste/beta e não fará nada em aplicativos de produção.

AppCenter.Crashes.generateTestCrash();

Observação

Seu aplicativo Cordova precisa ser compilado no modo de versão para que essa falha seja enviada ao App Center.

Obter mais informações sobre uma falha anterior

O App Center Crashes tem duas APIs que fornecem mais informações caso seu aplicativo falhe.

O aplicativo recebeu um aviso de memória insuficiente na sessão anterior?

A qualquer momento após iniciar o SDK, você poderá marcar se o aplicativo recebeu um aviso de memória na sessão 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);

Observação

Em alguns casos, a execução da memória baixa de um dispositivo pode não disparar eventos rastreáveis.

O aplicativo falhou na sessão anterior?

A qualquer momento após iniciar o SDK, você poderá marcar se o aplicativo falhou na inicialização 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);

Isso é útil caso você deseje ajustar o comportamento ou a interface do usuário do seu aplicativo após a ocorrência de uma falha. Alguns desenvolvedores podem querer mostrar algo para se desculpar com seus usuários ou entrar em contato após uma falha.

Detalhes sobre a última falha

Se o aplicativo falhou anteriormente, você pode obter detalhes sobre a última falha.

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

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

AppCenter.Crashes.lastSessionCrashReport(success, error);

Personalizar o uso de falhas do App Center

O App Center Crashes fornece capacidades para os desenvolvedores executarem ações adicionais antes e ao enviar logs de falha para o App Center.

Falha no processamento no JavaScript

Você pode configurar o SDK para enviar relatórios de falha automaticamente ou processar falhas no JavaScript alterando o valor de preferência APPCENTER_CRASHES_ALWAYS_SEND no config.xml. Para processar falhas no JavaScript, defina-o como false.

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

Em seguida, você pode usar AppCenter.Crashes.process(processFunction, errorCallback) o método para personalizar a procissão de falhas.

A falha deve ser processada?

Passe false para o sendCallback se você quiser decidir se uma falha específica precisa ser processada ou não. Por exemplo, pode haver uma falha no nível do sistema que você gostaria de ignorar e que não deseja enviar para o 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);

Caso contrário, passe true para a sendCallback função e a falha será enviada.

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

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

AppCenter.Crashes.process(processFunction, errorCallback);

Observação

Para usar esse recurso, você precisa definir APPCENTER_CRASHES_ALWAYS_SEND o valor de preferência em config.xml como false.

Esse recurso depende, portanto, de falhas de processamento em JavaScript.

Adicionar anexos a um relatório de falha

Você pode adicionar anexos binários e de texto a um relatório de falha. O SDK os enviará junto com a falha para que você possa vê-los no portal do App Center. O retorno de chamada a seguir será invocado logo antes de enviar a falha armazenada das inicializações anteriores do aplicativo, mas não no momento da falha. Verifique se o arquivo de anexo não está nomeado minidump.dmp , pois esse nome está reservado para arquivos de minidespejo. Aqui está um exemplo de como anexar um texto e uma imagem a uma falha:

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);

Observação

Para usar esse recurso, você precisa definir APPCENTER_CRASHES_ALWAYS_SEND o valor de preferência em config.xml como false.

Esse recurso depende, portanto, de falhas de processamento em JavaScript.

Observação

Atualmente, o limite de tamanho é de 1,4 MB no Android e 7 MB no iOS. Tentar enviar um anexo maior disparará um erro.

Habilitar ou desabilitar falhas do App Center em runtime

Você pode habilitar e desabilitar falhas do App Center em runtime. Se você desabilitá-lo, o SDK não fará nenhum relatório de falha para o aplicativo.

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

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

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

Para habilitar falhas do App Center novamente, use a mesma API, mas passe true como um parâmetro.

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

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

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

O estado é persistido no armazenamento do dispositivo entre as inicializações do aplicativo.

Verificar se as falhas do App Center estão habilitadas

Você também pode marcar se as falhas do App Center estão habilitadas:

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

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