Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Visual Studio App Center drogs tillbaka den 31 mars 2025, förutom analys- och diagnostikfunktionerna, som fortsätter att stödjas fram till den 30 juni 2026. Läs mer.
App Center-krascher genererar automatiskt en kraschlogg varje gång appen kraschar. Loggen skrivs först till enhetens lagring och när användaren startar appen igen skickas kraschrapporten till App Center. Insamling av krascher fungerar för både beta- och liveappar, dvs. de som skickas till Google Play. Kraschloggar innehåller värdefull information som hjälper dig att åtgärda kraschen.
Följ avsnittet Komma igång om du inte har konfigurerat SDK:t i ditt program ännu.
Varje gång du använder App Center Crashes, lägg till följande import överst i filen.
// Import App Center Crashes at the top of the file.
import Crashes from 'appcenter-crashes';
Generera en testkrasch
Med App Center-krascher får du ett API för att generera en testkrasch för enkel testning av SDK:n. Det här API:et kan bara användas i test-/betaappar och gör ingenting i produktionsappar.
Crashes.generateTestCrash();
Det är också enkelt att generera en JavaScript-krasch. Lägg till följande rad i koden, som utlöser ett JavaScript-fel och orsakar en krasch.
throw new Error('This is a test javascript crash!');
Tips/Råd
Din React Native-app måste kompileras i versionsläge för att den här kraschen ska skickas till App Center.
Anmärkning
För närvarande stöder App Center inte källkartor för att åtgärda JavaScript-spårningsstackar för Android React Native-appar.
Anmärkning
Det är bästa praxis att undvika JavaScript-instruktionen throw
med ett strängvärde (t.ex. : throw 'message'
), eftersom React Native inte bevarar en fullständig JavaScript-stack i det här scenariot.
throw
I stället en JavaScript Error
(t.ex. : throw Error('message')
).
Få mer information om en tidigare krasch
App Center-krascher har två API:er som ger dig mer information om din app har kraschat.
Fick appen en varning om lite minne i föregående session?
När som helst efter att du har startat SDK:n kan du kontrollera om appen fick en minnesvarning i föregående session:
const hadLowMemoryWarning = await Crashes.hasReceivedMemoryWarningInLastSession();
Anmärkning
I vissa fall kanske en enhet med lite minne inte skickar händelser.
Kraschade appen i föregående session?
När som helst efter att du har startat SDK kan du kontrollera om appen kraschade i föregående start:
const didCrash = await Crashes.hasCrashedInLastSession();
Detta är praktiskt om du vill justera appens beteende eller användargränssnitt efter att en krasch har inträffat. Vissa utvecklare valde att visa ytterligare användargränssnitt för att be om ursäkt till sina användare, eller vill ha ett sätt att komma i kontakt efter att en krasch har inträffat.
Information om den senaste kraschen
Om appen kraschade tidigare kan du få information om den senaste kraschen.
const crashReport = await Crashes.lastSessionCrashReport();
Anpassa din användning av App Center Crashes
App Center-krascher ger återanrop till utvecklare för att utföra ytterligare åtgärder före och när kraschloggar skickas till App Center.
Bearbetning kraschar i JavaScript
För att dina Crash.setListener
metoder ska fungera som förväntat måste du kontrollera om programmet har konfigurerats korrekt.
- Öppna projektets
ios/YourAppName/AppDelegate.m
-fil och kontrollera att du har[AppCenterReactNativeCrashes register];
istället för[AppCenterReactNativeCrashes registerWithAutomaticProcessing];
. - Öppna projektets
android/app/src/main/res/values/strings.xml
fil och kontrollera attappCenterCrashes_whenToSendCrashes
är inställt påASK_JAVASCRIPT
.
Alla olika återanrop för händelselyssnaren diskuteras en i taget i det här dokumentet, men du behöver ställa in en händelselyssnare som konfigurerar alla återanrop samtidigt.
Ska kraschen bearbetas?
Implementera det här återanropet om du vill avgöra om en viss krasch behöver hanteras eller inte. Det kan till exempel finnas en krasch på systemnivå som du vill ignorera och som du inte vill skicka till 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.
});
Anmärkning
Om du vill använda den funktionen måste du konfigurera programmet korrekt för Crash-tjänsten.
Den här funktionen beror på bearbetningskrascher i JavaScript.
Be om användarens medgivande att skicka en kraschlogg
Om användarsekretess är viktigt för dig bör du få användarbekräftelse innan du skickar en kraschrapport till App Center. SDK exponerar ett återanrop som instruerar App Center Crashes att invänta bekräftelse från användaren innan kraschrapporter skickas.
Om du väljer att göra det ansvarar du för att få användarens bekräftelse, t.ex. via en dialogruta med något av följande alternativ: Skicka, Skicka alltid och Skicka inte. Baserat på indata kommer du att instruera App Center Crashes om åtgärderna som ska vidtas, och kraschen kommer sedan att hanteras därefter.
Anmärkning
SDK:t visar ingen dialogruta för detta. Appen måste ange ett eget användargränssnitt för att be om användarmedgivande.
Följande återanrop visar hur du instruerar SDK:t att vänta på att användaren bekräftas innan krascher skickas:
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.
});
Om du returnerar true
måste appen hämta (med din egen kod) användarens behörighet och uppdatera SDK:n med resultatet med hjälp av följande 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);
Anmärkning
Om du vill använda den här funktionen konfigurerar du programmet korrekt för Crash-tjänsten. Funktionen är beroende av bearbetningskrascher i JavaScript.
Hämta information om statusen för sändningen av en kraschlogg
Ibland vill du veta status för din appkrasch. Ett vanligt användningsfall är att du kanske vill visa användargränssnittet som talar om för användarna att din app skickar en kraschrapport, eller, om din app kraschar snabbt efter starten, vill du justera appens beteende för att se till att kraschloggarna kan skickas. App Center Crashes har tre olika callbacks som du kan använda i din app för att bli informerad om vad som pågår.
Det gör du genom att definiera en händelselyssnare i koden enligt följande exempel:
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.
});
Alla återanrop är valfria. Du behöver inte ange alla tre metoderna i händelselyssningsobjektet, till exempel kan du bara onBeforeSending
implementera .
Anmärkning
Om du vill använda den funktionen måste du konfigurera programmet korrekt för Crash-tjänsten.
Den här funktionen beror på bearbetningskrascher i JavaScript.
Anmärkning
Om Crashes.setListener
anropas mer än en gång vinner den sista. Den åsidosätter lyssnare som tidigare angetts av Crashes.setListener
.
Att ta emot onSendingFailed
innebär att ett fel som inte kan återställas, till exempel en 4xx-kod , inträffade. Till exempel betyder 401 att det är appSecret
fel.
Återanropet utlöses inte om det är ett nätverksproblem. I det här fallet fortsätter SDK:n att försöka igen (och pausar även återförsök medan nätverksanslutningen är nere). Om vi har nätverksproblem eller ett avbrott på slutpunkten och du startar om appen onBeforeSending
utlöses den igen efter att processen startats om.
Lägga till bifogade filer i en kraschrapport
Du kan lägga till binära filer och textbilagor i en kraschrapport. SDK skickar dem tillsammans med kraschen så att du kan se dem i App Center-portalen. Följande återanrop utförs strax före den lagrade kraschen skickas efter tidigare programstarter. Den anropas inte när kraschen inträffar. Kontrollera att den bifogade filen inte är namngiven minidump.dmp
eftersom namnet är reserverat för minidump-filer. Här är ett exempel på hur du kopplar text och en bild till en krasch:
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.
});
Parametern fileName
är valfri (kan vara null
) och används endast i App Center-portalen. Från en specifik kraschincident i portalen kan du se bifogade filer och ladda ned dem. Om du har angett ett filnamn är det filnamnet som ska laddas ned, annars genereras filnamnet åt dig.
Om du vill konfigurera återanropet getErrorAttachments
så att det fungerar med asynkrona/väntande funktioner för ES2017 returnerar du ett uppfyllt löfte i stället. I följande exempel bifogas en text och en bild till en krasch på ett asynkront sätt:
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.
});
Anmärkning
Om du vill använda den funktionen måste du konfigurera programmet korrekt för Crash-tjänsten.
Den här funktionen beror på bearbetningskrascher i JavaScript.
Anmärkning
Storleksgränsen är för närvarande 1,4 MB på Android och 7 MB på iOS. Om du försöker skicka en större bifogad fil utlöses ett fel.
Hanterade fel
Med App Center kan du också spåra fel med hjälp av hanterade undantag via trackError
metod. En app kan eventuellt koppla egenskaper eller/och bifogade filer till en hanterad felrapport för att ge ytterligare 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);
}
Brytblock
App Center stöder Breakpad-krascher från Android NDK i en React Native-app.
Följ de normala installationsstegen ovan, och i åsidosättningen MainActivity.java
OnCreate
och lägg till minidump-konfigurationen och anropa i din interna kod som konfigurerar din Breakpad-konfiguration.
Exempel:
@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);
}
}
});
}
Aktivera eller inaktivera App Center-krascher vid körning
Du kan aktivera och inaktivera App Center-krascher under körning. Om du inaktiverar det gör SDK:t ingen kraschrapportering för appen.
await Crashes.setEnabled(false);
Om du vill aktivera App Center-krascher igen använder du samma API men skickar true
som en parameter.
await Crashes.setEnabled(true);
Tillståndet sparas i enhetens lagring mellan programstarter.
Kontrollera om App Center-krascher är aktiverat
Du kan också kontrollera om App Center-krascher är aktiverat eller inte:
const enabled = await Crashes.isEnabled();