Firebase Crashlytics verilerinizi daha ayrıntılı analiz için BigQuery'ye aktarabilirsiniz. BigQuery, verileri BigQuery SQL kullanarak analiz etmenize, başka bir bulut sağlayıcıya aktarmanıza ve Looker Studio ile görselleştirme ve özel kontrol panelleri için kullanmanıza olanak tanır.
Dışa aktarılan verilerle neler yapabilirsiniz?
BigQuery dışa aktarımları, cihaz türü, işletim sistemi, istisnalar (Android uygulamaları) veya hatalar (Apple uygulamaları) ve Crashlytics günlükleri dahil olmak üzere ham kilitlenme verilerinin yanı sıra diğer verileri içerir. Hangi Crashlytics verilerin dışa aktarıldığını ve bunların tablo şemasını bu sayfanın ilerleyen kısımlarında inceleyebilirsiniz.
Dışa aktarılan Crashlytics verilerinizle yapabileceklerinize dair bazı örnekler:
- Sorgu çalıştırma 
 Kilitlenme etkinliği verilerini daha kolay anlaşılır özetler halinde toplayan raporlar oluşturmak için Crashlytics verilerinizde sorgu çalıştırabilirsiniz. Bu tür raporlar Crashlytics konsolunun Firebase kontrol panelinde kullanılamadığından, kilitlenme verileriyle ilgili analiz ve anlayışınızı tamamlayabilirler. Bu sayfanın ilerleyen bölümlerinde örnek sorgular bulabilirsiniz.
- Looker Studio şablonu kullanma 
 Crashlytics, dışa aktarılan verilerinizi görselleştirmek için önceden oluşturulmuş Looker Studio şablonu sunar.
- 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.
- Crashlytics'e özgü verileri Firebase oturum verileriyle birleştirme 
 Crashlytics veri aktarımını ayarladığınızda Firebase oturum verilerini de aktarabilirsiniz. Kilitlenme sorunu ile karşılaşmayan kullanıcılar ve kilitlenme sorunu ile karşılaşmayan oturumlar hakkında daha iyi bilgi edinmek için bu oturum verilerini kullanın.
BigQuery için akışı dışa aktarmanın avantajları
Varsayılan olarak veriler, günlük toplu dışa aktarma işlemiyle BigQuery konumuna aktarılır. Ayrıca, BigQuery akışı ile Crashlytics verilerinizi ve Firebase oturumlarınızı gerçek zamanlı olarak yayınlayabilirsiniz. Canlı verilerin gerekli olduğu her amaç için kullanabilirsiniz. Örneğin, bilgileri canlı bir kontrol panelinde sunma, kullanıma sunma sürecini canlı olarak izleme veya uyarıları ve özel iş akışlarını tetikleyen uygulama sorunlarını izleme gibi.
BigQuery'a akış dışa aktarımını etkinleştirdiğinizde toplu tablolara ek olarak anlık tablolar da elde edersiniz. Her iki tablo türü de aynı veri kümesi şemasına sahip olsa da toplu iş tabloları ile gerçek zamanlı tablolar arasında bazı önemli farklılıklar vardır:
| Toplu iş tablosu | Anlık tablo | 
|---|---|
| 
 | 
 | 
Toplu iş tablosu, uzun vadeli analiz ve zaman içindeki trendleri belirlemek için idealdir. Çünkü etkinlikleri yazmadan önce kalıcı olarak saklarız ve 30 güne kadar tabloya geri doldurulabilirler*. Verileri anlık tablonuza yazdığımızda bunları hemen BigQuery konumuna yazarız. Bu nedenle, canlı gösterge tabloları ve özel uyarılar için idealdir. Bu iki tablo, her ikisinin avantajlarından yararlanmak için birleştirme sorgusuyla birleştirilebilir.
Varsayılan olarak, anlık tablo 30 günlük bir bölüm geçerlilik süresine sahiptir. Bunu nasıl değiştireceğinizi öğrenmek için BigQuery dokümanlarındaki Bölümün geçerlilik süresini ayarlama başlıklı makaleyi inceleyin.
* Yedek reklam desteğiyle ilgili ayrıntıları Yeni dışa aktarma altyapısına yükseltme başlıklı makalede bulabilirsiniz.
BigQuery biçimine dışa aktarmayı etkinleştirme
- Firebase konsolunda Entegrasyonlar sayfasına gidin. 
- BigQuery kartında Bağlantı'yı tıklayın. 
- Aşağıdaki seçenekler de dahil olmak üzere BigQuery'a dışa aktarmayı etkinleştirmek için ekrandaki talimatları uygulayın: - Kilitlenme sorunu yaşamayan kullanıcılar ve kilitlenme sorunu yaşamayan oturumlar hakkında daha iyi bilgi edinmek için Firebase oturum verilerini dışa aktarmayı etkinleştirin. 
- Crashlytics verilerinize ve BigQuery'teki Firebase oturum verilerine neredeyse anlık erişim elde etmek için akışla dışa aktarma özelliğini etkinleştirin. 
 
