1. Giriş
Başlamadan önce bazı bilgiler
iOS uygulaması geliştiricisiyseniz iOS 14.5 ve sonraki sürümlerdeki gizlilik güncellemelerini duymuş olmalısınız. Yükleme sonrası anlamlı dönüşüm işlemlerini ölçmek için Apple, kullanıcı gizliliğini ihlal etmeden reklam kampanyalarınızın başarısını ölçmenize olanak tanıyan SKAd Network API'yi sunar. İşletmenizin ihtiyaçlarınıza göre, kampanyalarınız hakkında anlamlı analizler elde etmek için SKAdNetwork'ten yararlanmanın en uygun yolunu bulabilirsiniz. Bu codelab'de, uygulama yükleme sonrası geliri gruplar halinde gruplandırmak için BigQuery'de GA4F verilerinizden yararlanmaya yönelik örnek bir metodolojiyi inceleyeceğiz. Bu yöntemi daha sonra uygulama ilişkilendirme iş ortağınızla ayarlamak için kullanabilirsiniz. Bu codelab'de gelire dayalı bir yaklaşım kullanılsa da SKAN ölçümü için etkinlikler veya dönüşüm hunisi tabanlı yaklaşımlardan da yararlanabilirsiniz. Daha ayrıntılı bilgi edinmek için lütfen bu yardım merkezine bakın. Bu yalnızca bir örnektir ve Google'ın resmi önerisi değildir. Belirli iş ihtiyaçlarınıza göre kendi şemanızı tasarlayabilirsiniz
Değinmek istediğimiz konular
- BigQuery'de GA4F verilerini keşfedin
- 0-2 gün içinde dönüşüm gerçekleştiren kullanıcıların gelir verilerini bulma
- Gelir verilerini gruplar halinde gruplandırma
- Her bir paketteki kullanıcı dağılımını anlama
- Paketleri Appsflyer SKAN Conversion Studio'da uygulayın
Ön koşullar
- iOS uygulamanızda GA4F SDK'sı ve tüm gelir etkinlikleri entegre edilmiş olmalıdır (in_app_purchase veya reklam destekli gelir)
- Firebase'den BigQuery'ye aktarma etkin
- Tüm gelir etkinliklerini de kaydeden Uygulama İlişkilendirme Ortağı
2. BigQuery Export'a erişme
Google Cloud veri kümesine gitme
GA4F'de veri kümesine gitmek için Proje Ayarları > Entegrasyonlar > BigQuery'ye dokunun. Öncelikle anahtarın etkinleştirilmesi gerekir. Etkinleştirildikten sonra veri kümesinin kullanılabilir hale gelmesi yaklaşık 48 saat sürer. Aşağıda gösterilen bağlantıyı tıkladığınızda BigQuery'ye yönlendirilirsiniz
Bazı sorguları çalıştırma
Artık BigQuery'de olduğunuza göre, oluşturulan günlük tabloları göreceksiniz. Aşağıdaki örnek ekran görüntüsünde 64 günlük tablo olduğunu görüyoruz. Bu nedenle dışa aktarma işlemi 64 gündür çalışıyor. Rapora ilk kez erişiyorsanız önceki günün verileri için yalnızca 1 adet günlük tablo görebilirsiniz. Sağda tablo şemasını görürsünüz. Buradaki alanlarla ilgili daha fazla bilgiye ulaşabilirsiniz
Sorgunuzu yazmaya başlamak için Sorgu > Yeni sekmede
Ardından, örnek sorguyu yeni sekmede çalıştırmayı deneyebilirsiniz
3. Gelir verilerini analiz etme
Yükleme verileri getiriliyor
Gelir gruplarını oluşturmaya başlamak için öncelikle uygulamayı son 24 ila 72 saat içinde yükleyen kullanıcıların verilerine bakmamız gerekiyor. SKAdNetwork 4.0, verileri 0-2 gün içinde görüntülemenize olanak tanırken SKAdNetwork 3.5, varsayılan olarak 24 saat kullanmanıza olanak tanır. (Uygulama İlişkilendirme Ortağınızın özelliklerine bağlı olarak, bu etkinlik aralığını genel olarak 72 saatten fazla olmayacak şekilde değiştirebilirsiniz). Kullanıcılar uygulamayı yükleyip ilk kez açtığında first_open etkinliği SDK tarafından tetiklenir ve BigQuery'ye kaydedilir.
BigQuery için kullanabileceğiniz tanımlayıcı user_pseudo_id'dir (uygulama örneği kimliği olarak da adlandırılır). Bu kullanıcıları bulmak için aşağıdaki sorguyu kullanabilirsiniz
SELECT
user_pseudo_id,
event_name,
event_date,
event_timestamp
FROM `project_name.dataset_name.events_2023*`
WHERE
event_name = 'first_open'
AND platform = 'IOS'
Bu sorguyla ilgili dikkat edilmesi gereken bazı noktalar
- Lütfen tablo adını, Analytics'ten dışa aktarılan tablonuzla değiştirin. Birden fazla günlük tabloyu sorgulamak için joker karakterler kullanabilirsiniz. Örneğin, 2023* 2023'teki tüm verilerde sorgu oluşturur
- Çok sayıda kullanıcınız varsa daha hızlı işlemek için yalnızca son 30 günü de sorgulayabilirsiniz.
- "IOS" platformuna göre filtre uygularız. Firebase projenizde birden fazla iOS uygulaması varsa, belirli bir uygulamaya ait verileri almak için app_info.firebase_app_id için bir filtre de ekleyebilirsiniz.
Gelir verileri getiriliyor
Şimdi de kullanıcılarınızın gelirini bulmak için bir sorguya bakalım. Bu durumda, gelir etkinliklerinizin in_app_purchase ve ad_impression olduğunu varsayarız. in_app_purchase geliri, event_value_usd öğesinde, ad_impression için gelir ise etkinlik parametreleri içindeki value parametresinde bulunur. BigQuery'deki etkinlik parametrelerine aşina değilseniz buradaki tanımı kontrol etmenizi öneririz. Ayrıca, resmi referansmızda bu örnek sorguyu deneyebilirsiniz. Etkinlik, event_params değerinden değer ayıklama işlemini de kapsar.
SELECT
user_pseudo_id,
event_name,
EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
(
SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
FROM UNNEST(event_params)
WHERE
KEY = 'value'
AND event_name = 'ad_impression'
) AS ad_funded_revenue,
(
SELECT value.string_value
FROM UNNEST(event_params)
WHERE
KEY = 'currency'
AND event_name = 'ad_impression'
) AS ad_revenue_currency,
(
CASE
WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
ELSE 0
END) AS iap_revenue_usd,
FROM `project_name.dataset_name.events_2023*`
WHERE
platform = 'IOS'
AND event_name IN (
'in_app_purchase',
'ad_impression')
Şimdi sorgunun burada ne yaptığını anlayalım. Aşağıdakileri fark etmiş olursunuz:
- WHERE yan tümcesinde, yalnızca bunlarla ilgilendiğimizden gelir etkinlikleri için filtre uyguluyoruz ve geçen sefer olduğu gibi iOS verilerini arıyoruz.
- Şimdi, SELECT ifadesinde, reklam geliri etkinliğinin (ad_impression) değerini ve para birimini alıyoruz. Etkinlik in_app_purchase olduğunda event_value_in_usd parametresini alıyoruz
- Birden çok para birimi gönderiyorsanız, bu analiz için öncelikle tek bir para birimini ayarlamanız gerekir. Bu örneğin amacı doğrultusunda, reklam tarafından finanse edilen gelirin para biriminin de ABD doları olduğunu varsayacağız.
Çıkış, aşağıdakine benzer bir sonuç olur (user_pseudo_id sütunu burada çıkartılır).
Bu verileri birleştirme
Şimdiye kadar biri uygulamayı yükleyip açan kullanıcıların verilerini, diğeri de bu kullanıcıların gelirini bulmak için olmak üzere iki sorgu çalıştırıyoruz. Şimdi, SKAdNetwork ile ilgili sınırlamalar hakkında nelerden bahsettiğimizi hatırlayalım. İlişkilendirme dönemi, yalnızca yükleme işleminden sonraki 0-2 gün içinde kullanılabilir. Bu nedenle, yükleme ve gelire ilişkin etkinlik zaman damgalarını kontrol etmemiz ve yalnızca bu zaman aralığında gerçekleşirse bu bilgileri almamız gerekir. Şimdi de uygulamanın yüklenmesinin ardından iki günlük her yayın için toplam geliri sağlayan bir sorguda birleştirmeyi deneyelim.
#creating the install table
WITH
install_table AS (
SELECT
user_pseudo_id,
event_name,
event_date,
event_timestamp
FROM `project_name.dataset_name.events_2023*`
WHERE
event_name = 'first_open'
AND platform = 'IOS'
),
#creating the revenue table
revenue_table AS (
SELECT
user_pseudo_id,
event_name,
event_timestamp,
EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
(
SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
FROM UNNEST(event_params)
WHERE
KEY = 'value'
AND event_name = 'ad_impression'
) AS ad_funded_revenue,
(
SELECT value.string_value
FROM UNNEST(event_params)
WHERE
KEY = 'currency'
AND event_name = 'ad_impression'
) AS ad_revenue_currency,
(
CASE
WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
ELSE 0
END) AS iap_revenue_usd,
FROM `project_name.dataset_name.events_2023*`
WHERE
platform = 'IOS'
AND event_name IN (
'in_app_purchase',
'ad_impression')
)
SELECT
it.user_pseudo_id AS user_pseudo_id,
#combine ad revenue and IAP revenue, assuming both are in same currency
sum(ifnull(rt.iap_revenue_usd,0) + ifnull(rt.ad_funded_revenue,0)) AS total_revenue,
FROM install_table it
INNER JOIN revenue_table rt
ON it.user_pseudo_id = rt.user_pseudo_id
WHERE
rt.event_timestamp >= it.event_timestamp
AND rt.event_timestamp
<= it.event_timestamp + 86400000000 * 2 #added 86400 000 millisecond as 24 hours, taking for 2 days later
GROUP BY 1
Sorgu yalnızca yükleme verilerini ve gelir verilerini user_pseudo_id alanında birleştirmeye çalışır. Sonrasında zaman damgasının 2 gün içinde olduğundan emin olmamız gerekir. SKAdNetwork 3.5'i kullanıyorsanız varsayılan değer 24 saattir. Böylece, koşulu yalnızca 1 günün verilerini içerecek şekilde değiştirebilirsiniz
Geliri gruplar halinde gruplandırma
Önceki sorgudan sonra, user_pseudo_id değerini ve toplam geliri elde edersiniz.
Şimdi, bu verileri dönüşüm değeri aralıklarımızda kullanabileceğimiz gruplarda birleştirmemiz gerekecek. Bu amaçla, BigQuery'de bu aralıkları sizin için otomatik olarak oluşturan approx_quantiles işlevini kullanacağız. Bu örneğin amaçları doğrultusunda 5 aralık oluşturmak istediğimizi varsayalım. Bu nedenle yalnızca SELECT approx_quantiles(total_revenue, 5) AS paketlerini kullanabiliriz.
Bunu genel sorgumuza ekleyelim.
#creating the install table
WITH
install_table AS (
SELECT
user_pseudo_id,
event_name,
event_date,
event_timestamp
FROM `project_name.dataset_name.events_2023*`
WHERE
event_name = 'first_open'
AND platform = 'IOS'
),
#creating the revenue table
revenue_table AS (
SELECT
user_pseudo_id,
event_name,
event_timestamp,
EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
(
SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
FROM UNNEST(event_params)
WHERE
KEY = 'value'
AND event_name = 'ad_impression'
) AS ad_funded_revenue,
(
SELECT value.string_value
FROM UNNEST(event_params)
WHERE
KEY = 'currency'
AND event_name = 'ad_impression'
) AS ad_revenue_currency,
(
CASE
WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
ELSE 0
END) AS iap_revenue_usd,
FROM `project_name.dataset_name.events_2023*`
WHERE
platform = 'IOS'
AND event_name IN (
'in_app_purchase',
'ad_impression')
),
total_revenue_table AS (
SELECT
it.user_pseudo_id AS user_pseudo_id,
#combine ad revenue and IAP revenue, assuming both are in same currency
sum(ifnull(rt.iap_revenue_usd,0) + ifnull(rt.ad_funded_revenue,0)) AS total_revenue,
FROM install_table it
INNER JOIN revenue_table rt
ON it.user_pseudo_id = rt.user_pseudo_id
WHERE
rt.event_timestamp >= it.event_timestamp
AND rt.event_timestamp
<= it.event_timestamp + 86400000000 * 2 #added 86400 000 millisecond as 24 hours
GROUP BY 1
)
SELECT approx_quantiles(total_revenue, 5) AS buckets FROM total_revenue_table
Bu sorgu, geliri 5 pakete böler ve BigQuery, tutarlı bir yüzdelik dağılım sağlamaya çalışır.
Bu gruplarla kullanıcı dağılımını analiz etme
Her bir gruptaki kullanıcılarınızın dağılımını öğrenmek istiyorsanız bu adım isteğe bağlı bir adımdır. Örneğimizde, önceki sorguda döndürülen paket aralıkları şunlardır:
- 0,1
- 0.5
- 2
- 2.5
- 5 [aralık yapılandırmasında son değer kullanılmamalıdır]
Son aralıklar için, son aralık 5'i göz ardı edeceğiz.Çünkü bu genellikle maksimum değerdir ve 2,5'i son aralık olarak kabul edebiliriz. Bunun nedeni, uygulama ilişkilendirme sağlayıcıların ROAS'ı aralığın ortalamasını kullanarak hesaplama eğiliminde olmasıdır. Bu nedenle, daha tek tip hesaplama için aykırı değerin hariç tutulması gerekir.
Şimdi, her bir gruptaki günlük kullanıcı hacmini anlayabilmek amacıyla, tüm aralıklardaki her tarih için kullanıcı sayısına bakmaya çalışacağız. Bunu, grup değerlerini gerçek verilerinizle değiştirebileceğiniz bu örnek sorguyu kullanarak yapabiliriz.
#creating the install table
WITH
install_table AS (
SELECT
user_pseudo_id,
event_name,
event_date,
event_timestamp
FROM `project_name.dataset_name.events_2023*`
WHERE
event_name = 'first_open'
AND platform = 'IOS'
),
#creating the revenue table
revenue_table AS (
SELECT
user_pseudo_id,
event_name,
event_timestamp,
EXTRACT(date FROM Parse_datetime('%Y%m%d', event_date)) AS event_date,
(
SELECT COALESCE(value.int_value, value.float_value, value.double_value, NULL)
FROM UNNEST(event_params)
WHERE
KEY = 'value'
AND event_name = 'ad_impression'
) AS ad_funded_revenue,
(
SELECT value.string_value
FROM UNNEST(event_params)
WHERE
KEY = 'currency'
AND event_name = 'ad_impression'
) AS ad_revenue_currency,
(
CASE
WHEN event_name = 'in_app_purchase' THEN event_value_in_usd
ELSE 0
END) AS iap_revenue_usd,
FROM `project_name.dataset_name.events_2023*`
WHERE
platform = 'IOS'
AND event_name IN (
'in_app_purchase',
'ad_impression')
),
total_revenue_table AS (
SELECT
it.user_pseudo_id AS user_pseudo_id,
rt.event_date,
#combine ad revenue and IAP revenue, assuming both are in same currency
sum(ifnull(rt.iap_revenue_usd,0) + ifnull(rt.ad_funded_revenue,0)) AS total_revenue,
FROM install_table it
INNER JOIN revenue_table rt
ON it.user_pseudo_id = rt.user_pseudo_id
WHERE
rt.event_timestamp >= it.event_timestamp
AND rt.event_timestamp
<= it.event_timestamp + 86400000000 * 2 #added 86400 000 millisecond as 24 hours
GROUP BY 1, 2
)
SELECT
event_date,
sum(CASE WHEN total_revenue BETWEEN 0 AND 0.1 THEN 1 ELSE 0 END) AS Bucket1,
sum(CASE WHEN total_revenue BETWEEN 0.1 AND 0.5 THEN 1 ELSE 0 END) AS Bucket2,
sum(CASE WHEN total_revenue BETWEEN 0.5 AND 2 THEN 1 ELSE 0 END) AS Bucket3,
sum(CASE WHEN total_revenue BETWEEN 2 AND 2.5 THEN 1 ELSE 0 END) AS Bucket4,
sum(CASE WHEN total_revenue > 2.5 THEN 1 ELSE 0 END) AS Bucket5
FROM total_revenue_table
GROUP BY 1 ORDER BY 1 DESC
Aşağıdaki gibi her gün için her bir gelir aralığındaki kullanıcıları döndürür. Herhangi bir pakette çok düşük sayılar veya genel olarak eşit olmayan bir dağılım görürseniz grup sayısını ayarlamak ve sorguyu yeniden çalıştırmak isteyebilirsiniz.
SKAd Network 4.0 hakkında kısa bilgiler
SKAd Network 4.0 ; 2 gün, 3-7 gün ve 8-35 güne kadar birden çok dönüşüm aralığı sunar. Yukarıdaki yaklaşımda, bu ek senaryolar için verileri analiz etmek üzere pencereyi de kolayca değiştirebilirsiniz. DÜŞÜK, ORTA ve YÜKSEK büyük ayrıntılı değerleri de mevcuttur. Bu yaklaşımı tekrar kullanmak istiyorsanız bunu 3 grup olarak düşünebilirsiniz. Yani, bölüm sayısını 3 olarak değiştirerek, DÜŞÜK, ORTA ve YÜKSEK için de eşikleri elde edebilirsiniz
4. İlişkilendirme sağlayıcınızla dağıtım
İlgili platforma bağlı olarak bu bilgiler değişebilir. Bu konuda en güncel bilgiler için lütfen platform temsilcileriyle birlikte çalışın. Bu örneğin amacı doğrultusunda, şu anda AppsFlyer'da bunu nasıl dağıtabileceğimize bakacağız.
Daha önce çalıştırdığımız sorguda, çıkış olarak aldığımız son aralıklar aşağıdaki gibiydi
- Aralık 1 : 0-0,1
- Aralık 2 : 0,1-0,5
- Aralık 3 : 0,5-2
- Aralık 4 : 2 - 2,5
Aykırı bir değer olacağı ve uygulama ilişkilendirme sağlayıcınızın ortalama hesaplamalarını çarpıtacağı için son gelir aralığını yoksaymaya karar verdiğimizi unutmayın.
AppsFlyer, bunun doğrudan kullanıcı arayüzüne girilmesi son derece basit olan SKAN Conversion Studio'yu sunar. 4.0'ı doğrudan veya "Özel"i kullanabilirsiniz modu seçin ve "Gelir" metriğini ekleyin bahsedeceğim. Ardından, önceki analizde hesapladığınız gelir aralıklarını eklemeniz yeterlidir.
Google Ads ile İlgili En İyi Uygulamalar ve Dersler
Google Ads'de kampanya yayınlıyor ve etkiyi SKAdNetwork dönüşüm değeri şeması aracılığıyla ölçüyorsanız size bazı önerilerde bulunmak isteriz
- Google Ads'de kullandığınız dönüşüm aralığının, Uygulama İlişkilendirme platformunuzda belirttiğiniz etkinlik aralığıyla eşleştiğinden emin olun. SKAd ağı 3.5 için bu genellikle 1-3 gün sürer. Bu nedenle, burada listelenen adımları uygulayarak Google Ads'de bunu uygun şekilde ayarlayabilirsiniz.
- Appsflyer kullanıyorsanız şu anda varsayılan etkinlik sayacı 1'dir. Diğer bir deyişle, kullanıcı başına birden fazla etkinliği hesaba katmaz. SKAN ölçümü için etkinliğe dayalı bir model kullanıyor ve Google Ads'deki hedef EBM kampanyalarıyla karşılaştırma yapıyorsanız Appsflyer'ın bu kılavuzundan yararlanarak özelleştirmeyi seçebilirsiniz.
5. Tebrikler
Tebrikler, SKAdNetwork Dönüşüm değeri şemanızı başarıyla oluşturdunuz. Artık Google Ads SKAdNetwork raporunuzdaki verileri izleyerek Google Ads kampanyalarınızın dönüşüm değerlerini kontrol edebilirsiniz.
Neler öğrendiniz?
- BigQuery'de GA4F'deki zengin ham verileri keşfetme
- İşletmenizin gelir gruplarını hesaplamaya yönelik analitik yaklaşım
- Şemayı AppsFlyer ile dağıtma