Sdílet prostřednictvím


Havárie App Center (React Native)

Důležité

Visual Studio App Center bylo vyřazeno 31. března 2025 s výjimkou funkcí Analýzy a diagnostiky, které se budou dál podporovat až do 30. června 2026. Další informace.

Pokaždé, když vaše aplikace spadne, funkce App Center Crashes automaticky vygeneruje záznam pádu. Protokol se nejprve zapíše do úložiště zařízení a když uživatel aplikaci znovu spustí, zpráva o chybovém ukončení se odešle do App Center. Shromažďování chybových ukončení funguje pro beta i živé aplikace, tj. ty odeslané do Google Play. Protokoly havárií obsahují cenné informace, které vám pomohou opravit havárie.

Pokud jste ještě nenastavili sadu SDK ve své aplikaci, postupujte podle části Začínáme .

Všude, kde používáte App Center Crashes, přidejte do horní části souboru následující import.

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

Vyvolat testovací pád

App Center Crashes poskytuje rozhraní API pro vygenerování zkušebního pádu pro snadné testování SDK. Toto rozhraní API se dá použít jenom v testovacích a beta aplikacích a nebude v produkčních aplikacích nic dělat.

Crashes.generateTestCrash();

Také je snadné vygenerovat chybové ukončení JavaScriptu. Do kódu přidejte následující řádek, který vyvolá chybu JavaScriptu a způsobí chybové ukončení.

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

Návod

Aby se tato chyba odesílala do App Center, musí být vaše aplikace React Native zkompilována v režimu release.

Poznámka:

V tuto chvíli App Center nepodporuje zdrojové mapy pro odminifikování tras JavaScriptového zásobníku pro aplikace React Native na Androidu.

Poznámka:

Osvědčeným postupem je vyhnout se javascriptovým throw příkazům s řetězcovou hodnotou (např. ), protože throw 'message'React Native v tomto scénáři nezachovává úplný javascriptový zásobník. Místo toho JavaScript throwError (např.: throw Error('message')).

Získejte více informací o předchozím pádu

App Center crashes má dvě rozhraní API, která poskytují další informace pro případ, že dojde k chybovému ukončení vaší aplikace.

Obdržela aplikace v předchozí relaci upozornění na nedostatek paměti?

Kdykoli po spuštění sady SDK můžete zkontrolovat, jestli aplikace v předchozí relaci obdržela upozornění na paměť:

const hadLowMemoryWarning = await Crashes.hasReceivedMemoryWarningInLastSession();

Poznámka:

V některých případech nemusí zařízení s nedostatkem paměti odesílat události.

Došlo k pádu aplikace v předchozí relaci?

Kdykoli po spuštění sady SDK můžete zkontrolovat, zda aplikace při předchozím spuštění havarovala.

const didCrash = await Crashes.hasCrashedInLastSession();

To se hodí v případě, že chcete upravit chování nebo uživatelské rozhraní aplikace po havárii. Někteří vývojáři se rozhodli zobrazit další uživatelské rozhraní, aby se omlouval svým uživatelům, nebo chtějí, aby se po havárii mohli spojit.

Podrobnosti o posledním pádu

Pokud se vaše aplikace dříve chybově ukončila, můžete získat podrobnosti o posledním chybovém ukončení.

const crashReport = await Crashes.lastSessionCrashReport();

Přizpůsobit používání funkce havárií v App Center

Služba App Center Crashes poskytuje zpětná volání, která umožňují vývojářům provádět další akce před odesláním protokolů o pádech do App Center.

Chybové ukončení zpracování v JavaScriptu

Aby vaše Crash.setListener metody fungovaly podle očekávání, musíte zkontrolovat, jestli je vaše aplikace správně nakonfigurovaná.

  1. Otevřete soubor projektu ios/YourAppName/AppDelegate.m a ověřte, že máte [AppCenterReactNativeCrashes register]; místo [AppCenterReactNativeCrashes registerWithAutomaticProcessing];.
  2. Otevřete soubor projektu android/app/src/main/res/values/strings.xml a ověřte, že appCenterCrashes_whenToSendCrashes je nastavená hodnota ASK_JAVASCRIPT.

Všechna různá zpětná volání posluchače událostí jsou popsána jedno po druhém v tomto dokumentu, ale musíte nastavit jednoho posluchače událostí, který definuje všechna zpětná volání najednou.

Měla by se havárie zpracovat?

Tuto zpětné volání implementujte, pokud se chcete rozhodnout, jestli je potřeba zpracovat konkrétní chybové ukončení nebo ne. Může se například stát, že dojde k chybovému ukončení na úrovni systému, které byste chtěli ignorovat a že nechcete posílat do App Center.

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

Poznámka:

Pokud chcete tuto funkci použít, musíte aplikaci správně nakonfigurovat pro službu crash.

Tato funkce závisí na zpracování havárií v JavaScriptu.

Pokud je pro vás ochrana osobních údajů důležitá, měli byste před odesláním zprávy o chybovém ukončení do App Center získat potvrzení uživatele. SDK poskytuje zpětné volání, které instruuje App Center Crashes, aby před odesláním jakýchkoli zpráv o chybách čekal na potvrzení uživatele.

Pokud jste se rozhodli to udělat, zodpovídáte za získání potvrzení uživatele, například prostřednictvím dialogového okna s jednou z následujících možností: Vždy odeslat, Odeslat a Neodesílat. Na základě vkladu dat řeknete aplikaci App Center, jak řešit pád aplikace, a ten pak bude následně řešen odpovídajícím způsobem.

