Megosztás a következőn keresztül:


Az App Center összeomlik (React natív)

Fontos

A Visual Studio App Center 2025. március 31-én megszűnt, kivéve az Elemzési és diagnosztikai funkciókat, amelyek 2026. június 30-ig továbbra is támogatottak lesznek. Tudj meg többet.

Az App Center összeomlásai automatikusan létrehoznak összeomlási naplót minden alkalommal, amikor az alkalmazás összeomlik. A napló először az eszköz tárolójába lesz beírva, és amikor a felhasználó újra elindítja az alkalmazást, a rendszer elküldi az összeomlási jelentést az App Centernek. Az összeomlások gyűjtése a bétaverziós és az élő alkalmazások, azaz a Google Play-be küldött alkalmazások esetében is működik. Az összeomlási naplók értékes információkat tartalmaznak az összeomlás elhárításához.

Kövesse az Első lépések szakaszt, ha még nem állította be az SDK-t az alkalmazásban.

Bárhol is használja az App Center Összeomlások funkcióját, adja hozzá az alábbi importálást a fájl tetején.

// Import App Center Crashes at the top of the file.
import Crashes from 'appcenter-crashes';

Készítsen tesztösszeomlást

Az App Center Crashes egy API-t biztosít, amellyel tesztösszeomlást hozhat létre az SDK egyszerű teszteléséhez. Ez az API csak tesztelési/bétaverziós alkalmazásokban használható, és az éles alkalmazásokban semmit sem fog tenni.

Crashes.generateTestCrash();

JavaScript-összeomlást is könnyen létrehozhat. Adja hozzá a következő sort a kódhoz, amely JavaScript-hibát okoz, és összeomlást okoz.

throw new Error('This is a test javascript crash!');

Jótanács

A React Native alkalmazást kiadási módban kell összeállítani ahhoz, hogy az összeomlást elküldhesse az App Centernek.

Megjegyzés:

Az App Center jelenleg nem támogatja a forrástérképeket az Android React natív alkalmazásainak JavaScript-veremkövetőinek megszüntetéséhez.

Megjegyzés:

Ajánlott elkerülni a Sztringértékkel (például: ) rendelkező JavaScript-utasítást, mivel a throw. throw 'message' throw Ehelyett JavaScript Error (például: throw Error('message')).

További információ az előző összeomlásról

Az App Center Összeomlások két API-val rendelkezik, amelyek további információt nyújtanak arról, hogy az alkalmazás összeomlott-e.

Az alkalmazás alacsony memóriahasználati figyelmeztetést kapott az előző munkamenetben?

Az SDK elindítása után bármikor ellenőrizheti, hogy az alkalmazás memóriariasztást kapott-e az előző munkamenetben:

const hadLowMemoryWarning = await Crashes.hasReceivedMemoryWarningInLastSession();

Megjegyzés:

Bizonyos esetekben előfordulhat, hogy a kevés memóriával rendelkező eszköz nem küld eseményeket.

Összeomlott az alkalmazás az előző munkamenetben?

Az SDK elindítása után bármikor ellenőrizheti, hogy az alkalmazás összeomlott-e az előző indításkor:

const didCrash = await Crashes.hasCrashedInLastSession();

Ez akkor hasznos, ha az összeomlás után módosítani szeretné az alkalmazás viselkedését vagy felhasználói felületét. Egyes fejlesztők úgy döntöttek, hogy további felhasználói felületet mutatnak, hogy bocsánatot kérjenek a felhasználóiktól, vagy szeretnének kapcsolatba lépni egy összeomlás után.

Az utolsó összeomlás részletei

Ha az alkalmazás korábban összeomlott, részletes információkat kaphat az utolsó összeomlásról.

const crashReport = await Crashes.lastSessionCrashReport();

Az App Center-összeomlások használatának testreszabása

Az App Center összeomlásai visszahívásokat biztosítanak a fejlesztőknek, hogy további műveleteket hajtsanak végre az összeomlási naplók App Centerbe való küldése előtt és során.

