Mobil uygulamanızın Crashlytics ve (isteğe bağlı olarak) Firebase oturum verilerini 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 sorgular çalıştırabilirsiniz. Bu tür özel raporlar Firebase Console'un Crashlytics kontrol panelinde bulunmadığından kilitlenme verilerini analiz etmenize ve anlamanıza yardımcı olabilir. 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 kilitlenme sorunu yaşamayan kullanıcılar ve kilitlenme sorunu yaşanmayan oturum sayısı hakkında daha fazla bilgi edinebilirsiniz (örnek sorguya bakın).Crashlytics Ayrıca, çeşitli Firebase ürünlerinden (ör. Performance Monitoring) veya Google Analytics'ten veri aktarabilir, ardından bu verileri BigQuery'te 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 belgelerine bakın.
Veri kümesi şemasıyla ilgili ayrıntılar için BigQuery'te dışa aktarılan veriler için 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 içinde desteklenen ifadeler ve SQL lehçeleri hakkında bilgi edinin.
Yapay zeka destekli asistanı (Gemini) kullanarak sorgu yazmayı öğrenin.
Crashlytics verileri için örnek sorgular
Bu bölümde, mobil uygulamanızın dışa aktarılan Crashlytics verileri ve Firebase oturum verileriyle BigQuery SQL'i nasıl kullanabileceğinizi gösteren bazı örnek durumlar ve örnek sorgular verilmiştir.
- Firebase oturum verilerini kullanarak kilitlenme sorunu yaşamayan kullanıcı metriklerini hesaplama
- Günlük 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
- Ülkeye göre dökümüyle, kilitlenme sorunundan etkilenen kullanıcı sayısı
- Bugün şu ana kadar en çok karşılaşılan 5 sorun
- DATE tarihinden bugüne kadar en çok karşılaşılan 5 sorun
1. örnek: Firebase oturum verilerini kullanarak kilitlenme içermeyen metrikleri hesaplama
En yeni sürümünüzde, kritik kullanıcı yolculuğundaki (CUJ) kilitlenmeleri gidermek için mobil 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.
Kilitlenme yaşanmayan oturum metrikleri bu bilgileri sağlamaya yardımcı olabilir. 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 sorgu kullanarak hesaplayabilirsiniz.
Aşağıda bir Android uygulaması için örnek sorgular verilmiştir. iOS uygulaması için paket kimliğini ve IOS değerini (paket adı ve ANDROID yerine) kullanın.
Belirli bir sürüm için 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) içinde 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 hatayı düzeltmek için çalıştıktan sonra ekibinizin yeni mobil fotoğraf paylaşımı uygulamasını kullanıma sunmaya hazır olduğunu düşünüyorsunuz. Ancak bunu yapmadan önce, hata giderme çalışmaları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 bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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 mobil uygulamanızda en yaygın görülen 10 kilitlenmeyi bulmak istiyorsunuz. İlgili veri noktalarını sağlayan bir sorgu oluşturuyorsunuz.
Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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 cihazlara özgü sorunların ortaya çıkacağı bir dönemin başlangıcı olduğunu biliyor. Yaklaşan uyumluluk sorunlarının önüne geçmek için geçen hafta (168 saat) en çok kilitlenme yaşayan 10 cihazı belirleyen bir sorgu oluşturuyorsunuz.
Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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;
5. örnek: Özel anahtara göre filtreleme
Bir mobil oyun geliştiricisi olarak, oyununuzun hangi seviyesinde en çok kilitlenme yaşandığını öğrenmek istiyorsunuz.
Bu istatistiği izlemek için current_level adlı özel bir Crashlytics anahtarı
(iOS+ |
Android |
Flutter |
Unity
)
ayarlayıp kullanıcı her yeni seviyeye ulaştığında bu anahtarı güncellersiniz.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
BigQuery hizmetine aktardığınız verilerde bu anahtarı kullanarak her kilitlenme etkinliğiyle ilişkili current_level değerlerinin dağılımını raporlayan bir sorgu yazabilirsiniz.
Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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 kapsamında bir Android uygulamanız var. Kullanıcılarınızın çoğu uygulamayı beğeniyor ancak üç kullanıcı, normalden fazla kilitlenme sorunu yaşıyor. Sorunun kaynağını bulmak için kullanıcı kimliklerini kullanarak bu kullanıcıların tüm kilitlenme etkinliklerini çeken bir sorgu yazarsınız.
Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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
Örnek 7: Belirli bir kilitlenme sorunu yaşayan tüm kullanıcıları bulma
Ekibiniz yanlışlıkla bir grup beta test kullanıcısına kritik bir hata içeren sürüm yayınladı. Ekibiniz, yukarıdaki "En yaygın kilitlenmeleri bulma" örneğindeki sorguyu kullanarak belirli kilitlenme sorunu kimliğini belirleyebildi. Ekibiniz, bu kilitlenmeden etkilenen mobil uygulama kullanıcılarının listesini çıkarmak için bir sorgu çalıştırmak istiyor.
Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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ıların sayısının ülkeye göre dökümü
Ekibiniz, yeni bir sürümün kullanıma sunulması sırasında kritik bir hata tespit etti. Belirli kilitlenme sorunu kimliğini belirlemek için yukarıdaki "En yaygın kilitlenmeleri bulma" örneğindeki sorguyu kullanabildiniz. Ekibiniz, bu kilitlenmenin dünyanın farklı ülkelerindeki kullanıcıları da etkileyip etkilemediğini öğrenmek istiyor.
Bu sorguyu yazmak için ekibinizin şunları yapması gerekir:
Google Analytics verilerinin BigQuery platformuna aktarılmasını etkinleştirin. Proje verilerini BigQuery'ye aktarma başlıklı makaleyi inceleyin.
Mobil uygulamanızı hem Google Analytics SDK'sına hem de Crashlytics SDK'sına bir 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 bir sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket kimliğini ve
IOSparametresini (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 en çok karşılaşılan 5 sorun
Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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, TARİH'ten bu yana en çok karşılaşılan 5 sorun
Güvenilir toplu verilere gerçek zamanlı bilgiler eklemek için toplu ve gerçek zamanlı tabloları birleştirme sorgusuyla 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 bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).
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 Data Studio gibi çeşitli Google Cloud hizmetlerini kullanarak özel gösterge tabloları oluşturma
Dışa aktarılan veriler için veri kümesi şeması hakkında bilgi edinin.