Crashlytics ve (isteğe bağlı olarak) Firebase oturum verilerinizi BigQuery'ya 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, Crashlytics 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). 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ı hakkında ayrıntılı bilgi 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 edinin
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 yardımı (Gemini) kullanarak sorgu yazmayı öğrenin.
Crashlytics verileri için örnek sorgular
Bu bölümde, dışa aktarılan Crashlytics verileriniz ve Firebase oturum verilerinizle 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ünlere 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 sorunu yaşayan tüm kullanıcıları bulma
- Kilitlenme sorunundan etkilenen kullanıcıların ülkeye göre dökümü
- Bugün şu ana kadar en çok karşılaşılan 5 sorun
- Bugün dahil, DATE tarihinden bu yana 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 uygulamanızda önemli bir yenileme yaptınız. Kullanıcılardan çok iyi 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 sayıda hatayı düzeltmek için çalıştıktan sonra ekibinizin yeni fotoğraf paylaşım uygulamanızı kullanıma sunmaya hazır olduğunu düşünüyorsunuz. Ancak bunu yapmadan önce, hata avını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 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 için yeni cihazlara özgü sorunların ortaya çıkacağı bir dönemin başlangıcı olduğunu biliyor. Olası uyumluluk sorunlarının önüne geçmek için geçen hafta (168 saat) en çok kilitlenen 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
Oyununuzun en çok hangi seviyesinde kilitlenme yaşandığını öğrenmek isteyen bir oyun geliştiricisi olduğunuzu varsayalım.
Bu istatistiği izlemek için current_level adında ö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 verilerdeki 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şadı. 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
7. örnek: 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 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ı 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 görmek istiyor.
Bu sorguyu yazmak için ekibinizin aşağıdakileri yapması gerekir:
Google Analytics verilerinin BigQuery ürününe 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 bir sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket kimliğini ve
IOSdeğerini (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 olmak üzere TARİH'ten bu yana en önemli 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?
Özel gösterge tabloları oluşturmak için dışa aktarılan verileri ve Data Studio gibi çeşitli Google Cloud hizmetlerini kullanabilirsiniz.
Dışa aktarılan veriler için veri kümesi şeması hakkında bilgi edinin.