Összeomlások feldolgozása JavaScriptben

Ahhoz, hogy a Crash.setListener metódusok a várt módon működjenek, ellenőriznie kell, hogy az alkalmazás megfelelően van-e konfigurálva.

  1. Nyissa meg a projekt ios/YourAppName/AppDelegate.m fájlját, és győződjön meg arról, hogy rendelkezik [AppCenterReactNativeCrashes register]; ahelyett [AppCenterReactNativeCrashes registerWithAutomaticProcessing];.
  2. Nyissa meg a projekt android/app/src/main/res/values/strings.xml fájlját, és ellenőrizze, be van-e állítva appCenterCrashes_whenToSendCrashesASK_JAVASCRIPT.

Az eseményfigyelő összes visszahívását egyenként tárgyaljuk ebben a dokumentumban, de be kell állítania egy eseményfigyelőt, amely egyszerre definiálja az összes visszahívást.

Fel kell dolgoznunk az összeomlást?

Implementálja ezt a visszahívást, ha el szeretné dönteni, hogy egy adott összeomlást fel kell-e dolgozni vagy sem. Előfordulhat például egy rendszerszintű összeomlás, amelyet figyelmen kívül szeretne hagyni, és amelyet nem szeretne elküldeni az App Centerbe.

Crashes.setListener({

    shouldProcess: function (report) {
        return true; // return true if the crash report should be processed, otherwise false.
    },

    // Other callbacks must also be defined at the same time if used.
    // Default values are used if a method with return parameter isn't defined.
});

Megjegyzés:

A funkció használatához megfelelően konfigurálnia kell az alkalmazást a Crash szolgáltatáshoz.

Ez a funkció a JavaScript-összeomlások feldolgozásától függ.

Ha fontos önnek a felhasználói adatvédelem, akkor az összeomlási jelentés App Centerbe való elküldése előtt meg kell kapnia a felhasználó megerősítését. Az SDK biztosít egy visszahívást, amely az App Center Crashes számára jelzi, hogy várjon a felhasználói visszaigazolásra, mielőtt bármilyen összeomlási jelentést küldene.

Ha ezt választotta, ön a felelős a felhasználó megerősítésének beszerzéséért, például egy párbeszédpanelen keresztül, amely a következő lehetőségek egyikét tartalmazza: Always Send, Send és Don't send. A bemenet alapján meg fogja mondani az App Center Crashesnek, hogy mit kell tennie, és az összeomlást ennek megfelelően fogja kezelni.

Megjegyzés:

Az SDK ehhez nem jelenít meg párbeszédpanelt, az alkalmazásnak saját felhasználói felületet kell biztosítania a felhasználói hozzájárulás kéréséhez.

Az alábbi visszahívás bemutatja, hogyan adhatja az SDK-nak az utasítást, hogy várjon a felhasználói megerősítésre az összeomlások elküldése előtt.

Crashes.setListener({

    shouldAwaitUserConfirmation: function (report) {

        // Build your own UI to ask for user consent here. SDK doesn't provide one by default.

        // Return true if you built a UI for user consent and are waiting for user input on that custom UI, otherwise false.
        return true;
    },

    // Other callbacks must also be defined at the same time if used.
    // Default values are used if a method with return parameter isn't defined.
});

Ha visszatér true, az alkalmazásnak be kell szereznie (a saját kódjával) a felhasználó engedélyét, és frissítenie kell az SDK-t az eredménnyel a következő API használatával:

import Crashes, { UserConfirmation } from 'appcenter-crashes';

// Depending on the user's choice, call Crashes.notifyUserConfirmation() with the right value.
Crashes.notifyUserConfirmation(UserConfirmation.DONT_SEND);
Crashes.notifyUserConfirmation(UserConfirmation.SEND);
Crashes.notifyUserConfirmation(UserConfirmation.ALWAYS_SEND);

Megjegyzés:

A funkció használatához konfigurálja megfelelően az alkalmazást a Crash szolgáltatásra. A funkció a JavaScript-összeomlások feldolgozásától függ.

