Chybové ukončení app center (MAUI a Xamarin)
Důležité
31. března 2025 je naplánované vyřazení z provozu. I když můžete dál používat Visual Studio App Center, dokud ho úplně vyřadíte, existuje několik doporučených alternativ, na které můžete zvážit migraci.
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 chybovému ukončení aplikace. Protokol se nejprve zapíše do úložiště zařízení a když uživatel aplikaci znovu spustí, odešle se do App Center zpráva o chybovém ukončení. Shromažďování chyb funguje pro beta i živé aplikace, tj. ty, které byly odeslány do App Store. Protokoly chyb obsahují cenné informace, které vám pomůžou chybu opravit.
Pokud jste v aplikaci ještě nenastavili sadu SDK, postupujte podle části Začínáme.
Protokoly chyb v iOSu také vyžadují symboliku. Přečtěte si dokumentaci k diagnostice app center , která vysvětluje, jak pro vaši aplikaci poskytnout symboly.
Poznámka
V systémech iOS a Mac sada SDK neuloží žádný protokol chybových ukončení, pokud jste připojili ladicí program. Ujistěte se, že ladicí program není připojený při chybovém ukončení aplikace pro iOS a macOS. V Systému Android může dojít k chybovému ukončení, když máte připojený ladicí program, ale po prolomení neošetřené výjimky musíte pokračovat v provádění.
Aplikace App Center Crashes poskytuje rozhraní API pro vygenerování testovacího chybového ukončení pro snadné testování sady SDK. Toto rozhraní API kontroluje konfiguraci ladění a verze. Můžete ho tedy použít jenom při ladění, protože nebude fungovat pro aplikace vydané verze.
Crashes.GenerateTestCrash();
Aplikace App Center Crashes má dvě rozhraní API, která poskytují další informace pro případ, že dojde k chybovému ukončení aplikace.
Kdykoli po spuštění sady SDK můžete zkontrolovat, jestli aplikace obdržela upozornění paměti v předchozí relaci:
bool hadMemoryWarning = await Crashes.HasReceivedMemoryWarningInLastSessionAsync();
Poznámka
Tuto metodu je možné použít pouze po Crashes
spuštění, vždy se vrátí false
před spuštěním.
Poznámka
V některých případech zařízení s nedostatkem paměti nemůže odesílat události.
Kdykoli po spuštění sady SDK můžete zkontrolovat, jestli aplikace při předchozím spuštění havarovala:
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync();
To se hodí pro případ, že chcete upravit chování nebo uživatelské rozhraní aplikace po chybovém ukončení. Někteří vývojáři se rozhodnou zobrazit další uživatelské rozhraní, aby se omluvili svým uživatelům, nebo chtějí, aby se po chybovém ukončení mohli spojit.
Poznámka
Tuto metodu je možné použít pouze po Crashes
spuštění, vždy se vrátí false
před spuštěním.
Pokud vaše aplikace dříve havarovala, můžete získat podrobnosti o posledním chybovém ukončení.
ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();
Poznámka
Tuto metodu je možné použít pouze po Crashes
spuštění, vždy se vrátí null
před spuštěním.
Pro toto rozhraní API existuje mnoho případů použití. Nejběžnějším z nich jsou lidé, kteří toto rozhraní API volají a implementují vlastního delegáta nebo naslouchacího procesu chybových ukončení.
Aplikace App Center Crashes poskytuje vývojářům zpětná volání, aby mohli před odesíláním protokolů chyb do App Center a při tom provádět další akce.
Poznámka
Před volánímAppCenter.Start()
nastavte zpětné volání, protože App Center začne zpracovávat chybové ukončení hned po spuštění.
Toto zpětné volání nastavte, 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 posílat do App Center.
Crashes.ShouldProcessErrorReport = (ErrorReport report) =>
{
// Check the report in here and return true or false depending on the ErrorReport.
return true;
};
Pokud je pro vás ochrana osobních údajů uživatelů důležitá, můžete před odesláním zprávy o chybovém ukončení do App Center získat potvrzení uživatele. Sada SDK zveřejňuje zpětné volání, které informuje o chybách App Center, aby před odesláním zpráv o chybách čekalo na potvrzení uživatele.
Pokud jste se tak rozhodli, 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 Neposílat. Na základě vstupu řeknete App Center, co dělat, a pak se s chybovým ukončením odpovídajícím způsobem zpracuje.
Poznámka
V sadě SDK se nezobrazuje dialogové okno, aplikace musí poskytnout vlastní uživatelské rozhraní, aby mohla požádat o souhlas uživatele.
Poznámka
Aplikace by neměla volat NotifyUserConfirmation
explicitně, pokud neimplementuje dialogové okno pro potvrzení uživatele. Modul Chybové ukončení bude zpracovávat posílání protokolů implicitně za vás.
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živatele:
Crashes.ShouldAwaitUserConfirmation = () =>
{
// 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;
};
V případě, že se vrátíte true
ve zpětném volání výše, musí vaše aplikace získat (pomocí vlastního kódu) oprávnění uživatele a odeslat zprávu sadě SDK s výsledkem pomocí následujícího rozhraní API.
// Depending on the user's choice, call Crashes.NotifyUserConfirmation() with the right value.
Crashes.NotifyUserConfirmation(UserConfirmation.DontSend);
Crashes.NotifyUserConfirmation(UserConfirmation.Send);
Crashes.NotifyUserConfirmation(UserConfirmation.AlwaysSend);
Jako příklad můžete odkázat na náš příklad vlastního dialogového okna.
Někdy chcete znát stav chybového ukončení aplikace. Běžným případem použití je, že můžete chtít zobrazit uživatelské rozhraní, které uživatelům oznámí, že vaše aplikace odesílá zprávu o chybovém ukončení, nebo v případě, že aplikace po spuštění rychle padá, chcete upravit chování aplikace, aby bylo možné odesílat protokoly chybových ukončení. Chybové ukončení App Center poskytuje tři různá zpětná volání, která můžete v aplikaci použít k oznámení o tom, co se děje:
Crashes.SendingErrorReport += (sender, e) =>
{
// Your code, e.g. to present a custom UI.
};
V případě, že máme problémy se sítí nebo výpadek koncového bodu a restartujete aplikaci, SendingErrorReport
aktivuje se po restartování procesu znovu.
Crashes.SentErrorReport += (sender, e) =>
{
// Your code, e.g. to hide the custom UI.
};
Pokud se sadě SDK nepodařilo odeslat protokol chybových ukončení, vyvolá se následující zpětné volání.
Crashes.FailedToSendErrorReport += (sender, e) =>
{
// Your code goes here.
};
Příjem FailedToSendErrorReport
znamená, že došlo k neobnovitelné chybě, například ke kódu 4xx . Například hodnota 401 znamená, že appSecret
je špatná.
Toto zpětné volání se neaktivuje, pokud se jedná o problém se sítí. V tomto případě sada SDK stále opakuje pokusy (a pozastavuje opakování, když je síťové připojení mimo provoz).
Do zprávy o chybovém ukončení můžete přidat binární a textové přílohy. Sada SDK je odešle spolu s chybovým ukončením, abyste je mohli zobrazit na portálu App Center. Následující zpětné volání se vyvolá přímo před odesláním uloženého chybového ukončení z předchozích spuštění aplikace. Když dojde k chybě, nebude vyvolána. 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 připojení textu a obrázku k chybovému ukončení:
Crashes.GetErrorAttachments = (ErrorReport report) =>
{
// Your code goes here.
return new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
};
Poznámka
Limit velikosti je aktuálně 7 MB. Při pokusu o odeslání větší přílohy dojde k chybě.
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í.
Crashes.SetEnabledAsync(false);
Pokud chcete znovu povolit chybové ukončení App Centeru, použijte stejné rozhraní API, ale předejte true
ho jako parametr.
Crashes.SetEnabledAsync(true);
Na toto volání nemusíte čekat, aby byla další volání rozhraní API (například IsEnabledAsync
) konzistentní.
Stav se v úložišti zařízení během spouštění aplikací udržuje.
Poznámka
Tuto metodu je možné použít pouze po Crashes
spuštění.
Můžete také zkontrolovat, jestli je povolená chyba App Center:
bool isEnabled = await Crashes.IsEnabledAsync();
Poznámka
Tato metoda musí být použita pouze po Crashes
spuštění, bude vždy vrácena false
před spuštěním.
App Center také umožňuje sledovat chyby pomocí zpracovaných výjimek. Použijte k tomu metodu TrackError
:
try {
// your code goes here.
} catch (Exception exception) {
Crashes.TrackError(exception);
}
Aplikace může volitelně připojit vlastnosti ke zpracovávané zprávě o chybách a poskytnout tak další kontext. Předejte vlastnosti jako slovník dvojic klíč/hodnota (pouze řetězce), jak je znázorněno v následujícím příkladu.
try {
// your code goes here.
} catch (Exception exception) {
var properties = new Dictionary<string, string>
{
{ "Category", "Music" },
{ "Wifi", "On"}
};
Crashes.TrackError(exception, properties);
}
Do sestavy zpracovávané chyby můžete také volitelně přidat binární a textové přílohy. Předejte přílohy jako pole ErrorAttachmentLog
objektů, jak je znázorněno v následujícím příkladu.
try {
// your code goes here.
} catch (Exception exception) {
var attachments = new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
Crashes.TrackError(exception, attachments: attachments);
}