Crashlytics ve (isteğe bağlı olarak) Firebase oturum verilerinizi BigQuery'ye aktardıktan sonra verilerle çalışmaya başlayabilirsiniz:
SQL sorgularını kullanarak verileri analiz etme
Özel raporlar ve özetler oluşturmak için Crashlytics verilerinizde sorgu çalıştırabilirsiniz. Bu tür özel raporlar, Firebase konsolunun Crashlytics kontrol panelinde kullanılamadığından kilitlenme verilerinin analizini ve anlaşılmasını destekleyebilir. Bu sayfanın ilerleyen bölümlerinde yer alan örnek sorgular koleksiyonuna bakın.Farklı veri kümelerindeki verileri birleştirme
Örneğin, veri dışa aktarma işlemini ayarlarken Firebase oturum verilerini dışa aktarmayı seçerseniz Crashlytics kilitlenme içermeyen kullanıcılar ve kilitlenme içermeyen oturumlar hakkında daha iyi bilgi edinebilirsiniz (örnek sorguya bakın). Ayrıca, çeşitli Firebase ürünlerinden (ör. Performance Monitoring) veya Google Analytics'den veri dışa aktarabilir, ardından bu verileri BigQuery'de Crashlytics verilerinizle birleştirip analiz edebilirsiniz.Görünüm oluşturma
BigQuery kullanıcı arayüzünü kullanarak SQL sorgusuyla tanımlanan sanal bir tablo olan görünüm oluşturabilirsiniz. Farklı görünüm türleri ve bunların nasıl oluşturulacağı hakkında ayrıntılı talimatlar için BigQuery dokümanlarına bakın.
Veri kümesi şeması hakkında ayrıntılı bilgi için BigQuery'da dışa aktarılan verilerin veri kümesi şeması başlıklı makaleyi inceleyin.
BigQuery SQL hakkında bilgi
Etkileşimli sorgu işleri, toplu sorgu işleri ve sürekli sorgu işleri dahil olmak üzere çalıştırabileceğiniz sorgu türleri hakkında bilgi edinin.
BigQuery'te desteklenen ifadeler ve SQL lehçeleri hakkında bilgi edinin.
Yapay zeka destekli yardımı kullanarak sorgu yazmayı (Gemini) öğrenin.
Crashlytics verileri için örnek sorgular
Bu bölümde, dışa aktarılan BigQuery verileriniz ve Firebase oturum verilerinizle Crashlytics SQL'i nasıl kullanabileceğinizi gösteren bazı örnek durumlar ve örnek sorgular verilmektedir.
- Firebase oturum verilerini kullanarak kilitlenme sorunu ile karşılaşmayan kullanıcılar ve oturumlarla ilgili metrikleri hesaplama
- Güne göre kilitlenme sayısı
- En yaygın kilitlenmeleri bulma
- En çok kilitlenen 10 cihaz
- Özel anahtara göre filtreleme
- Kullanıcı kimliklerini ayıklama
- Belirli bir kilitlenme sorunuyla karşılaşan tüm kullanıcıları bulma
- Kilitlenme sorunundan etkilenen kullanıcı sayısı (ülkeye göre döküm)
- Bugüne kadar karşılaşılan en önemli 5 sorun
- Bugün dahil olmak üzere, DATE tarihinden bu yana en çok karşılaşılan 5 sorun
1. örnek: Firebase oturum verilerini kullanarak kilitlenme sorunu ile karşılaşmayan kullanıcılarla ilgili metrikleri hesaplama
En son sürümünüzde, kritik bir kullanıcı yolculuğundaki kilitlenmeleri gidermek için uygulamanızda büyük bir yenileme yaptınız. Kullanıcılardan mükemmel yorumlar aldınız ancak uygulamanızın eskisinden daha kararlı olduğuna dair nicel kanıtlar istiyorsunuz.
Bu bilgileri kilitlenme içermeyen metrikler aracılığıyla edinebilirsiniz. Bu metrikler, uygulamanızın genel durumunu anlamanıza yardımcı olan önemli ölçümlerdir. Firebase oturum verileri ve Crashlytics etkinlikleriyle bu metrikleri temel bir sorguyla hesaplayabilirsiniz.
Android uygulaması için örnek sorgular aşağıda verilmiştir. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
Belirli bir sürümde kilitlenme sorunu yaşamayan kullanıcılar:
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT installation_uuid) / COUNT (DISTINCT instance_id))) AS CFU FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND crashlytics.application.display_version="APP_VERSION" AND sessions.application.display_version = "APP_VERSION" GROUP BY event_date ORDER BY event_date
Geçen hafta (son 168 saat) boyunca kilitlenme sorunu yaşanmayan oturum sayısı:
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT crashlytics.firebase_session_id) / COUNT (DISTINCT sessions.session_id))) AS CFS FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND _PARTITIONTIME < CURRENT_TIMESTAMP() GROUP BY event_date ORDER BY event_date
2. örnek: Günlük kilitlenme sayısı
Mümkün olduğunca çok sayıda hatayı düzeltmek için çalıştıktan sonra ekibinizin nihayet yeni fotoğraf paylaşım uygulamanızı başlatmaya hazır olduğunu düşünüyorsunuz. Ancak bunu yapmadan önce, hata avınızın uygulamayı zaman içinde daha kararlı hale getirdiğinden emin olmak için son bir ayda günlük kilitlenme sayısını kontrol etmek istiyorsunuz.
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
3. örnek: En yaygın kilitlenmeleri bulma
Üretim planlarına doğru şekilde öncelik vermek için uygulamanızdaki en yaygın 10 kilitlenmeyi bulmak istiyorsunuz. İlgili veri noktalarını sağlayan bir sorgu oluşturuyorsunuz.
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
4. örnek: En çok kilitlenen 10 cihaz
Sonbahar, yeni telefon sezonu! Şirketiniz, bu durumun özellikle Android'de yeni cihaza özgü sorunların yaşanabileceği bir dönem olduğunu da biliyor. Yaklaşan uyumluluk sorunlarını önlemek için geçen hafta (168 saat) en çok kilitlenen 10 cihazı belirleyen bir sorgu oluşturdunuz.
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
Örnek 5: Özel anahtara göre filtreleme
Oyununuzun hangi seviyesinde en çok kilitlenme yaşandığını öğrenmek isteyen bir oyun geliştiricisiniz.
Bu istatistiği izlemeye yardımcı olmak için Crashlytics anahtarı (iOS+ |
Android |
Flutter |
Unity
) ayarlarsınız. Bu anahtarın adı current_level olur ve kullanıcı yeni bir seviyeye ulaştığında güncellenir.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Dışa aktarma işleminizde bu anahtarı kullanarak BigQuery, her kilitlenme etkinliğiyle ilişkili current_level değerlerinin dağılımını bildirmek için bir sorgu yazabilirsiniz.
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
value
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
key = "current_level"
GROUP BY
key,
value
ORDER BY
num_of_crashes DESC6. örnek: Kullanıcı kimliklerini ayıklama
Erken erişim aşamasında olan bir Android uygulamanız var. Kullanıcılarınızın çoğu bu sürümü beğeniyor ancak üç kullanıcı, alışılmadık sayıda kilitlenme sorunu yaşıyor. Sorunun kaynağını bulmak için bu kullanıcıların kullanıcı kimliklerini kullanarak bu kullanıcılarla ilgili tüm kilitlenme etkinliklerini çeken bir sorgu yazarsınız.
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT *
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
user.id
7. örnek: Belirli bir kilitlenme sorunuyla karşılaşan tüm kullanıcıları bulma
Ekibiniz, önemli bir hatayı yanlışlıkla bir grup beta test kullanıcısına yayınladı. Ekibiniz, yukarıdaki "En yaygın kilitlenmeleri bulma" örneğindeki sorguyu kullanarak belirli kilitlenme sorunu kimliğini belirleyebildi. Şimdi ekibiniz, bu kilitlenmeden etkilenen uygulama kullanıcılarının listesini çıkarmak için bir sorgu çalıştırmak istiyor.
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT user.id as user_id
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
issue_id = "ISSUE_ID"
AND application.display_version = "APP_VERSION"
AND user.id != ""
ORDER BY
user.id;8. örnek: Kilitlenme sorunundan etkilenen kullanıcı sayısı (ülkeye göre ayrılmış)
Ekibiniz, yeni bir sürümün kullanıma sunulması sırasında kritik bir hata tespit etti. Yukarıdaki "En yaygın kilitlenmeleri bulma" örneğindeki sorguyu kullanarak belirli kilitlenme sorunu kimliğini belirleyebildiniz. Ekibiniz, bu kilitlenmenin dünyanın farklı ülkelerindeki kullanıcılara yayılıp yayılmadığını görmek istiyor.
Bu sorguyu yazmak için ekibinizin aşağıdakileri yapması gerekir:
Google Analytics verilerinin BigQuery'ye aktarılmasını etkinleştirin. Proje verilerini BigQuery'ye aktarma başlıklı makaleyi inceleyin.
Uygulamanızı, hem Google Analytics SDK'sına hem de Crashlytics SDK'sına kullanıcı kimliği iletecek şekilde güncelleyin.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");Google Analytics veri kümesindeki etkinlikleri Crashlytics veri kümesindeki kilitlenmelerle birleştirmek için kullanıcı kimliği alanını kullanan bir sorgu yazın.
Android uygulaması için örnek sorgu: iOS uygulaması için paket kimliğini ve
IOS(paket adı veANDROIDyerine) kullanın.SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
9. örnek: Bugün şu ana kadar karşılaşılan en büyük 5 sorun
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Örnek 10: Bugün dahil olmak üzere, TARİH'ten bu yana en büyük 5 sorun
Güvenilir toplu verilere gerçek zamanlı bilgiler eklemek için toplu ve gerçek zamanlı tabloları birleştirme sorgusuyla da birleştirebilirsiniz. event_id birincil anahtar olduğundan, iki tablodaki ortak etkinlikleri tekilleştirmek için DISTINCT event_id kullanabilirsiniz.
Android uygulaması için örnek sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket adı ve ANDROID yerine paket kimliğini ve IOS kullanın.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD") GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Sırada ne var?
Dışa aktarılan verileri ve Google Cloud gibi çeşitli hizmetleri kullanarak Looker Studio özel kontrol panelleri oluşturun.
Dışa aktarılan veriler için veri kümesi şeması hakkında bilgi edinin.