Chybové ukončení App Center (React Native)

Důležité

Visual Studio App Center je naplánované k vyřazení na 31. března 2025. I když můžete Visual Studio App Center dál používat, dokud ho úplně nevyřadíte, existuje několik doporučených alternativ, na které můžete migraci zvážit.

Přečtěte si další informace o časových osách a alternativách podpory.

Chybové ukončení app center automaticky vygeneruje protokol chybových ukončení pokaždé, když dojde k chybě aplikace. Protokol se nejprve zapíše do úložiště zařízení, a když uživatel aplikaci znovu spustí, zpráva o chybách se odešle do App Center. Shromažďování chyb funguje u beta i živých aplikací, tj. aplikací odeslaných na Google Play. Protokoly chyb obsahují cenné informace, které vám pomůžou chybu opravit.

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

Ať už používáte chyby app center, přidejte na začátek souboru následující import.

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

Vygenerování chybového ukončení testu

Chybové ukončení app center poskytuje rozhraní API pro vygenerování testovací chyby pro snadné testování sady SDK. Toto rozhraní API se dá použít jenom v testovacích nebo beta aplikacích a v produkčních aplikacích nic nedělá.

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

Tip

Aby se tato chyba odeslala do App Center, musí být vaše React Native aplikace zkompilovaná v režimu vydání.

Poznámka

App Center v současnosti nepodporuje zdrojové mapy ke sjednocení trasování zásobníku JavaScriptu pro aplikace pro Android React Native.

Poznámka

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

Získání dalších informací o předchozím chybovém ukončení

Aplikace App Center crashes má dvě rozhraní API, která poskytují další informace pro případ, že dojde k chybě 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 obdržela upozornění paměti v předchozí relaci:

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 chybě aplikace v předchozí relaci?

Kdykoli po spuštění sady SDK můžete zkontrolovat, jestli se aplikace při předchozím spuštění chybově ukončila:

const didCrash = await Crashes.hasCrashedInLastSession();

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

Podrobnosti o posledním chybovém ukončení

Pokud dříve došlo k chybovému ukončení vaší aplikace, můžete získat podrobnosti o posledním chybovém ukončení.

const crashReport = await Crashes.lastSessionCrashReport();

Přizpůsobení používání chyb app center

Chybové ukončení App Center poskytuje vývojářům zpětná volání, aby mohli provádět další akce před a při odesílání protokolů chyb do App Center.

Zpracování v JavaScriptu se chybově ukončí

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ý na ASK_JAVASCRIPThodnotu .

V tomto dokumentu se probírají všechna různá zpětná volání naslouchacího procesu událostí, ale musíte nastavit jeden naslouchací proces událostí, který definuje všechna zpětná volání najednou.

Mělo by se chybové ukončení zpracovat?

Toto zpětné volání implementujte, pokud se chcete rozhodnout, jestli je potřeba zpracovat konkrétní chybové ukončení. Může například dojít k chybovému ukončení na úrovni systému, které byste chtěli ignorovat a které nechcete odesí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žívat, musíte správně nakonfigurovat aplikaci pro službu chybového ukončení.

Tato funkce závisí na chybách zpracování v JavaScriptu.

Pokud je pro vás ochrana osobních údajů uživatelů důležitá, měli byste před odesláním zprávy o chybách do App Center získat potvrzení uživatele. Sada SDK zveřejňuje zpětné volání, které informuje o chybovém ukončení app center, aby před odesláním případných zpráv o chybách čekalo na potvrzení uživatele.

Pokud jste to zvolili, 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 posílat, Posílat a Neodesílat. Na základě zadání řeknete, co dělat, když dojde k chybám App Center, a chyba se pak zpracuje odpovídajícím způsobem.

Poznámka

V sadě SDK se nezobrazuje dialogové okno, aplikace musí poskytnout vlastní uživatelské rozhraní, které může požádat o souhlas uživatele.

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

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 vrátíte true, vaše aplikace musí získat (pomocí vlastního kódu) oprávnění uživatele a aktualizovat sadu SDK o výsledek pomocí 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 chybách zpracování v JavaScriptu.