Poznámka:

Sada SDK pro toto dialogové okno nezobrazuje, aplikace musí poskytnout vlastní uživatelské rozhraní, aby požádala o souhlas uživatele.

Následující zpětné volání ukazuje, jak sadě SDK sdělit, aby před odesláním chybových ukončení čekala na potvrzení uživatele:

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

Pokud funkce vrátí true, vaše aplikace musí pomocí vlastního kódu získat souhlas uživatele a aktualizovat SDK prostřednictvím následujícího rozhraní API:

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

Poznámka:

Pokud chcete tuto funkci použít, nakonfigurujte aplikaci správně pro službu chybového ukončení. Tato funkce závisí na zpracování chyb v JavaScriptu.

Získejte informace o stavu odesílání protokolu o selhání

Někdy chcete zjistit stav pádu aplikace. Běžným případem použití je, že můžete chtít zobrazit uživatelské rozhraní, které uživatelům říká, že aplikace odesílá zprávu o chybovém ukončení, nebo pokud se aplikace po spuštění rychle chybově ukončí, chcete upravit chování aplikace, aby se zajistilo odeslání protokolů chybových ukončení. App Center Crashes má tři různé callbacky, které můžete použít ve své aplikaci, abyste mohli sledovat, co se děje.

Chcete-li to provést, definujte v kódu naslouchací funkci událostí, jak je znázorněno v následujícím příkladu:

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

Všechny zpětné volání jsou volitelné. V objektu naslouchacího procesu události nemusíte zadávat všechny 3 metody, například můžete implementovat pouze onBeforeSending.

Poznámka:

Pokud chcete tuto funkci použít, musíte aplikaci správně nakonfigurovat pro službu crash.

Tato funkce závisí na zpracování havárií v JavaScriptu.

Poznámka:

Pokud je Crashes.setListener volána více než jednou, poslední má přednost; přepíše posluchače dříve nastavené Crashes.setListener.

Příjem onSendingFailed znamená, že došlo k neobnovitelné chybě, jako je kód 4xx . Například 401 znamená, že appSecret je nesprávná.

Toto zpětné volání se neaktivuje, pokud se jedná o problém se sítí. V tomto případě sada SDK pokračuje v opakování (a zároveň pozastaví opakování, zatímco síťové připojení je mimo provoz). V případě problémů se sítí nebo výpadkem koncového bodu se po restartování procesu znovu aktivuje aplikace onBeforeSending .

Přidání příloh do hlášení o pádu

Do zprávy o chybovém ukončení můžete přidat binární a textové přílohy. SDK je odešle spolu s pádem aplikace, abyste je mohli vidět na portálu App Center. Před odesláním uloženého chybového ukončení z předchozí aplikace se vyvolá následující zpětné volání. Když dojde k chybovému ukončení, nevyvolá se. Ujistěte se, že soubor přílohy není pojmenovaný minidump.dmp , protože tento název je vyhrazený pro soubory minidump. Tady je příklad, jak připojit text a obrázek k pádu aplikace:

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

Parametr fileName je volitelný (může být null) a používá se jenom na portálu App Center. Z konkrétního případu zhroucení na portálu můžete zobrazit přílohy a stáhnout je. Pokud jste zadali název souboru, bude to název souboru ke stažení, jinak se název souboru vygeneruje za vás.

Pokud chcete nastavit getErrorAttachments zpětné volání pro práci s funkcemi async/await ES2017, vraťte místo toho splněné přísliby. Následující příklad asynchronně připojí text a obrázek k pádu:

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

Poznámka:

Pokud chcete tuto funkci použít, musíte aplikaci správně nakonfigurovat pro službu crash.

Tato funkce závisí na zpracování havárií v JavaScriptu.

Poznámka:

Limit velikosti je aktuálně 1,4 MB v Androidu a 7 MB v iOSu. Při pokusu o odeslání větší přílohy dojde k chybě.

Vyřešené chyby

App Center také umožňuje sledovat chyby pomocí zpracovaných výjimek prostřednictvím metody trackError. Aplikace může volitelně připojit vlastnosti nebo přílohy k zpracovávané zprávě o chybách a poskytnout tak další kontext.

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

Breakpad

App Center podporuje hlášení chyb Breakpad přes Android NDK v aplikacích React Native.

Postupujte podle výše uvedených běžných kroků nastavení a v MainActivity.java přepište OnCreate a přidejte konfiguraci minidumpu a volání do nativního kódu, který nastavuje konfiguraci Breakpad.

Příklad:

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

Povolení nebo zakázání pádů App Center při běhu

Za běhu můžete povolit a zakázat pády aplikace App Center. Pokud ji zakážete, sada SDK pro aplikaci neudělá žádné zprávy o chybách.

await Crashes.setEnabled(false);

Pokud chcete znovu povolit pády aplikace App Center, použijte stejné rozhraní API, ale předejte true jako parametr.

await Crashes.setEnabled(true);

Stav se zachová v úložišti zařízení napříč spuštěním aplikace.

Kontrola, jestli je povolené chybové ukončení App Center

Můžete také zkontrolovat, jestli je funkce App Center pro sledování pádů aplikací povolená, nebo ne:

const enabled = await Crashes.isEnabled();