App Center 損毀 (Cordova)

重要

Visual Studio App Center 已排定於 2025 年 3 月 31 日淘汰。 雖然您可以繼續使用 Visual Studio App Center,直到完全淘汰為止,但有數個建議的替代方案可以考慮移轉至。

深入瞭解支持時程表和替代方案。

注意

Cordova Apps 的支援已於 2022 年 4 月結束。 在 App Center 部落格中尋找詳細資訊。

App Center 當機會在每次應用程式當機時自動產生當機記錄。 記錄會先寫入裝置的記憶體,當使用者再次啟動應用程式時,當機報告會傳送至 App Center。 收集當機適用於 Beta 和即時應用程式,也就是提交至 App Store 的應用程式。 當機記錄包含寶貴的資訊,可協助您修正當機。

如果您尚未在應用程式中設定 SDK,請遵循 使用者入門 一節。

產生測試當機

App Center 當機可讓您使用 API 來產生測試損毀,以便輕鬆測試 SDK。 此 API 只能用於測試/Beta 應用程式,且不會在生產應用程式中執行任何動作。

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 中處理當機

您可以藉由變更 config.xml中的喜好APPCENTER_CRASHES_ALWAYS_SEND設定值,將 SDK 設定為自動傳送當機報告,或在 JavaScript 中處理當機。 若要在 JavaScript 中處理當機,請將它設定為 false

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

然後,您可以使用 AppCenter.Crashes.process(processFunction, errorCallback) 方法來自定義損毀進程。

是否應該處理當機?

如果您要決定是否需要處理特定當機,請傳遞 falsesendCallback 。 例如,您可能想要忽略系統層級損毀,而且您不想傳送至 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);

注意

若要使用此功能,您必須將 config.xml 中的喜好設定值設定APPCENTER_CRASHES_ALWAYS_SEND為 。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);

注意

若要使用該功能,您必須將 config.xml 中的喜好設定值設定APPCENTER_CRASHES_ALWAYS_SEND為 。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);