App Center Kilitleniyor (React Native)
Önemli
Visual Studio App Center 31 Mart 2025'te kullanımdan kaldırılıyor. Tamamen kullanımdan kaldırılana kadar Visual Studio App Center'ı kullanmaya devam edebilirsiniz ancak geçiş yapmayı düşünebileceğiniz birkaç önerilen alternatif vardır.
Destek zaman çizelgeleri ve alternatifleri hakkında daha fazla bilgi edinin.
App Center Kilitlenmeleri, uygulamanız her kilitlenişinde otomatik olarak bir kilitlenme günlüğü oluşturur. Günlük ilk olarak cihazın depolama alanına yazılır ve kullanıcı uygulamayı yeniden başlattığında kilitlenme raporu App Center'a gönderilir. Kilitlenmeleri toplamak hem beta hem de canlı uygulamalar için (örneğin Google Play'e gönderilenler) işe yarar. Kilitlenme günlükleri, kilitlenmeyi düzeltmenize yardımcı olacak değerli bilgiler içerir.
Uygulamanızda SDK'yı henüz ayarlamadıysanız Başlarken bölümünü izleyin.
App Center Kilitlenmelerini nerede kullanıyorsanız kullanın, dosyanın en üstüne aşağıdaki içeri aktarmayı ekleyin.
// Import App Center Crashes at the top of the file.
import Crashes from 'appcenter-crashes';
Test kilitlenmesi oluşturma
App Center Kilitlenmeleri, SDK'nın kolay testine yönelik bir test kilitlenmesi oluşturmak için size bir API sağlar. Bu API yalnızca test/beta uygulamalarında kullanılabilir ve üretim uygulamalarında hiçbir şey yapmaz.
Crashes.generateTestCrash();
JavaScript kilitlenmesi oluşturmak da kolaydır. JavaScript hatası oluşturan ve kilitlenmeye neden olan aşağıdaki satırı kodunuza ekleyin.
throw new Error('This is a test javascript crash!');
İpucu
Bu kilitlenmenin App Center'a gönderilmesi için React Native uygulamanızın yayın modunda derlenmesi gerekir.
Not
App Center şu anda Android React Native uygulamaları için JavaScript yığın izlemelerini netleştirmek için kaynak eşlemeleri desteklememektedir.
Not
React Native bu senaryoda tam JavaScript yığınını korumadığından, javaScriptthrow
deyimini dize değeriyle (örneğin: throw 'message'
) önlemek en iyi yöntemdir. throw
Bunun yerine bir JavaScript Error
(ör. : throw Error('message')
).
Önceki kilitlenme hakkında daha fazla bilgi edinin
App Center Kilitlenmeleri, uygulamanızın kilitlenmesi durumunda size daha fazla bilgi veren iki API'ye sahiptir.
Uygulama önceki oturumda yetersiz bellek uyarısı mı almış?
SDK'yı başlattıktan sonra, uygulamanın önceki oturumda bellek uyarısı aldığını kontrol edebilirsiniz:
const hadLowMemoryWarning = await Crashes.hasReceivedMemoryWarningInLastSession();
Not
Bazı durumlarda, belleği düşük olan bir cihaz olay göndermeyebilir.
Uygulama önceki oturumda kilitleniyor mu?
SDK'yı başlattıktan sonra uygulamanın önceki başlatmada kilitlenip kilitlenmediğini kontrol edebilirsiniz:
const didCrash = await Crashes.hasCrashedInLastSession();
Bu, kilitlenme gerçekleştikten sonra uygulamanızın davranışını veya kullanıcı arabirimini ayarlamak istemeniz durumunda kullanışlıdır. Bazı geliştiriciler, kullanıcılarından özür dilemek için ek kullanıcı arabirimi göstermeyi veya kilitlenme gerçekleştikten sonra iletişim kurmanın bir yolunu seçmeyi tercih etti.
Son kilitlenmeyle ilgili ayrıntılar
Uygulamanız daha önce kilitlendiyse son kilitlenmeyle ilgili ayrıntıları alabilirsiniz.
const crashReport = await Crashes.lastSessionCrashReport();
App Center Kilitlenmeleri kullanımınızı özelleştirme
App Center Kilitlenmeleri, geliştiricilerin App Center'a kilitlenme günlükleri göndermeden önce ve gönderirken ek eylemler gerçekleştirmesi için geri çağırmalar sağlar.
JavaScript'te kilitlenmeleri işleme
Yöntemlerinizin Crash.setListener
beklendiği gibi çalışması için uygulamanızın düzgün yapılandırılıp yapılandırılmamış olduğunu denetlemeniz gerekir.
- Projenin
ios/YourAppName/AppDelegate.m
dosyasını açın ve yerine[AppCenterReactNativeCrashes registerWithAutomaticProcessing];
sahip[AppCenterReactNativeCrashes register];
olduğunuzu doğrulayın. - Projenin
android/app/src/main/res/values/strings.xml
dosyasını açın ve olarak ayarlandığınıappCenterCrashes_whenToSendCrashes
ASK_JAVASCRIPT
doğrulayın.
Olay dinleyicisinin tüm farklı geri çağırmaları bu belgede tek tek ele alınıyor, ancak tüm geri çağırmaları aynı anda tanımlayan bir olay dinleyicisi ayarlamanız gerekiyor.
Kilitlenme işlenmeli mi?
Belirli bir kilitlenmenin işlenmesi gerekip gerekmediğine karar vermek istiyorsanız bu geri aramayı uygulayın. Örneğin, yoksaymak istediğiniz ve App Center'a göndermek istemediğiniz bir sistem düzeyinde kilitlenme olabilir.
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.
});
Not
Bu özelliği kullanmak için uygulamanızı Kilitlenme hizmeti için düzgün bir şekilde yapılandırmanız gerekir.
Bu özellik JavaScript'te kilitlenmeleri işlemeye bağlıdır.
Kilitlenme günlüğü göndermek için kullanıcının onayını isteyin
Kullanıcı gizliliği sizin için önemliyse, App Center'a kilitlenme raporu göndermeden önce kullanıcı onayı almanız gerekir. SDK, App Center Kilitlenmeleri'ne kilitlenme raporlarını göndermeden önce kullanıcı onayını beklemesini bildiren bir geri arama sunar.
Bunu yapmayı seçerseniz, kullanıcının onayını almak sizin sorumluluğundadır; örneğin, aşağıdaki seçeneklerden birini içeren bir iletişim kutusu istemi aracılığıyla: Her Zaman Gönder, Gönder ve Gönderme. Girişe bağlı olarak, App Center Kilitlenmesi'ne ne yapması gerektiğini söyleyeceksiniz ve kilitlenme buna göre işlenir.
Not
SDK bunun için bir iletişim kutusu görüntülemez, uygulamanın kullanıcı onayı istemek için kendi kullanıcı arabirimini sağlaması gerekir.
Aşağıdaki geri arama, SDK'ya kilitlenmeleri göndermeden önce kullanıcı onayını beklemesini nasıl söyleyeceğinizi gösterir:
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.
});
döndürürseniz true
uygulamanızın kullanıcının iznini alması (kendi kodunuzu kullanarak) ve SDK'yı aşağıdaki API'yi kullanarak sonuçla güncelleştirmesi gerekir:
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);
Not
Bu özelliği kullanmak için uygulamanızı Kilitlenme hizmeti için düzgün bir şekilde yapılandırın. Bu özellik JavaScript'te kilitlenmeleri işlemeye bağlıdır.
Kilitlenme günlüğünün gönderme durumu hakkında bilgi alma
Bazen uygulamanızın kilitlenme durumunu bilmek istersiniz. Sık karşılaşılan bir kullanım örneği, kullanıcılara uygulamanızın kilitlenme raporu gönderdiğini bildiren kullanıcı arabirimini göstermek veya uygulamanızın başlatma sonrasında hızla kilitlenmesi durumunda kilitlenme günlüklerinin gönderildiğinden emin olmak için uygulamanın davranışını ayarlamak istemenizdir. App Center Kilitlenmeleri, neler olduğunu öğrenmek için uygulamanızda kullanabileceğiniz üç farklı geri çağırmaya sahiptir.
Bunu yapmak için, aşağıdaki örnekte gösterildiği gibi kodunuzda bir olay dinleyicisi tanımlayın:
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.
});
Tüm geri çağırmalar isteğe bağlıdır. Olay dinleyicisi nesnesindeki 3 yöntemin tümünü sağlamanız gerekmez, örneğin yalnızca onBeforeSending
uygulayabilirsiniz.
Not
Bu özelliği kullanmak için uygulamanızı Kilitlenme hizmeti için düzgün bir şekilde yapılandırmanız gerekir.
Bu özellik JavaScript'te kilitlenmeleri işlemeye bağlıdır.
Not
Birden çok kez çağrılırsa Crashes.setListener
, sonuncusu kazanır; daha önce tarafından Crashes.setListener
ayarlanan dinleyicileri geçersiz kılar.
Alma onSendingFailed
, 4xx kodu gibi kurtarılamaz bir hata oluştuğu anlamına gelir. Örneğin, 401 yanlış olduğu anlamına gelir appSecret
.
Bu geri arama bir ağ sorunuysa tetiklenmemiştir. Bu durumda SDK yeniden denemeye devam eder (ve ağ bağlantısı kapalıyken yeniden denemeleri duraklatır). Uç noktada ağ sorunları veya kesinti olması ve uygulamayı yeniden başlatmanız durumunda işlem onBeforeSending
yeniden başlatıldıktan sonra yeniden tetikleniyor.
Kilitlenme raporuna ek ekleme
Kilitlenme raporuna ikili ve metin ekleri ekleyebilirsiniz. SDK bunları kilitlenmeyle birlikte gönderir, böylece bunları App Center portalında görebilirsiniz. Önceki uygulama başlatmalarından depolanan kilitlenme gönderilmeden hemen önce aşağıdaki geri arama çağrılır. Kilitlenme gerçekleştiğinde çağrılmayacak. Minidump dosyaları için ayrılmış bir ad olduğundan ek dosyasının adlandırılmadığındanminidump.dmp
emin olun. Aşağıda kilitlenmeye metin ve resim ekleme örneği verilmiştir:
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.
});
fileName
parametresi isteğe bağlıdır (olabilirnull
) ve yalnızca App Center portalında kullanılır. Portaldaki belirli bir kilitlenme örneğinden ekleri görebilir ve indirebilirsiniz. Bir dosya adı belirttiyseniz, bu indirilecek dosya adı olur, aksi takdirde dosya adı sizin için oluşturulur.
Geri çağırmayı getErrorAttachments
ES2017 zaman uyumsuz/await işlevleriyle çalışacak şekilde ayarlamak için bunun yerine yerine getirilmiş bir Promise döndürebilirsiniz. Aşağıdaki örnek, zaman uyumsuz bir şekilde kilitlenmeye bir metin ve görüntü ekler:
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.
});
Not
Bu özelliği kullanmak için uygulamanızı Kilitlenme hizmeti için düzgün bir şekilde yapılandırmanız gerekir.
Bu özellik JavaScript'te kilitlenmeleri işlemeye bağlıdır.
Not
Boyut sınırı şu anda Android'de 1,4 MB ve iOS'ta 7 MB'tır. Daha büyük bir ek göndermeye çalışmak bir hatayı tetikler.
İşlenen Hatalar
App Center ayrıca yöntem aracılığıyla trackError
işlenen özel durumları kullanarak hataları izlemenize de olanak tanır. Uygulama isteğe bağlı olarak, daha fazla bağlam sağlamak için işlenen bir hata raporuna özellikler veya/ve ekler ekleyebilir.
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);
}
Kesme Çubuğu
App Center, React Native uygulamalarda Android NDK'den kesme çubuğu kilitlenmelerini destekler.
Yukarıdaki normal kurulum adımlarını izleyin ve geçersiz kılmanızda MainActivity.java
OnCreate
minidump yapılandırmasını ekleyin ve Breakpad yapılandırmanızı ayarlayan yerel kodunuza çağrı yapın.
Örnek:
@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);
}
}
});
}
Çalışma zamanında App Center Kilitlenmelerini etkinleştirme veya devre dışı bırakma
Çalışma zamanında App Center Kilitlenmelerini etkinleştirebilir ve devre dışı bırakabilirsiniz. Devre dışı bırakırsanız SDK, uygulama için kilitlenme bildirimi yapmaz.
await Crashes.setEnabled(false);
App Center Kilitlenmelerini yeniden etkinleştirmek için aynı API'yi kullanın ancak parametre olarak geçirin true
.
await Crashes.setEnabled(true);
Durum, uygulama başlatmaları arasında cihazın depolama alanında kalıcı hale geldi.
App Center Kilitlenmelerinin etkinleştirilip etkinleştirilmediğini denetleyin
App Center Kilitlenmelerinin etkinleştirilip etkinleştirilmediğini de de de kontrol edebilirsiniz:
const enabled = await Crashes.isEnabled();