Információk az összeomlási napló küldési állapotáról

Időnként tudni szeretné az alkalmazás összeomlásának állapotát. Gyakori használati eset, hogy olyan felhasználói felületet szeretne megjeleníteni, amely tájékoztatja a felhasználókat arról, hogy az alkalmazás összeomlási jelentést küld, vagy ha az alkalmazás az indítás után gyorsan összeomlik, módosítania kell az alkalmazás viselkedését, hogy az összeomlási naplók elküldhetők legyenek. Az App Center Crashes funkció három különböző visszahívási ponttal rendelkezik, amelyeket az alkalmazásban használhat, hogy értesüljön arról, hogy mi történik.

Ehhez definiáljon egy eseményfigyelőt a kódban az alábbi példában látható módon:

Crashes.setListener({
    onBeforeSending: function (report) {
        // called after Crashes.process and before sending the crash.
    },
    onSendingSucceeded: function (report) {
        // called when crash report sent successfully.
    },
    onSendingFailed: function (report) {
        // called when crash report couldn't be sent.
    }

    // Other callbacks must also be defined at the same time if used.
    // Default values are used if a method with return parameter isn't defined.
});

Minden visszahívás opcionális. Az eseményfigyelő objektumban nem kell megadnia mind a 3 metódust, például csak onBeforeSendingimplementálható.

Megjegyzés:

A funkció használatához megfelelően konfigurálnia kell az alkalmazást a Crash szolgáltatáshoz.

Ez a funkció a JavaScript-összeomlások feldolgozásától függ.

Megjegyzés:

Ha Crashes.setListener többször hívják, az utolsó nyer; felülírja a korábban beállított Crashes.setListener figyelőket.

A(z) onSendingFailed azt jelenti, hogy nem helyreállítható hiba, például egy 4xx kód történt. Például a 401 azt jelenti, hogy a appSecret helytelen.

Ez a visszahívás hálózati probléma esetén nem aktiválódik. Ebben az esetben az SDK folytatja az újrapróbálkozást (és szünetelteti az újrapróbálkozást, amíg a hálózati kapcsolat leáll). Ha hálózati problémák vagy kimaradás lép fel a végponton, és újraindítja az alkalmazást, onBeforeSending a folyamat újraindítása után újra aktiválódik.

Összeomlási jelentéshez mellékletek hozzáadása

Bináris és szöveges mellékleteket is hozzáadhat az összeomlási jelentésekhez. Az SDK az összeomlással együtt küldi el őket, hogy megjelenjenek az App Center portálon. A rendszer a következő visszahívást hívja meg közvetlenül a tárolt összeomlás előző alkalmazásból való elküldése előtt. Az összeomlás bekövetkezésekor a rendszer nem fogja meghívni. Ügyeljen arra, hogy a mellékletfájl neve ne legyen elnevezve minidump.dmp , mivel a név a minidump fájlok számára van fenntartva. Íme egy példa arra, hogyan csatolhat szöveget és képet egy hibajelenséghez.

import Crashes, { ErrorAttachmentLog } from 'appcenter-crashes';

Crashes.setListener({
    getErrorAttachments(report) {
        const textAttachment = ErrorAttachmentLog.attachmentWithText('Hello text attachment!', 'hello.txt');
        const binaryAttachment = ErrorAttachmentLog.attachmentWithBinary(`${imageAsBase64string}`, 'logo.png', 'image/png');
        return [textAttachment, binaryAttachment];
    }

    // Other callbacks must also be defined at the same time if used.
    // Default values are used if a method with return parameter isn't defined.
});

A fileName paraméter nem kötelező (lehet null) és csak az App Center portálon használható. A portálon egy adott összeomlási eseményből láthatja a mellékleteket, és letöltheti őket. Ha megadott egy fájlnevet, az lesz a letöltendő fájlnév, ellenkező esetben a rendszer létrehozza a fájlnevet.

