App Center 當機 (Cordova)

注意

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

否則,會傳遞 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);

注意

若要使用這項功能,您必須將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);