App Center Kilitlenmeleri (MAUI ve Xamarin)
Ö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ı uygulamalarda(App Store gönderilenler) çalışır. 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.
Ayrıca, iOS'ta kilitlenme günlükleri Sembolikleştirme gerektirir. Uygulamanız için sembollerin nasıl sağlandığını açıklayan App Center Tanılama belgelerine göz atın.
Not
iOS ve Mac'te hata ayıklayıcı eklediyseniz SDK herhangi bir kilitlenme günlüğünü kaydetmez. iOS ve macOS uygulamasını kilitlediğinizde hata ayıklayıcının bağlı olmadığından emin olun. Android'de hata ayıklayıcı takılıyken kilitlenebilir ancak işlenmeyen özel duruma girdikten sonra yürütmeye devam etmeniz gerekir.
App Center Kilitlenmeleri, SDK'nın kolay test edilmesi için bir test kilitlenmesi oluşturmanızı sağlayan bir API sağlar. Bu API, hata ayıklama ve sürüm yapılandırmalarını denetler. Bu nedenle, yalnızca hata ayıklarken kullanabilirsiniz çünkü sürüm uygulamalarında çalışmaz.
Crashes.GenerateTestCrash();
App Center Kilitlenmeleri, uygulamanızın kilitlenmesi durumunda size daha fazla bilgi sağlayan iki API'ye sahiptir.
SDK'yı başlattıktan sonra, uygulamanın önceki oturumda bir bellek uyarısı aldığından istediğiniz zaman kontrol edebilirsiniz:
bool hadMemoryWarning = await Crashes.HasReceivedMemoryWarningInLastSessionAsync();
Not
Bu yöntem yalnızca başlatıldıktan sonra Crashes
kullanılmalıdır; her zaman başlamadan önce döndürülecektir false
.
Not
Bazı durumlarda, belleği düşük olan bir cihaz olayları gönderemez.
SDK'yı başlattıktan sonra, uygulamanın önceki başlatmada kilitlenip kilitlenmediğini kontrol edebilirsiniz:
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync();
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 bir kilitlenme oluştuktan sonra iletişim kurmanın bir yolunu tercih eder.
Not
Bu yöntem yalnızca başlatıldıktan sonra Crashes
kullanılmalıdır; her zaman başlamadan önce döndürülecektir false
.
Uygulamanız daha önce kilitlendiyse son kilitlenmeyle ilgili ayrıntıları alabilirsiniz.
ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();
Not
Bu yöntem yalnızca başlatıldıktan sonra Crashes
kullanılmalıdır; her zaman başlamadan önce döndürülecektir null
.
Bu API için çok sayıda kullanım örneği vardır; en yaygın olanı bu API'yi çağıran ve özel Kilitlenme temsilcisini veya dinleyicisini uygulayan kişilerdir.
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.
Not
App Center başlatmadan hemen sonra kilitlenmeleri işlemeye başladığından, çağrısındanAppCenter.Start()
önce geri aramayı ayarlayın.
Belirli bir kilitlenmenin işlenmesi gerekip gerekmediğine karar vermek istiyorsanız bu geri aramayı ayarlayın. Örneğin, yoksaymak istediğiniz ve App Center'a göndermek istemediğiniz bir sistem düzeyinde kilitlenme olabilir.
Crashes.ShouldProcessErrorReport = (ErrorReport report) =>
{
// Check the report in here and return true or false depending on the ErrorReport.
return true;
};
Kullanıcı gizliliği sizin için önemliyse, App Center'a kilitlenme raporu göndermeden önce kullanıcı onayı almak isteyebilirsiniz. SDK, App Center Kilitlenmeleri'ne herhangi bir kilitlenme raporu göndermeden önce kullanıcı onayını beklemesini bildiren bir geri çağırma 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 Crashes'e 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.
Not
Uygulama bir kullanıcı onayı iletişim kutusu uygulamazsa açıkça çağrı NotifyUserConfirmation
yapmamalıdır; Kilitlenmeler modülü sizin için günlükleri örtük olarak gönderir.
Aşağıdaki geri arama, SDK'ya kilitlenmeleri göndermeden önce kullanıcı onayını beklemesini nasıl söyleyeceğinizi gösterir:
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;
};
Yukarıdaki geri çağırmada dönmeniz true
durumunda uygulamanızın (kendi kodunuzu kullanarak) kullanıcı izni alması ve aşağıdaki API'yi kullanarak sonucu SDK'ya göndermesi gerekir.
// 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);
Örnek olarak özel iletişim kutusu örneğimize başvurabilirsiniz.
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 işleminden sonra 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ğu hakkında bildirim almak için uygulamanızda kullanabileceğiniz üç farklı geri çağırma sağlar:
Crashes.SendingErrorReport += (sender, e) =>
{
// Your code, e.g. to present a custom UI.
};
Uç noktada ağ sorunları veya kesinti olması ve uygulamayı yeniden başlatmanız durumunda işlem SendingErrorReport
yeniden başlatıldıktan sonra yeniden tetikleniyor.
Crashes.SentErrorReport += (sender, e) =>
{
// Your code, e.g. to hide the custom UI.
};
Crashes.FailedToSendErrorReport += (sender, e) =>
{
// Your code goes here.
};
Alma FailedToSendErrorReport
, 4xx kodu gibi kurtarılamaz bir hata oluştuğu anlamına gelir. Örneğin, 401 yanlış anlamına gelir appSecret
.
Bu geri arama bir ağ sorunuysa tetiklenmemiştir. Bu durumda SDK yeniden denemeye devam eder (ve ağ bağlantısı kapatılırken yeniden denemeleri duraklatır).
Kilitlenme raporuna ikili ve metin ekleri ekleyebilirsiniz. SDK, bunları App Center portalında görebilmeniz için kilitlenmeyle birlikte gönderir. Ö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. Burada, kilitlenmeye metin ve görüntü ekleme örneği verilmiştir:
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")
};
};
Not
Boyut sınırı şu anda 7 MB'tır. Daha büyük bir ek göndermeye çalışmak bir hatayı tetikler.
App Center Kilitlenmelerini çalışma zamanında etkinleştirebilir ve devre dışı bırakabilirsiniz. Devre dışı bırakırsanız SDK, uygulama için kilitlenme bildirimi yapmaz.
Crashes.SetEnabledAsync(false);
App Center Kilitlenmelerini yeniden etkinleştirmek için aynı API'yi kullanın ancak parametre olarak geçirin true
.
Crashes.SetEnabledAsync(true);
Diğer API çağrılarının (örneğin IsEnabledAsync
) tutarlı olması için bu çağrıyı beklemeniz gerekmez.
Durum, uygulama başlatmaları arasında cihazın depolama alanında kalıcı hale getirilir.
Not
Bu yöntem yalnızca başlatıldıktan sonra Crashes
kullanılmalıdır.
App Center Kilitlenmelerinin etkinleştirilip etkinleştirilmediğini de de de kontrol edebilirsiniz:
bool isEnabled = await Crashes.IsEnabledAsync();
Not
Bu yöntem yalnızca başlatıldıktan sonra Crashes
kullanılmalıdır, her zaman başlamadan önce döndürülecektir false
.
App Center, işlenen özel durumları kullanarak hataları izlemenize de olanak tanır. Bunu yapmak için yöntemini kullanın TrackError
:
try {
// your code goes here.
} catch (Exception exception) {
Crashes.TrackError(exception);
}
Bir uygulama isteğe bağlı olarak daha fazla bağlam sağlamak için işlenen bir hata raporuna özellikler ekleyebilir. Özellikleri, aşağıdaki örnekte gösterildiği gibi anahtar/değer çiftlerinin (yalnızca dizeler) sözlüğü olarak geçirin.
try {
// your code goes here.
} catch (Exception exception) {
var properties = new Dictionary<string, string>
{
{ "Category", "Music" },
{ "Wifi", "On"}
};
Crashes.TrackError(exception, properties);
}
İsterseniz işlenen hata raporuna ikili ve metin ekleri de ekleyebilirsiniz. Aşağıdaki örnekte gösterildiği gibi ekleri bir nesne dizisi ErrorAttachmentLog
olarak geçirin.
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);
}