Сбои Центра приложений (Cordova)

Важно!

Прекращение поддержки Центра приложений Visual Studio запланировано на 31 марта 2025 г. Хотя вы можете продолжать использовать Центр приложений Visual Studio, пока он не будет полностью выведен из эксплуатации, существует несколько рекомендуемых вариантов, на которые вы можете рассмотреть возможность миграции.

Узнайте больше о сроках поддержки и альтернативных вариантах.

Примечание

Поддержка Cordova Apps прекращена в апреле 2022 г. Дополнительные сведения см. в блоге Центра приложений.

Сбои Центра приложений автоматически создают журнал сбоев при каждом сбое приложения. Журнал сначала записывается в хранилище устройства, и когда пользователь снова запустит приложение, отчет о сбоях будет отправлен в Центр приложений. Сбор сбоев работает как для бета-, так и для динамических приложений, т. е. для приложений, отправленных в App Store. Журналы сбоев содержат ценные сведения, которые помогут устранить сбои.

Если вы еще не настроили пакет SDK в приложении, следуйте инструкциям в разделе начало работы.

Создание тестового сбоя

Сбои Центра приложений предоставляют API для создания тестового сбоя для простого тестирования пакета SDK. Этот API можно использовать только в тестовых или бета-версиях приложений и не будет выполнять никаких действий в рабочих приложениях.

AppCenter.Crashes.generateTestCrash();

Примечание

Приложение Cordova должно быть скомпилировано в режиме выпуска, чтобы это аварийное завершение было отправлено в Центр приложений.

Дополнительные сведения о предыдущем сбое

При сбоях центра приложений есть два API, которые предоставляют дополнительные сведения на случай сбоя приложения.

Приложение получило предупреждение о нехватке памяти в предыдущем сеансе?

В любой момент после запуска пакета SDK можно проверка, если приложение получило предупреждение о памяти в предыдущем сеансе:

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

Примечание

В некоторых случаях запуск устройства с нехваткой памяти может не активировать отслеживаемые события.

Произошел сбой приложения в предыдущем сеансе?

В любой момент после запуска пакета SDK можно проверка, если приложение не произошло при предыдущем запуске:

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

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

AppCenter.Crashes.hasCrashedInLastSession(success, error);

Это удобно, если вы хотите настроить поведение или пользовательский интерфейс приложения после сбоя. Некоторые разработчики могут показать что-то, чтобы извиниться перед своими пользователями или связаться после сбоя.

Сведения о последнем сбое

Если приложение ранее завершалось сбоем, вы можете получить сведения о последнем сбое.

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

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

AppCenter.Crashes.lastSessionCrashReport(success, error);

Настройка использования сбоев Центра приложений

Сбои Центра приложений предоставляют разработчикам возможность выполнять дополнительные действия до и при отправке журналов сбоев в Центр приложений.

Сбои обработки в JavaScript

Вы можете настроить пакет SDK для автоматической отправки отчетов о сбоях или обработки сбоев в JavaScript, изменив значение предпочтения APPCENTER_CRASHES_ALWAYS_SEND в config.xml. Для обработки сбоев в JavaScript задайте для него значение false.

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

Затем можно использовать AppCenter.Crashes.process(processFunction, errorCallback) метод для настройки обработки сбоев.

Следует ли обрабатывать сбой?

Передайте false в , sendCallback если вы хотите решить, нужно ли обрабатывать конкретный сбой. Например, может произойти сбой на уровне системы, который вы хотите игнорировать и не хотите отправлять в Центр приложений.

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

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

AppCenter.Crashes.process(processFunction, errorCallback);

В противном случае передайте true в функцию sendCallback , и будет отправлен сбой.

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

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

AppCenter.Crashes.process(processFunction, errorCallback);

Примечание

Чтобы использовать эту функцию, необходимо задать APPCENTER_CRASHES_ALWAYS_SEND в config.xmlfalseзначение .

Таким образом, эта функция зависит от сбоев обработки в JavaScript.

Добавление вложений в отчет о сбое

В отчет о сбоях можно добавлять двоичные и текстовые вложения. Пакет SDK отправит их вместе с аварийным завершением, чтобы их можно было увидеть на портале Центра приложений. Следующий обратный вызов будет вызываться непосредственно перед отправкой сохраненного сбоя из предыдущих запусков приложения, но не во время сбоя. Убедитесь, что файл вложения не называется minidump.dmp , так как это имя зарезервировано для файлов minidump. Ниже приведен пример прикрепления текста и изображения к аварийному завершению.

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

Примечание

Чтобы использовать эту функцию, необходимо задать APPCENTER_CRASHES_ALWAYS_SEND в config.xmlfalseзначение .

Таким образом, эта функция зависит от сбоев обработки в JavaScript.

Примечание

В настоящее время максимальный размер составляет 1,4 МБ для Android и 7 МБ для iOS. Попытка отправить вложение большего размера вызовет ошибку.

Включение или отключение сбоев Центра приложений во время выполнения

Вы можете включить и отключить сбои Центра приложений во время выполнения. Если отключить его, пакет SDK не будет сообщать о сбоях для приложения.

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

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

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

Чтобы снова включить сбои центра приложений, используйте тот же API, но передайте true в качестве параметра.

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

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

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

Состояние сохраняется в хранилище устройства при запуске приложений.

Проверьте, включен ли сбой центра приложений

Вы также можете проверка, включены ли сбои Центра приложений:

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

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