Bu sayfa, sorun giderme yardımı ve Crashlytics'i kullanma hakkında sık sorulan soruların yanıtlarını sağlar. Aradığınızı bulamıyorsanız veya ek yardıma ihtiyacınız varsa Firebase desteğiyle iletişime geçin.
Genel sorun giderme/SSS
Kilitlenme sorunu yaşamayan kullanıcıları, içerik haritası günlüklerini ve/veya hız uyarılarını görmüyorsanız, Google Analytics için uygulamanızın yapılandırmasını kontrol etmenizi öneririz.
Firebase projenizde Google Analytics'i etkinleştirdiğinizden emin olun.
Firebase konsolunun Entegrasyonlar > Google Analytics sayfasında Google Analytics için Veri paylaşımının etkinleştirildiğinden emin olun. Veri paylaşımı ayarlarının Firebase konsolunda görüntülendiğini ancak Google Analytics konsolunda yönetildiğini unutmayın.
Firebase Crashlytics SDK'ya ek olarak, Google Analytics için Firebase SDK'yı uygulamanıza eklediğinizden emin olun ( iOS+ | Android ).
Tüm Firebase SDK'larınız ( iOS+ | Android ) için en son sürümleri kullandığınızdan emin olun.
Özellikle Google Analytics için Firebase SDK'nın aşağıdaki sürümlerini kullandığınızdan emin olun: iOS+ — v6.3.1+ (macOS ve tvOS için v8.9.0+) | Android — v17.2.3+(BoM v24.7.1+) .
Firebase konsolundaki Sorunlar tablonuzda listelenen sorunlar için iki farklı biçim fark edebilirsiniz. İşte nedeni!
Crashlytics, uygulamanızdaki tüm olayları (çökmeler, ölümcül olmayan olaylar ve ANR'ler) analiz eder ve benzer olayları ayrı sorunlarda gruplandırır. Ocak 2023'te, olayları uygulamanızın koduna göre gruplamak için geliştirilmiş bir analiz motorunu ve yeni sorunları görüntülemek için güncellenmiş bir tasarımı kullanıma sunduk.
İşte bu iyileştirmelerle deneyimleyeceğiniz şeyler:
Sorun satırında görüntülenen yenilenmiş meta veriler
Uygulamanızdaki sorunları anlamak ve önceliklendirmek artık daha kolay.Daha az yinelenen sorun
Satır numarası değişikliği yeni bir sayıya yol açmaz.Daha anlamlı uyarılar ve sinyaller
Yeni bir sorun aslında yeni bir hatayı temsil eder.Daha güçlü arama
Her sorun, istisna türü ve paket adı gibi daha fazla aranabilir meta veri içerir.
Bu iyileştirmelerin nasıl kullanıma sunulduğu aşağıda açıklanmıştır:
Uygulamanızdan yeni etkinlikler aldığımızda, bunların mevcut bir sorunla eşleşip eşleşmediğini kontrol edeceğiz.
Eşleşme yoksa, daha akıllı olay gruplama algoritmamızı olaya otomatik olarak uygulayacağız ve yenilenen meta veri tasarımıyla yeni bir sorun oluşturacağız.
Bu, etkinlik gruplandırmamızda yaptığımız ilk büyük güncelleme. Geri bildiriminiz varsa veya herhangi bir sorunla karşılaşırsanız, lütfen bir şikayette bulunarak bize bildirin.
Crashlytics, Android 11 ve üstünü çalıştıran cihazlardan Android uygulamaları için ANR raporlamasını destekler. ANR'leri ( getHistoricalProcessExitReasons ) toplamak için kullandığımız temel API, SIGQUIT veya bekçi köpeği tabanlı yaklaşımlardan daha güvenilirdir. Bu API yalnızca Android 11+ cihazlarda kullanılabilir.
Google Play ile Crashlytics arasındaki ANR sayısı arasında bir uyumsuzluk olabilir. Bunun, ANR verilerini toplama ve raporlama mekanizmasındaki farklılık nedeniyle olması beklenmektedir. Crashlytics, uygulama bir sonraki başlatıldığında ANR'leri bildirirken Android Vitals, ANR verilerini ANR gerçekleştikten sonra gönderir.
Ayrıca Crashlytics, Google Play hizmetleri ve veri toplama onayı kabul edilen cihazlardan gelen ANR'leri görüntüleyen Google Play'e kıyasla, yalnızca Android 11+ çalıştıran cihazlarda oluşan ANR'leri görüntüler.
LLVM ve GNU araç zincirleri, uygulamanızın ikili dosyalarının salt okunur bölümü için farklı varsayılanlara ve işlemlere sahiptir; bu, Firebase konsolunda tutarsız yığın izleri oluşturabilir. Bunu hafifletmek için, oluşturma işleminize aşağıdaki bağlayıcı bayraklarını ekleyin:
LLVM araç zincirinden
lld
linker kullanıyorsanız şunu ekleyin:-Wl,--no-rosegment
GNU araç zincirinden
ld.gold
linker kullanıyorsanız şunu ekleyin:-Wl,--rosegment
Hâlâ yığın izleme tutarsızlıkları görüyorsanız (veya araç zincirinizle ilgili bayraklardan hiçbiri uygun değilse), bunun yerine oluşturma işleminize aşağıdakini eklemeyi deneyin:
-fno-omit-frame-pointer
Crashlytics eklentisi, özelleştirilmiş bir Breakpad simge dosyası oluşturucuyu bir araya getirir. Breakpad sembol dosyaları oluşturmak için kendi ikili dosyanızı kullanmayı tercih ederseniz (örneğin, derleme zincirinizdeki tüm yerel yürütülebilir dosyaları kaynaktan oluşturmayı tercih ederseniz), yürütülebilir dosyanın yolunu belirtmek için isteğe bağlı symbolGeneratorBinary
extension özelliğini kullanın.
Breakpad simge dosyası oluşturucu ikili dosyasının yolunu iki yoldan biriyle belirleyebilirsiniz:
Seçenek 1 : Yolu,
build.gradle
dosyanızdakifirebaseCrashlytics
uzantısı aracılığıyla belirtinAşağıdakileri uygulama düzeyindeki
build.gradle
dosyanıza ekleyin:android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
Seçenek 2 : Gradle özellikler dosyanızdaki bir özellik satırı aracılığıyla yolu belirtin
Yürütülebilir dosyanın yolunu belirtmek için
com.google.firebase.crashlytics.symbolGeneratorBinary
özelliğini kullanabilirsiniz.Gradle özellikler dosyanızı manuel olarak güncelleyebilir veya dosyayı komut satırı aracılığıyla güncelleyebilirsiniz. Örneğin, yolu komut satırı aracılığıyla belirtmek için aşağıdakine benzer bir komut kullanın:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.symbolGeneratorBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Aşağıdaki istisnayı görürseniz, muhtemelen Firebase Crashlytics SDK ile uyumlu olmayan bir DexGuard sürümü kullanıyorsunuzdur:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
Bu istisna, uygulamanızı çökertmez ancak kilitlenme raporları göndermesini engeller. Bunu düzeltmek için:
En son DexGuard 8.x sürümünü kullandığınızdan emin olun. En son sürüm, Firebase Crashlytics SDK'sının gerektirdiği kuralları içerir.
DexGuard sürümünüzü değiştirmek istemiyorsanız, gizleme kurallarınıza (DexGuard yapılandırma dosyanızda) aşağıdaki satırı eklemeyi deneyin:
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Bir uygulama, dosya uzantısını göstermeyen bir karartıcı kullandığında, Crashlytics her sorunu varsayılan olarak bir .java
dosya uzantısıyla oluşturur.
Crashlytics'in doğru dosya uzantısıyla ilgili sorunlar oluşturabilmesi için uygulamanızın aşağıdaki kurulumu kullandığından emin olun:
- Android Gradle 4.2.0 veya üstünü kullanır
- Gizleme açıkken R8'i kullanır. Uygulamanızı R8'e güncellemek için bu belgeleri izleyin.
Yukarıda açıklanan kuruluma güncelleme yaptıktan sonra, mevcut .java
sorunlarının kopyası olan yeni .kt
sorunları görmeye başlayabileceğinizi unutmayın. Bu durum hakkında daha fazla bilgi edinmek için SSS bölümüne bakın.
2021 Aralık ayının ortasından itibaren Crashlytics, Kotlin kullanan uygulamalar için desteği iyileştirdi.
Yakın zamana kadar, mevcut karartıcılar dosya uzantısını açığa çıkarmadı, bu nedenle Crashlytics her sorunu varsayılan olarak bir .java
dosya uzantısıyla oluşturdu. Ancak, Android Gradle 4.2.0'dan itibaren, R8 dosya uzantılarını desteklemektedir.
Bu güncellemeyle, Crashlytics artık uygulamada kullanılan her sınıfın Kotlin'de yazılıp yazılmadığını belirleyebiliyor ve sorun imzasına doğru dosya adını dahil edebiliyor. Uygulamanız aşağıdaki kuruluma sahipse kilitlenmeler artık doğru bir şekilde .kt
dosyalarıyla (uygun olduğu şekilde) ilişkilendiriliyor:
- Uygulamanız Android Gradle 4.2.0 veya üstünü kullanıyor.
- Uygulamanız, gizleme açıkken R8 kullanıyor.
Yeni kilitlenmeler artık sorun imzalarında doğru dosya uzantısını içerdiğinden, aslında yalnızca mevcut .java
etiketli sorunların kopyaları olan yeni .kt
sorunları görebilirsiniz. Firebase konsolunda, yeni bir .kt
sorununun mevcut bir .java
etiketli sorunun olası bir kopyası olup olmadığını belirlemeye ve size bildirmeye çalışırız.
Kilitlenme sorunu olmayan değer, uygulamanızla etkileşimde bulunan ancak belirli bir süre boyunca kilitlenme yaşamamış kullanıcıların yüzdesini temsil eder.
İşte kilitlenme olmayan kullanıcı yüzdesini hesaplamak için formül. Girdi değerleri Google Analytics tarafından sağlanır.
CRASH_FREE_USERS_PERCENTAGE = 1 - ( CRASHED_USERS / ALL_USERS ) x 100
Bir kilitlenme meydana geldiğinde, Google Analytics bir
app_exception
olay türü gönderir ve CRASHED_USERS , bu olay türüyle ilişkili kullanıcı sayısını temsil eder.ALL_USERS Crashlytics panosunun sağ üst kısmındaki açılır menüden seçtiğiniz süre boyunca uygulamanızla etkileşim kuran toplam kullanıcı sayısını temsil eder.
Kilitlenme sorunu yaşamayan kullanıcı yüzdesi, ortalama değil, zaman içindeki bir toplamadır .
Örneğin, uygulamanızın üç kullanıcısı olduğunu hayal edin; onlara A Kullanıcısı, B Kullanıcısı ve C Kullanıcısı adını vereceğiz. Aşağıdaki tablo, her gün hangi kullanıcıların uygulamanızla etkileşim kurduğunu ve bu kullanıcılardan hangilerinin o gün kilitlenme yaşadığını gösterir:
Pazartesi | Salı | Çarşamba | |
---|---|---|---|
Uygulamanızla etkileşim kuran kullanıcılar | A, B, C | A, B, C | A, B |
Kilitlenme yaşayan kullanıcı | C | B | A |
Çarşamba günü, kilitlenme olmayan kullanıcı yüzdeniz %50'dir (2 kullanıcıdan 1'i kilitlenme yaşamamıştır).
Kullanıcılarınızdan ikisi Çarşamba günü uygulamanızla etkileşimde bulundu, ancak yalnızca birinde (B Kullanıcısı) kilitlenme olmadı.Son 2 gün içinde kilitlenme sorunu olmayan kullanıcı yüzdeniz %33,3'tür (3 kullanıcıdan 1'i kilitlenme sorunu yaşamamıştır).
Son iki gün içinde kullanıcılarınızdan üçü uygulamanızla etkileşimde bulundu, ancak bunlardan yalnızca biri (C Kullanıcısı) kilitlenme yaşamadı.Son 3 gün içinde kilitlenme olmayan kullanıcı yüzdeniz %0'dır (3 kullanıcıdan 0'ı kilitlenme yaşamamıştır).
Kullanıcılarınızdan üçü son üç gün içinde uygulamanızla etkileşimde bulundu, ancak hiçbirinde kilitlenme olmadı.
Notlar, proje üyelerinin sorular, durum güncellemeleri vb. ile belirli sorunlar hakkında yorum yapmasına olanak tanır.
Bir proje üyesi bir not yayınladığında, not, kendi Google hesabının e-posta adresiyle etiketlenir. Bu e-posta adresi, notla birlikte notu görüntüleme erişimi olan tüm proje üyeleri tarafından görülebilir.
Aşağıda, notları görüntülemek, yazmak ve silmek için gereken erişim açıklanmaktadır:
Aşağıdaki rollerden herhangi birine sahip proje üyeleri, mevcut notları görüntüleyip silebilir ve bir sorun hakkında yeni notlar yazabilir.
Aşağıdaki rollerden herhangi birine sahip olan proje üyeleri, bir sorunla ilgili yayınlanan notları görüntüleyebilir, ancak silemez veya not yazamazlar.
Entegrasyonlar
Projeniz Google Mobile Ads SDK'sının yanı sıra Crashlytics kullanıyorsa, büyük olasılıkla kilitlenme raporlayıcıları, istisna işleyicileri kaydederken müdahale ediyordur. Sorunu düzeltmek için, disableSDKCrashReporting
çağırarak Mobile Ads SDK'sında kilitlenme raporlamasını kapatın.
Crashlytics'i BigQuery'ye bağladıktan sonra, Firebase projenizin konumundan bağımsız olarak, oluşturduğunuz yeni veri kümeleri otomatik olarak Amerika Birleşik Devletleri'nde bulunur.
platform desteği
Firebase Crashlytics NDK, ARMv5'i (armeabi) desteklemez. Bu ABI için destek, NDK r17'den itibaren kaldırılmıştır.
Gerileyen sorunlar
Daha önce sorunu kapattığınız bir sorunda gerileme oldu, ancak Crashlytics, sorunun yeniden oluştuğuna dair yeni bir rapor alıyor. Crashlytics, uygulamanız için uygun şekilde ele alabilmeniz için geri çekilen bu sorunları otomatik olarak yeniden açar.
Crashlytics'in bir sorunu nasıl gerileme olarak kategorize ettiğini açıklayan bir örnek senaryoyu burada bulabilirsiniz:
- Crashlytics ilk kez, Crash "A" hakkında bir kilitlenme raporu alıyor. Crashlytics, söz konusu kilitlenme için ilgili bir sorun açar ("A" Sorunu).
- Bu hatayı hızlı bir şekilde düzeltin, "A" Sorununu kapatın ve ardından uygulamanızın yeni bir sürümünü yayınlayın.
- Crashlytics, siz sorunu kapattıktan sonra "A" Sorunu hakkında başka bir rapor alır.
- Rapor, sorunu kapattığınızda Crashlytics'in bildiği bir uygulama sürümünden geliyorsa (yani, sürüm herhangi bir kilitlenme için bir kilitlenme raporu göndermişse), Crashlytics sorunu gerilemiş olarak kabul etmez. Konu kapalı kalacaktır.
- Rapor, sorunu kapattığınızda Crashlytics'in bilmediği bir uygulama sürümünden geliyorsa (bu, sürümün herhangi bir kilitlenme için hiçbir kilitlenme raporu göndermediği anlamına gelir), Crashlytics sorunun gerilediğini kabul eder ve sorunu yeniden açar .
Bir sorun gerilediğinde, bir gerileme tespit uyarısı göndeririz ve Crashlytics'in sorunu yeniden açtığını size bildirmek için soruna bir gerileme sinyali ekleriz. Regresyon algoritmamız nedeniyle bir sorunun yeniden açılmasını istemiyorsanız, sorunu kapatmak yerine "susturun".
Bir rapor, sorunu kapattığınızda hiç kilitlenme raporu göndermemiş eski bir uygulama sürümünden geliyorsa, Crashlytics sorunun gerilediğini kabul eder ve sorunu yeniden açar.
Bu durum şu durumda olabilir: Bir hatayı düzelttiniz ve uygulamanızın yeni bir sürümünü yayınladınız, ancak hala eski sürümlerde hata düzeltmesi olmayan kullanıcılarınız var. Şans eseri, siz sorunu kapattığınızda bu eski sürümlerden biri hiç kilitlenme raporu göndermemişse ve bu kullanıcılar hatayla karşılaşmaya başlarsa, bu kilitlenme raporları geri çekilmiş bir sorunu tetikler.
Regresyon algoritmamız nedeniyle bir sorunun yeniden açılmasını istemiyorsanız, sorunu kapatmak yerine "susturun".