Dışa aktarmayı etkinleştirdiğinizde ne olur?
- Firebase, BigQuery'e bağlı uygulamalardan veri dışa aktarır. - Kurulum sırasında, projenizdeki tüm uygulamalar varsayılan olarak BigQuery'ya bağlanır. Ancak kurulum sırasında belirli uygulamaları bağlamamayı seçebilirsiniz. 
- Daha sonra Firebase projenize eklediğiniz tüm uygulamalar otomatik olarak BigQuery'ya bağlanır. 
- Dilediğiniz zaman hangi uygulamaların veri dışa aktaracağını yönetebilirsiniz. 
 
- Firebase, verileri kurulum sırasında seçtiğiniz veri kümesi konumuna aktarır. - Bu konum hem Crashlytics veri kümesi hem de Firebase oturumları veri kümesi (oturum verilerinin dışa aktarılması etkinleştirilmişse) için geçerlidir. 
- Bu konum yalnızca BigQuery'ya aktarılan veriler için geçerlidir ve Firebase konsolunun Crashlytics kontrol panelinde veya Android Studio'da kullanılmak üzere depolanan verilerin konumunu etkilemez. 
- Veri kümesi oluşturulduktan sonra konumu değiştirilemez ancak veri kümesini farklı bir konuma kopyalayabilir veya veri kümesini farklı bir konuma manuel olarak taşıyabilirsiniz (yeniden oluşturma). Daha fazla bilgi için Mevcut dışa aktarma işlemlerinin konumunu değiştirme başlıklı makaleyi inceleyin. 
 
- Firebase, toplu verilerinizin BigQuery ile günlük olarak senkronize edilmesini sağlar. - BigQuery'ya bağlandıktan sonra ilk toplu veri dışa aktarma işlemi 48 saati bulabilir. 
- Günlük senkronizasyon, BigQuery'da ayarlamış olabileceğiniz planlanmış dışa aktarma işlemlerinden bağımsız olarak günde bir kez gerçekleşir. Senkronizasyon işinin zamanlaması ve süresinin değişebileceğini unutmayın. Bu nedenle, dışa aktarma işleminin belirli bir zamanlamasına göre sonraki işlemlerin veya işlerin planlanmasını önermiyoruz. 
 
- Firebase mevcut verilerinizin bir kopyasını dışa aktararak BigQuery'e aktarır. - Bu dışa aktarma işlemi, her bağlı uygulama için günlük senkronizasyondan elde edilen verileri içeren bir toplu tablo içerir. 
- Toplu iş tablosu için manuel olarak veri geri doldurma işlemleri planlayabilirsiniz. Bu işlemler, BigQuery'e dışa aktarmayı etkinleştirdiğinizde son 30 güne kadar veya en son tarih için (hangisi daha yakınsa) planlanabilir. 
 - Ekim 2024'ün ortasından önce Crashlytics verilerinin dışa aktarılmasını etkinleştirdiyseniz dışa aktarmayı etkinleştirdiğiniz günden önceki 30 günü de doldurabileceğinizi unutmayın. 
- Akışı BigQuery'a dışa aktarmayı etkinleştirirseniz aşağıdaki koşullar geçerlidir. - Ayrıca, her bağlı uygulamanın sürekli güncellenen verileri içeren kendi gerçek zamanlı tablosu (uygulamanın günlük toplu dışa aktarma için toplu tablosuna ek olarak) olacaktır. 
- Yayın etkinleştirildikten sonra verilerin yayınlanmaya başlaması 1 saati bulabilir. 
 
