(Cordova App Center 崩溃)

备注

Cordova 应用支持在2022年4月结束。 在 App Center 博客中查找详细信息。

每次应用崩溃时,App Center 崩溃都将自动生成崩溃日志。 日志首先写入设备的存储,当用户再次启动应用时,系统会将故障报告发送到 App Center。 对于 beta 版应用和活动应用(即提交到 App Store 的应用),收集崩溃都适用。 崩溃日志包含有价值的信息,可帮助您解决故障。

如果尚未在应用程序中设置 SDK,请按照 入门 部分进行操作。

生成测试崩溃

App Center 崩溃将为你提供一个 API,用于生成测试崩溃以便轻松测试 SDK。 此 API 只能在测试/测试版应用中使用,不会在生产应用中执行任何操作。

AppCenter.Crashes.generateTestCrash();

备注

需要在发布模式下编译 Cordova 应用,才能将此故障发送到 App Center。

获取有关以前的故障的详细信息

App Center 崩溃具有两个 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);

如果你想要在发生崩溃后调整应用的行为或 UI,这会很方便。 某些开发人员可能希望向他们的用户显示某些内容,或者在发生故障后进行触摸。

有关最后一个崩溃的详细信息

如果你的应用此前崩溃,你可以获取有关最后一个崩溃的详细信息。

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

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

AppCenter.Crashes.lastSessionCrashReport(success, error);

自定义 App Center 崩溃的使用情况

App Center 崩溃使开发人员能够在向 App Center 发送崩溃日志之前和之后执行其他操作。

在 JavaScript 中处理崩溃

可以通过 APPCENTER_CRASHES_ALWAYS_SENDconfig.xml 中更改首选项值,将 SDK 配置为自动发送故障报告或在 JavaScript 中处理崩溃。 若要在 JavaScript 中处理崩溃,请将其设置为 false

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

然后,可以使用 AppCenter.Crashes.process(processFunction, errorCallback) 方法自定义崩溃 procession。

是否应处理崩溃?

false sendCallback 如果要确定是否需要处理特定的故障,请将传递到。 例如,可能存在要忽略的系统级崩溃,并且不希望发送到 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);

否则,传递 truesendCallback 函数,将会发送故障。

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.xml 中的首选项值设置为 false

因此,此功能依赖于 JavaScript 中的 处理崩溃

向崩溃报表添加附件

您可以向崩溃报表添加二进制和文本附件。 SDK 会将它们连同崩溃一起发送,以便您可以在 App Center 门户中查看它们。 在从以前的应用程序启动(但不是在崩溃时间)发送存储的崩溃之前,将直接调用以下回调。 请确保附件文件 命名 minidump.dmp ,因为该名称已保留用于小型转储文件。 下面的示例演示如何在崩溃中附加文本和图像:

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.xml 中的首选项设置为 false

因此,此功能依赖于 JavaScript 中的 处理崩溃

备注

在 Android 上,大小限制目前为 1.4 MB,在 iOS 上为 7 MB。 如果尝试发送更大的附件,则会触发错误。

在运行时启用或禁用 App Center 崩溃

可以在运行时启用和禁用 App Center 崩溃。 如果禁用该功能,SDK 将不会对应用执行任何崩溃报告。

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

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

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

若要使 App Center 再次崩溃,请使用相同的 API,但将 true 作为参数传递。

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

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

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

在应用程序启动期间,状态将保留在设备的存储中。

检查是否已启用 App Center 崩溃

还可以检查是否已启用 App Center 崩溃:

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

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