Ha az ES2017 async/await függvényekkel való együttműködésre szeretné beállítani a getErrorAttachments visszahívást, ehelyett egy teljesített ígéretet ad vissza. Az alábbi példa aszinkron módon csatol egy szöveget és egy képet egy összeomláshoz:

import Crashes, { ErrorAttachmentLog } from 'appcenter-crashes';

Crashes.setListener({
    getErrorAttachments(report) {
        return (async () => {
            const textContent = await readTextFileAsync(); // use your async function to read text file
            const binaryContent = await readBinaryFileAsync(); // use your async function to read binary file
            const textAttachment = ErrorAttachmentLog.attachmentWithText(textContent, 'hello.txt');
            const binaryAttachment = ErrorAttachmentLog.attachmentWithBinary(binaryContent, 'logo.png', 'image/png');
            return [textAttachment, binaryAttachment];
        })();
    }

    // Other callbacks must also be defined at the same time if used.
    // Default values are used if a method with return parameter isn't defined.
});

Megjegyzés:

A funkció használatához megfelelően konfigurálnia kell az alkalmazást a Crash szolgáltatáshoz.

Ez a funkció a JavaScript-összeomlások feldolgozásától függ.

Megjegyzés:

A méretkorlát jelenleg 1,4 MB Androidon és 7 MB iOS rendszeren. Ha nagyobb mellékletet kísérel meg elküldeni, hiba lép fel.

Kezelt hibák

Az App Center lehetővé teszi a hibák nyomon követését is a kezelt kivételek metóduson keresztüli trackError használatával. Az alkalmazások tetszés szerint tulajdonságokat vagy/és mellékleteket csatolhatnak egy kezelt hibajelentéshez, hogy további kontextust biztosítsanak.

try {
    // Throw error.
} catch (error) {

    // Prepare properties.
    const properties = { 'Category' : 'Music', 'Wifi' : 'On' };

    // Prepare attachments.
    const textAttachment = ErrorAttachmentLog.attachmentWithText('Hello text attachment!', 'hello.txt');
    const attachments = [textAttachment];

    // Create an exception model from error.
    const exceptionModel1 = ExceptionModel.createFromError(error);

    // ..or generate with your own error data.
    const exceptionModel2 = ExceptionModel.createFromTypeAndMessage("type", "message", "stacktrace");

    // Track error with custom data.
    Crashes.trackError(exceptionModel1, properties, attachments);
    Crashes.trackError(exceptionModel1, properties, nil);
    Crashes.trackError(exceptionModel2, nil, attachments);
    Crashes.trackError(exceptionModel2, nil, nil);
}

Megszakító

Az App Center támogatja az Android NDK Breakpad összeomlások kezelését a React Native alkalmazásokban.

Kövesse a fenti szokásos beállítási lépéseket, majd a MainActivity.java és OnCreate felülírás során adja hozzá a minidump konfigurációt, és hívja meg a Breakpad konfigurációját beállító natív kódot.

Példa:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Crashes.getMinidumpDirectory().thenAccept(new AppCenterConsumer<String>() {
      @Override
      public void accept(String path) {
        // Path is null when Crashes is disabled.
        if (path != null) {
          // links to NDK
          setupBreakpadListener(path);
        }
      }
    });
  }

Az App Center futásidejű összeomlásainak engedélyezése vagy letiltása

Futásidőben engedélyezheti és letilthatja az App Center összeomlás funkcióját. Ha letiltja, az SDK nem végez összeomlási jelentést az alkalmazáshoz.

await Crashes.setEnabled(false);

Az App Center összeomlásainak újbóli engedélyezéséhez használja ugyanazt az API-t, de adjon át true paraméterként.

await Crashes.setEnabled(true);

Az állapot megmarad az eszköz tárolójában az alkalmazásindítások során.

Ellenőrizze, hogy engedélyezve van-e az App Center Crashes funkciója

Azt is ellenőrizheti, hogy engedélyezve van-e az App Center Crashes:

const enabled = await Crashes.isEnabled();