Získání informací o stavu odesílání pro protokol chybových ukončení

Někdy chcete zjistit stav chybového ukončení aplikace. Běžným případem použití je, že můžete chtít zobrazit uživatelské rozhraní s oznámením uživatelům, že vaše aplikace odesílá zprávu o chybách, nebo v případě rychlého chybového ukončení aplikace po spuštění upravit chování aplikace, aby bylo možné odesílat protokoly chybových ukončení. Chybové ukončení App Center obsahuje tři různá zpětná volání, která můžete v aplikaci použít k oznámení o tom, co se děje.

Chcete-li to provést, definujte v kódu naslouchací proces 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šechna zpětná volání jsou volitelná. V objektu naslouchacího procesu událostí nemusíte zadávat všechny 3 metody, například můžete implementovat pouze onBeforeSending.

Poznámka

Pokud chcete tuto funkci používat, musíte správně nakonfigurovat aplikaci pro službu chybového ukončení.

Tato funkce závisí na chybách zpracování v JavaScriptu.

Poznámka

Pokud Crashes.setListener je volána více než jednou, poslední z nich vyhraje; přepíše naslouchací procesy dříve nastavené pomocí Crashes.setListener.

Příjem onSendingFailed znamená, že došlo k neopravitelné chybě, například k kódu 4xx . Například 401 znamená, že je špatně appSecret .

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 také pozastavuje opakování, když je síťové připojení mimo provoz). V případě problémů se sítí nebo výpadkem koncového bodu a vy restartujete aplikaci, onBeforeSending se po restartování procesu aktivuje znovu.

Přidání příloh ke zprávě o chybách

Do zprávy o chybách můžete přidat binární a textové přílohy. Sada SDK je odešle spolu s chybovým ukončením, abyste je viděli na portálu App Center. Následující zpětné volání se vyvolá těsně před odesláním uložené chyby z předchozích spuštění aplikace. Nebude vyvolána, když dojde k chybě. Ujistěte se, že soubor přílohy nemá název minidump.dmp , protože tento název je vyhrazený pro soubory s minidumpem. Tady je příklad připojení textu a obrázku k chybovému ukončení:

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 výskytu chybového ukončení 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í tak, aby fungovalo s funkcemi async/await ES2017, vraťte místo toho splněný příslib. Následující příklad připojí text a obrázek k chybovému ukončení asynchronním způsobem:

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žívat, musíte správně nakonfigurovat aplikaci pro službu chybového ukončení.

Tato funkce závisí na chybách zpracování v JavaScriptu.

Poznámka

Limit velikosti je aktuálně 1,4 MB na Androidu a 7 MB v iOSu. Pokus o odeslání větší přílohy způsobí chybu.

Zpracovávané chyby

App Center také umožňuje sledovat chyby pomocí zpracovaných výjimek pomocí trackError metody. Aplikace může volitelně připojit vlastnosti nebo/a přílohy ke zpracovávané zprávě o chybách, aby poskytla 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 chybové ukončení breakpadu ze sady Android NDK v React Native aplikacích.

Postupujte podle výše uvedených kroků normálního nastavení a v MainActivity.java přepsání OnCreate a přidejte konfiguraci a volání minidump do nativního kódu, který nastavuje konfiguraci breakpadu.

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í chyb app center za běhu

Za běhu můžete povolit a zakázat chybové ukončení App Center. Pokud ho zakážete, sada SDK nebude pro aplikaci hlásit žádné chybové ukončení.

await Crashes.setEnabled(false);

Pokud chcete znovu povolit chybové ukončení app center, použijte stejné rozhraní API, ale předejte true ho jako parametr.

await Crashes.setEnabled(true);

Stav se během spouštění aplikací zachová v úložišti zařízení.

Kontrola, jestli je povolená chyba app center

Můžete také zkontrolovat, jestli je povolená chyba App Center:

const enabled = await Crashes.isEnabled();