Örnek sorgular
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.
Kilitlenme içermeyen metrikler 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 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(_PARTITIONTIME,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.event_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(_PARTITIONTIME,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ı kullanıma sunmaya hazır olduğunu düşünüyorsunuz. Ancak bunu yapmadan önce, hata avı etkinliğinizin 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;
5. örnek: Ö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ı olması için current_level adlı bir özel Crashlytics anahtarı ayarlarsınız ve kullanıcı yeni bir 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);
Dışa aktarma işleminizde bu anahtarı kullanarak BigQuery, her kilitlenme etkinliğiyle ilişkili current_level değerlerinin dağılımını bildiren 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: User-ID'yi 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, beta test kullanıcılarından oluşan bir gruba yanlışlıkla 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. Ş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 aşağıda verilmiştir. iOS uygulaması için paket adı ve - ANDROIDyerine paket kimliğini ve- IOSkullanı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;
10. örnek: Bugün dahil olmak üzere, TARİH'ten bu yana en önemli 5 sorun
Güvenilir toplu verilerinize 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;
Dışa aktarılan Crashlytics verilerini Looker Studio ile görselleştirme
Looker Studio BigQuery içindeki Crashlytics veri kümelerinizi okunması ve paylaşılması kolay, tamamen özelleştirilebilen raporlara dönüştürür.
Looker Studio kullanımı hakkında daha fazla bilgi edinmek için karşılama rehberine göz atın.
Crashlytics rapor şablonu kullanma
Looker Studio, dışa aktarılan Crashlytics BigQuery şemasından kapsamlı bir boyut ve metrik grubu içeren Crashlytics için örnek bir rapora sahiptir. Crashlytics'e BigQuery akışlı dışa aktarma özelliğini etkinleştirdiyseniz bu verileri Looker Studio şablonunun Anlık trendler sayfasında görüntüleyebilirsiniz.Örnekleri, kendi uygulamanızın ham kilitlenme verilerine dayalı olarak hızlı bir şekilde yeni raporlar ve görselleştirmeler oluşturmak için şablon olarak kullanabilirsiniz:
- Sağ üst köşedeki Şablonu Kullan'ı tıklayın. 
- Yeni Veri Kaynağı açılır listesinde Yeni Veri Kaynağı Oluştur'u seçin. 
- BigQuery kartında Seç'i tıklayın. 
- Projelerim > PROJECT_ID > firebase_crashlytics > TABLE_NAME'i seçerek dışa aktarılan Crashlytics verilerini içeren bir tablo seçin. - Toplu işlem tablonuz her zaman seçilebilir. Crashlytics BigQuery için akış dışa aktarma etkinleştirildiyse bunun yerine gerçek zamanlı tablonuzu seçebilirsiniz. 
- Yapılandırma bölümünde Crashlytics Şablon düzeyi'ni Varsayılan olarak ayarlayın. 
- Yeni veri kaynağını oluşturmak için Bağlan'ı tıklayın. 
- Crashlytics şablonuna dönmek için Rapora Ekle'yi tıklayın. 
- Son olarak, Crashlytics Looker Studio gösterge tablosu şablonunun kopyasını oluşturmak için Rapor Oluştur'u tıklayın. 
BigQuery şemasını anlama
Firebase, dışa aktarılan verileriniz için BigQuery içinde yeni veri kümeleri oluşturur:
- Firebase oturumları veri kümesi (oturum verilerinin dışa aktarılması etkinse) 
Crashlytics veri kümesi
Crashlytics verileri, firebase_crashlytics adlı BigQuery veri kümesine aktarılır. Veri kümesi, birden fazla uygulama içerse bile projenizin tamamını kapsar.
Tablolar
Varsayılan olarak Firebase, Crashlytics veri kümesinde BigQuery'ye bağlı projenizdeki her uygulama için ayrı tablolar oluşturur.
Tablolar, uygulamanın tanımlayıcısına göre adlandırılır (noktalar alt çizgiye dönüştürülür) ve uygulamanın platformu (_IOS veya _ANDROID) eklenir. Örneğin, paket adı com.google.test olan bir Android uygulamasına ait veriler com_google_test_ANDROID adlı tabloda yer alır.
- BigQuery konumuna akış dışa aktarma etkinleştirildiyse veriler, - _REALTIMEile eklenmiş bir tabloya da anlık olarak aktarılır (örneğin,- com_google_test_ANDROID_REALTIME).
- Tablodaki her satır, uygulamada meydana gelen bir etkinliği (kilitlenmeler, onarılabilir hatalar ve ANR'ler dahil) temsil eder. 
- Tablolar, uygulamanızda tanımladığınız özel Crashlytics anahtarların yanı sıra standart bir Crashlytics veri kümesi içerir. 
Satırlar
Tablodaki her satır, uygulamanın karşılaştığı bir hatayı temsil eder.
Sütunlar
Bir tablodaki sütunlar kilitlenmeler, onarılabilir hatalar ve ANR'ler için aynıdır.
- BigQuery için akış dışa aktarma etkinleştirilirse gerçek zamanlı tablo, toplu tabloyla aynı sütunlara sahip olur. 
- Etkinlikleri temsil eden satırlarda yığın izleri olmayan sütunlar olabilir. 
Dışa aktarılan Crashlytics verileri için tablodaki sütunlar şunlardır:
| Alan adı | Veri türü | Açıklama | 
|---|---|---|
| app_orientation | DİZE | Örneğin, PORTRAIT,LANDSCAPE,FACE_UP,FACE_DOWNvb. | 
| application | KAYIT | Etkinliği oluşturan uygulama | 
| application.build_version | DİZE | Uygulamanın derleme sürümü | 
| application.display_version | DİZE | |
| blame_frame | KAYIT | Kilitlenmenin veya hatanın temel nedeni olarak tanımlanan çerçeve | 
| blame_frame.address | INT64 | Kodu içeren ikili görüntüdeki adres Java çerçeveleri için ayarlanmamış | 
| blame_frame.blamed | BOOLE | Crashlytics, bu karenin kilitlenmeye veya hataya neden olduğunu belirledi mi? | 
| blame_frame.file | DİZE | Çerçeve dosyasının adı | 
| blame_frame.library | DİZE | Çerçeveyi içeren kitaplığın görünen adı | 
| blame_frame.line | INT64 | Çerçevenin dosyasının satır numarası | 
| blame_frame.offset | INT64 | Kodu içeren ikili görüntüdeki bayt uzaklığı Java istisnaları için ayarlanmamış | 
| blame_frame.owner | DİZE | Örneğin, DEVELOPER,VENDOR,RUNTIME,PLATFORMveyaSYSTEM | 
| blame_frame.symbol | DİZE | Hidratlanmış sembol veya hidratlanamıyorsa ham sembol | 
| breadcrumbs | REPEATED RECORD | Etkinleştirilmişse zaman damgalı Google Analytics içerik haritaları | 
| breadcrumbs.name | DİZE | İçerik haritasıyla ilişkili ad | 
| breadcrumbs.params | REPEATED RECORD | Ekmek kırıntısıyla ilişkili parametreler | 
| breadcrumbs.params.key | DİZE | Ekmek kırıntısıyla ilişkili bir parametre anahtarı | 
| breadcrumbs.params.value | DİZE | Ekmek kırıntısıyla ilişkili bir parametre değeri | 
| breadcrumbs.timestamp | ZAMAN DAMGASI | İçerik haritasıyla ilişkili zaman damgası | 
| bundle_identifier | DİZE | Uygulamanın Firebase projesine kaydedilirken kullanılan benzersiz tanımlayıcısı
(örneğin, com.google.gmailApple platformu uygulamaları için bu, uygulamanın paket kimliğidir. Android uygulamaları için bu, uygulamanın paket adıdır. | 
| crashlytics_sdk_versions | DİZE | Etkinliği oluşturan Crashlytics SDK sürümü | 
| custom_keys | REPEATED RECORD | Geliştirici tarafından tanımlanan anahtar/değer çiftleri | 
| custom_keys.key | DİZE | Geliştirici tarafından tanımlanan bir anahtar | 
| custom_keys.value | DİZE | Geliştirici tarafından tanımlanan bir değer | 
| device | KAYIT | Etkinliğin gerçekleştiği cihaz | 
| device_orientation | DİZE | Örneğin, PORTRAIT,LANDSCAPE,FACE_UP,FACE_DOWNvb. | 
| device.architecture | DİZE | Örneğin, X86_32,X86_64,ARMV7,ARM64,ARMV7SveyaARMV7K | 
| device.manufacturer | DİZE | Cihaz üreticisi | 
| device.model | DİZE | Cihaz modeli | 
| error | REPEATED RECORD | (Yalnızca Apple uygulamaları) Önemli olmayan hatalar | 
| error_type | DİZE | Etkinliğin hata türü (ör. FATAL,NON_FATAL,ANRvb.) | 
| error.blamed | BOOLE | Crashlytics bu karenin hatanın nedeni olduğunu belirledi mi? | 
| error.code | INT64 | Uygulamanın özel olarak kaydedilen NSError'siyle ilişkili hata kodu | 
| error.frames | REPEATED RECORD | Yığın izlemesinin çerçeveleri | 
| error.frames.address | INT64 | Kodu içeren ikili resimdeki adres | 
| error.frames.blamed | BOOLE | Crashlytics bu karenin hatanın nedeni olduğunu belirledi mi? | 
| error.frames.file | DİZE | Çerçeve dosyasının adı | 
| error.frames.library | DİZE | Çerçeveyi içeren kitaplığın görünen adı | 
| error.frames.line | INT64 | Çerçevenin dosyasının satır numarası | 
| error.frames.offset | INT64 | Kodu içeren ikili görüntüdeki bayt uzaklığı | 
| error.frames.owner | DİZE | Örneğin, DEVELOPER,VENDOR,RUNTIME,PLATFORMveyaSYSTEM | 
| error.frames.symbol | DİZE | Hidratlanmış sembol veya hidratlanamıyorsa ham sembol | 
| error.queue_name | DİZE | İş parçacığının üzerinde çalıştığı sıra | 
| error.subtitle | DİZE | İleti dizisinin alt başlığı | 
| error.title | DİZE | İleti dizisinin başlığı | 
| event_id | DİZE | Etkinliğin benzersiz kimliği | 
| event_timestamp | ZAMAN DAMGASI | Etkinliğin gerçekleştiği zaman | 
| exceptions | REPEATED RECORD | (Yalnızca Android) Bu etkinlik sırasında oluşan istisnalar. İç içe yerleştirilmiş istisnalar, ters kronolojik sırayla sunulur. Bu nedenle, son kayıt, oluşturulan ilk istisnadır. | 
| exceptions.blamed | BOOLE | Crashlytics, istisnanın hataya veya kilitlenmeye neden olduğunu belirlerse doğru | 
| exceptions.exception_message | DİZE | İstisnayla ilişkili bir mesaj | 
| exceptions.frames | REPEATED RECORD | İstisnayla ilişkili kareler | 
| exceptions.frames.address | INT64 | Kodu içeren ikili görüntüdeki adres Java çerçeveleri için ayarlanmamış | 
| exceptions.frames.blamed | BOOLE | Crashlytics, bu karenin kilitlenmeye veya hataya neden olduğunu belirledi mi? | 
| exceptions.frames.file | DİZE | Çerçeve dosyasının adı | 
| exceptions.frames.library | DİZE | Çerçeveyi içeren kitaplığın görünen adı | 
| exceptions.frames.line | INT64 | Çerçevenin dosyasının satır numarası | 
| exceptions.frames.offset | INT64 | Kodu içeren ikili görüntüdeki bayt uzaklığı Java istisnaları için ayarlanmamış | 
| exceptions.frames.owner | DİZE | Örneğin, DEVELOPER,VENDOR,RUNTIME,PLATFORMveyaSYSTEM | 
| exceptions.frames.symbol | DİZE | Hidratlanmış sembol veya hidratlanamıyorsa ham sembol | 
| exceptions.nested | BOOLE | Son atılan istisna (yani ilk kayıt) hariç tümü için doğrudur. | 
| exceptions.subtitle | DİZE | İleti dizisinin alt başlığı | 
| exceptions.title | DİZE | İleti dizisinin başlığı | 
| exceptions.type | DİZE | İstisna türü
(örneğin, java.lang.IllegalStateException) | 
| firebase_session_id | DİZE | Crashlytics kaynağından gelen etkinlikle eşlenen Firebase oturumu için otomatik olarak oluşturulan kimlik | 
| installation_uuid | DİZE | Benzersiz bir uygulama ve cihaz yüklemesini tanımlayan kimlik | 
| is_fatal | BOOLE | Uygulamanın kilitlenip kilitlenmediği | 
| issue_id | DİZE | Etkinlikle ilişkili sorun | 
| logs | REPEATED RECORD | Etkinleştirilmişse Crashlytics kaydedici tarafından oluşturulan zaman damgalı günlük mesajları | 
| logs.message | DİZE | Günlüğe kaydedilen mesaj | 
| logs.timestamp | ZAMAN DAMGASI | Günlüğün oluşturulduğu zaman | 
| memory | KAYIT | Cihazın bellek durumu | 
| memory.free | INT64 | Kalan bellek baytı | 
| memory.used | INT64 | Kullanılan bellek baytları | 
| operating_system | KAYIT | Cihazdaki işletim sisteminin ayrıntıları | 
| operating_system.device_type | DİZE | Cihaz türü (örneğin, MOBILE,TABLET,TVvb.); "cihaz kategorisi" olarak da bilinir. | 
| operating_system.display_version | DİZE | Cihazdaki işletim sisteminin sürümü | 
| operating_system.modification_state | DİZE | Cihazın değiştirilip değiştirilmediği
(ör. jailbreak'li bir uygulama MODIFIED, rootlanmış bir uygulama iseUNMODIFIED) | 
| operating_system.name | DİZE | Cihazdaki işletim sisteminin adı | 
| operating_system.type | DİZE | (Yalnızca Apple uygulamaları) Cihazda çalışan işletim sisteminin türü (ör. IOS,MACOSvb.) | 
| platform | DİZE | Uygulamanın Firebase projesine kayıtlı olduğu platform
(geçerli değerler: IOSveyaANDROID) | 
| process_state | DİZE | BACKGROUNDveyaFOREGROUND | 
| storage | KAYIT | Cihazın kalıcı depolama alanı | 
| storage.free | INT64 | Kalan depolama alanı (bayt) | 
| storage.used | INT64 | Kullanılan depolama alanı (bayt) | 
| threads | REPEATED RECORD | Etkinlik sırasında mevcut olan ileti dizileri | 
| threads.blamed | BOOLE | Crashlytics, bu karenin kilitlenmeye veya hataya neden olduğunu belirledi mi? | 
| threads.code | INT64 | (Yalnızca Apple uygulamaları) Uygulamanın özel olarak kaydedilmiş NSError'ının hata kodu | 
| threads.crash_address | INT64 | Uygulamanın çökmesine neden olan sinyalin adresi; yalnızca çöken yerel iş parçacıklarında bulunur. | 
| threads.crashed | BOOLE | İş parçacığının kilitlenip kilitlenmediği | 
| threads.frames | REPEATED RECORD | İpliğin çerçeveleri | 
| threads.frames.address | INT64 | Kodu içeren ikili resimdeki adres | 
| threads.frames.blamed | BOOLE | Crashlytics bu karenin hatanın nedeni olduğunu belirledi mi? | 
| threads.frames.file | DİZE | Çerçeve dosyasının adı | 
| threads.frames.library | DİZE | Çerçeveyi içeren kitaplığın görünen adı | 
| threads.frames.line | INT64 | Çerçevenin dosyasının satır numarası | 
| threads.frames.offset | INT64 | Kodu içeren ikili görüntüdeki bayt uzaklığı | 
| threads.frames.owner | DİZE | Örneğin, DEVELOPER,VENDOR,RUNTIME,PLATFORMveyaSYSTEM | 
| threads.frames.symbol | DİZE | Hidratlanmış sembol veya hidratlanamıyorsa ham sembol | 
| threads.queue_name | DİZE | (Yalnızca Apple uygulamaları) İş parçacığının üzerinde çalıştığı sıra | 
| threads.signal_code | DİZE | Uygulamanın kilitlenmesine neden olan sinyalin kodu; yalnızca kilitlenen yerel iş parçacıklarında bulunur. | 
| threads.signal_name | DİZE | Uygulamanın kilitlenmesine neden olan sinyalin adı. Yalnızca kilitlenen yerel iş parçacıklarında bulunur. | 
| threads.subtitle | DİZE | İleti dizisinin alt başlığı | 
| threads.thread_name | DİZE | İleti dizisinin adı | 
| threads.title | DİZE | İleti dizisinin başlığı | 
| unity_metadata.debug_build | BOOLE | Bu bir hata ayıklama sürümüyse | 
| unity_metadata.graphics_copy_texture_support | DİZE | Unity API'de tanımlandığı şekilde grafik dokusunu kopyalama desteği | 
| unity_metadata.graphics_device_id | INT64 | Grafik cihazının tanımlayıcısı | 
| unity_metadata.graphics_device_name | DİZE | Grafik cihazının adı | 
| unity_metadata.graphics_device_type | DİZE | Grafik cihazının türü | 
| unity_metadata.graphics_device_vendor_id | INT64 | Grafik işlemcinin tedarikçisinin tanımlayıcısı | 
| unity_metadata.graphics_device_vendor | DİZE | Grafik cihazının satıcısı | 
| unity_metadata.graphics_device_version | DİZE | Grafik cihazın sürümü | 
| unity_metadata.graphics_max_texture_size | INT64 | Doku oluşturmaya ayrılan maksimum boyut | 
| unity_metadata.graphics_memory_size_mb | INT64 | MB cinsinden grafik belleği | 
| unity_metadata.graphics_render_target_count | INT64 | Grafik oluşturma hedeflerinin sayısı | 
| unity_metadata.graphics_shader_level | INT64 | Grafiklerin gölgelendirici düzeyi | 
| unity_metadata.processor_count | INT64 | İşlemci (çekirdek) sayısı | 
| unity_metadata.processor_frequency_mhz | INT64 | İşlemcilerin frekansı(MHz) | 
| unity_metadata.processor_type | DİZE | İşlemcinin türü | 
| unity_metadata.screen_refresh_rate_hz | INT64 | Ekranın Hz cinsinden yenileme hızı | 
| unity_metadata.screen_resolution_dpi | DİZE | Ekranın DPI'si (kayan nokta sayısı olarak) | 
| unity_metadata.screen_size_px | DİZE | Ekranın piksel cinsinden boyutu (genişlik x yükseklik olarak biçimlendirilmiş) | 
| unity_metadata.system_memory_size_mb | INT64 | Sistemin belleğinin boyutu (Mb cinsinden) | 
| unity_metadata.unity_version | DİZE | Bu cihazda çalışan Unity sürümü | 
| user | KAYIT | (İsteğe bağlı) Uygulama kullanıcısı hakkında toplanan bilgiler | 
| user.email | DİZE | (İsteğe bağlı) Kullanıcının e-posta adresi | 
| user.id | DİZE | (İsteğe bağlı) Kullanıcıyla ilişkilendirilmiş uygulamaya özel kimlik | 
| user.name | DİZE | (İsteğe bağlı) Kullanıcının adı | 
| variant_id | DİZE | Bu etkinlikle ilişkili sorun varyantı Tüm etkinliklerin ilişkili bir sorun varyantı olmadığını unutmayın. | 
Firebase oturumları veri kümesi
Firebase oturum verileri, BigQuery adlı bir veri kümesine aktarılır
firebase_sessions. Veri kümesi, birden fazla uygulama içerse bile projenizin tamamını kapsar.
Tablolar
Varsayılan olarak Firebase, projenizde BigQuery'e bağlı her uygulama için Firebase oturumları veri kümesinde ayrı tablolar oluşturur.
Tablolar, uygulamanın tanımlayıcısına göre adlandırılır (noktalar alt çizgiye dönüştürülür) ve uygulamanın platformu (_IOS veya _ANDROID) eklenir. Örneğin, paket adı com.google.test olan bir Android uygulamasına ait veriler com_google_test_ANDROID adlı tabloda yer alır.
Satırlar
Tablodaki her satır, gerçekleşen bir oturum etkinliğini temsil eder.
Sütunlar
BigQuery için akış dışa aktarma etkinleştirilirse gerçek zamanlı tablo, toplu tabloyla aynı sütunlara sahip olur.
Dışa aktarılan Firebase oturum verilerinin tablosundaki sütunlar şunlardır:
| Alan adı | Veri türü | Açıklama | 
|---|---|---|
| instance_id | DİZE | Cihazdaki Firebase kurulum kimliği (FID). Benzersiz bir uygulama + cihaz yüklemesini tanımlar. | 
| session_id | DİZE | Bu oturumun benzersiz kimliği | 
| first_session_id | DİZE | Uygulama sıfırdan başlatıldığından beri bu oturumun içinde bulunduğu bir dizi oturumun ilk kimliği. Bu, soğuk başlatmadan bu yana gerçekleşen tüm oturumları gruplandırmak için kullanılabilir. Bu oturum ilk oturumsa bu alan session_idile aynı olur. | 
| session_index | TAM SAYI | Bu oturumun geldiği sipariş, uygulama baştan başlatıldıktan sonra verildi. Soğuk başlatmadan sonraki ilk oturum için bu değer 0olur. Dizin, soğuk başlangıç olmadan bir oturum oluşturulduğunda (örneğin, 30 dakika boyunca etkinlik gerçekleşmediğinde) her seferinde artırılır. | 
| event_type | DİZE | Oturumda gerçekleşen etkinliğin türü (ör. SESSION_START) | 
| event_timestamp | ZAMAN DAMGASI | Etkinliğin gerçekleştiği zaman | 
| received_timestamp | ZAMAN DAMGASI | Etkinliğin cihazdan sunucuya alındığı zaman | 
| performance_data_collection_enabled | BOOLE | Oturum sırasında Firebase Performance Monitoring SDK veri toplama özelliğinin etkin olup olmadığı | 
| crashlytics_data_collection_enabled | BOOLE | Oturum sırasında Firebase Crashlytics SDK veri toplama özelliğinin etkin olup olmadığı | 
| application | KAYIT | Uygulamayı açıklar. | 
| application.build_version | DİZE | Uygulamanın derleme sürümü (örneğin, 1523456) | 
| application.display_version | DİZE | Uygulamanın görünen sürümü (ör. 4.1.7) | 
| device | KAYIT | Etkinliğin gerçekleştiği cihaz | 
| device.model | DİZE | Cihazın modeli | 
| device.manufacturer | DİZE | Cihazın üreticisi. Apple platformu uygulamaları için bu alan NULLolacaktır. | 
| operating_system | KAYIT | Cihazın işletim sistemini açıklar. | 
| operating_system.display_version | DİZE | İşletim sisteminin görünen sürümü (örneğin, 10.2.1) | 
| operating_system.name | DİZE | İşletim sisteminin adı | 
| operating_system.type | DİZE | İşletim sisteminin türü (örneğin, IOS).
        Bu alan yalnızca Apple cihazlar için ayarlanır. | 
| operating_system.device_type | DİZE | Cihaz türü (örneğin, MOBILE,TABLET,TV) | 
Yeni dışa aktarma altyapısına yükseltme
Crashlytics, Ekim 2024'ün ortalarında Crashlytics verilerinin BigQuery'ye toplu dışa aktarımı için yeni bir altyapı kullanıma sundu.
Tüm Firebase projeleri, 15 Eylül 2025'ten itibaren yeni toplu dışa aktarma altyapısına otomatik olarak yükseltilecek. Bu tarihten önce yükseltme yapabilirsiniz ancak BigQuery toplu tablolarınızın yükseltme için ön koşulları karşıladığından emin olun.
Yeni altyapıya geçebilirsiniz ancak BigQuery toplu tablolarınızın yükseltme için ön koşulları karşıladığından emin olun.
Yeni altyapıda olup olmadığınızı belirleme
Toplu dışa aktarma özelliğini Ekim 2024'ün ortasında veya daha sonra etkinleştirdiyseniz Firebase projeniz yeni dışa aktarma altyapısını otomatik olarak kullanır.
Projenizin hangi altyapıyı kullandığını kontrol edebilirsiniz:
Google Cloud konsoluna gidin. "Veri aktarımı yapılandırmanız" Firebase Crashlytics with Multi-Region Support olarak etiketlenmişse projeniz yeni dışa aktarma altyapısını kullanıyor demektir.
Eski ve yeni dışa aktarma altyapısı arasındaki önemli farklar
- Yeni altyapı, Crashlytics veri kümesi konumlarını destekler. - Ekim 2024'ün ortalarından önce dışa aktarma etkinleştirildi ve yeni dışa aktarma altyapısına yükseltildi: Artık isteğe bağlı olarak veri dışa aktarma konumunu değiştirebilirsiniz. 
- Dışa aktarma, Ekim 2024'ün ortasında veya daha sonra etkinleştirildi: Kurulum sırasında veri dışa aktarma için bir konum seçmeniz istendi. 
 
- Yeni altyapı, dışa aktarmayı etkinleştirmeden önceki verilerin geri doldurulmasını desteklemez. - Eski altyapı, dışa aktarmayı etkinleştirdiğiniz tarihten önceki 30 güne kadar geri doldurmayı destekliyordu. 
- Yeni altyapı, son 30 güne kadar doldurma işlemlerini veya dışa aktarmayı etkinleştirdiğiniz en son tarihi (hangisi daha yakınsa) destekler.BigQuery 
 
- Yeni altyapı, Firebase projenizdeki Firebase uygulamalarınız için ayarlanan tanımlayıcıları kullanarak BigQuery toplu tablolar oluşturur. - Eski altyapı, verileri uygulamanızın ikilisindeki paket kimliklerine veya paket adlarına göre adlandırılmış toplu iş tablolarına yazıyordu. 
- Yeni altyapı, verileri Firebase projenizde kayıtlı Firebase uygulamalarınız için ayarlanan paket kimliklerine veya paket adlarına göre adlandırılmış toplu iş tablolarına yazar. 
 
1. adım: Yükseltme için ön koşul
- Mevcut BigQuery toplu tablolarınızın, Firebase projenizde kayıtlı Firebase uygulamalarınız için ayarlanan paket kimlikleri veya paket adlarıyla eşleşen tanımlayıcılar kullandığını kontrol edin. Eşleşmezlerse dışa aktarılan toplu verilerinizde kesintiler yaşayabilirsiniz. Çoğu proje uygun ve uyumlu durumda olur ancak yükseltme yapmadan önce kontrol etmeniz önemlidir. - Firebase projenize kaydedilen tüm Firebase uygulamalarını Firebase konsolunda bulabilirsiniz: Proje ayarları'na gidin, ardından tüm Firebase uygulamalarınızı ve bilgilerini görmek için Uygulamalarınız kartına gidin. 
- Tüm BigQuery toplu tablolarınızı Google Cloud konsolunun BigQuery sayfasında bulabilirsiniz. 
 - Örneğin, yükseltme sırasında sorun yaşamayacağınız ideal durumlar şunlardır: - com_yourcompany_yourproject_IOSadlı bir toplu iş tablonuz ve Firebase projenize kaydedilmiş- com.yourcompany.yourprojectpaket kimliğine sahip bir Firebase iOS+ uygulamanız var.
- com_yourcompany_yourproject_ANDROIDadlı bir toplu iş tablonuz ve Firebase projenize kaydedilmiş- com.yourcompany.yourprojectpaket adına sahip bir Firebase Android uygulamanız var.
 
- Kayıtlı Firebase uygulamalarınız için ayarlanan tanımlayıcılarla eşleşmeyen toplu tablo adlarınız varsa toplu dışa aktarma işleminizin kesintiye uğramaması için bu sayfadaki talimatları manuel olarak yükseltmeden veya 15 Eylül 2025'ten önce uygulayın. 
2. adım: Yeni altyapıya manuel olarak geçin
Toplu dışa aktarma özelliğini Ekim 2024'ün ortasından önce etkinleştirdiyseniz Crashlytics veri dışa aktarma özelliğini Firebase konsolunda kapatıp tekrar açarak yeni altyapıya manuel olarak yükseltebilirsiniz.
Ayrıntılı adımlar aşağıda verilmiştir:
- Firebase konsolunda Entegrasyonlar sayfasına gidin. 
- BigQuery kartında Yönet'i tıklayın. 
- Dışa aktarmayı devre dışı bırakmak için Crashlytics kaydırma çubuğunu kapatın. İstendiğinde veri dışa aktarma işlemini durdurmak istediğinizi onaylayın. 
- Dışa aktarmayı yeniden etkinleştirmek için Crashlytics kaydırma çubuğunu hemen tekrar açın. İstendiğinde verileri dışa aktarmak istediğinizi onaylayın. - Crashlytics verilerinizin BigQuery konumuna dışa aktarılması artık yeni dışa aktarma altyapısı kullanılarak yapılıyor.