1. مقدمه
برخی از زمینه ها قبل از شروع
اگر توسعهدهنده برنامه iOS هستید، حتماً درباره بهروزرسانیهای حریم خصوصی iOS 14.5+ شنیدهاید. برای اندازهگیری اقدامات تبدیل معنیدار پس از نصب، اپل API شبکه SKAd را ارائه میکند که به شما امکان میدهد ضمن رعایت حریم خصوصی کاربر، موفقیت کمپینهای تبلیغاتی خود را اندازهگیری کنید. بر اساس نیازهای کسب و کار خود، می توانید بهینه ترین راه را برای استفاده از شبکه SKAd برای بدست آوردن بینش معنی دار در مورد کمپین های خود ارائه دهید. در این نرمافزار، یک روش نمونه را بررسی میکنیم تا از دادههای GA4F شما در BigQuery استفاده کنیم تا نصب درآمد پس از برنامه را در سطلهایی گروهبندی کنیم، که سپس میتوانید از آن برای تنظیم با شریک اسناد برنامه خود استفاده کنید. در حالی که این آزمایشگاه کد از یک رویکرد مبتنی بر درآمد استفاده می کند، شما همچنین می توانید از رویدادها یا رویکردهای مبتنی بر قیف برای اندازه گیری SKAN استفاده کنید. لطفاً برای راهنمایی دقیق تر به این مرکز راهنمایی مراجعه کنید. این فقط یک مثال است، نه یک توصیه رسمی Google . شما می توانید طرحواره خود را بر اساس نیازهای تجاری خاص خود طراحی کنید
آنچه را که قصد پوشش آن را داریم
- داده های GA4F را در BigQuery کاوش کنید
- دادههای درآمد را برای کاربرانی که ظرف ۰ تا ۲ روز تبدیل کردهاند، پیدا کنید
- داده های درآمد را در سطل ها گروه بندی کنید
- توزیع کاربر در هر سطل را درک کنید
- سطل ها را در Appsflyer SKAN Conversion Studio پیاده سازی کنید
پیش نیازها
- GA4F SDK در برنامه iOS شما، و همه رویدادهای درآمدی یکپارچه (in_app_purchase یا درآمد حاصل از تبلیغات )
- صادرات Firebase به BigQuery فعال شد
- App Attribution Partner، که همچنین در حال ثبت همه رویدادهای درآمدی است
2. دسترسی به BigQuery Export
به Google Cloud Dataset بروید
با مراجعه به Project Settings > Integrations > BigQuery به مجموعه داده در GA4F بروید. ضامن باید ابتدا فعال شود و پس از فعال شدن، حدود 48 ساعت طول می کشد تا مجموعه داده در دسترس باشد. می توانید روی لینک زیر کلیک کنید و شما را به BigQuery می برد
چند پرس و جو را اجرا کنید
اکنون که در BigQuery هستید، باید جداول روزانه تولید شده را ببینید. در تصویر مثال زیر، 64 جدول روزانه را می بینیم، بنابراین صادرات به مدت 64 روز اجرا شده است. اگر برای اولین بار به آن دسترسی دارید، ممکن است فقط ۱ جدول روزانه برای داده های روز قبل ببینید. در سمت راست، طرح جدول را مشاهده می کنید. در اینجا می توانید به جزئیات بیشتر فیلدها مراجعه کنید
برای شروع نوشتن درخواست خود، می توانید روی Query > In New Tab کلیک کنید
سپس می توانید نمونه پرس و جو را در تب جدید اجرا کنید
3. داده های درآمد را تجزیه و تحلیل کنید
در حال واکشی داده های نصب
اکنون برای شروع ساخت سطل های درآمدی، ابتدا باید به داده های کاربرانی که در 24 تا 72 ساعت گذشته در برنامه نصب کرده اند نگاه کنیم. SKAd Network 4.0 به شما امکان می دهد داده ها را در 0-2 روز مشاهده کنید، در حالی که SKAd Network 3.5 به طور پیش فرض اجازه 24 ساعت را می دهد. (بسته به قابلیت های App Attribution Partner شما، ممکن است بتوانید این پنجره فعالیت را به طور کلی به حداکثر ۷۲ ساعت تغییر دهید). هنگامی که کاربران برنامه را نصب می کنند و برای اولین بار آن را باز می کنند، رویداد first_open توسط SDK فعال می شود و در BigQuery ثبت می شود.
شناسهای که میتوانید برای BigQuery استفاده کنید user_pseudo_id است (شناسه نمونه برنامه نیز نامیده میشود)، بنابراین میتوانید از عبارت زیر برای یافتن این کاربران استفاده کنید.
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'
چند نکته در مورد این پرس و جو باید توجه داشت
- لطفاً نام جدول را با جدول صادر شده Analytics خود جایگزین کنید. شما می توانید از حروف عام برای پرس و جو از چندین جدول روزانه استفاده کنید. به عنوان مثال، 2023* در سال 2023 همه داده ها را پرس و جو می کند
- اگر کاربران زیادی دارید، میتوانید فقط 30 روز گذشته را برای پردازش سریعتر پرس و جو کنید
- ما روی پلتفرم = 'IOS' فیلتر می کنیم. اگر چندین برنامه iOS در پروژه Firebase خود دارید، میتوانید فیلتری برای app_info.firebase_app_id اضافه کنید تا دادههای مربوط به برنامه خاص را دریافت کنید.
واکشی داده های درآمد
اکنون، بیایید به یک پرس و جو نگاه کنیم تا درآمد کاربران خود را پیدا کنیم. در این مورد، ما فرض می کنیم که رویدادهای درآمدی شما in_app_purchase و ad_impression هستند. درآمد حاصل از in_app_purchase در event_value_usd در دسترس است، در حالی که برای ad_impression، درآمد در پارامتر ارزش، در پارامترهای رویداد در دسترس است. اگر با پارامترهای رویداد در BigQuery آشنا نیستید، توصیه میکنیم تعریف را در اینجا بررسی کنید، و میتوانید این پرس و جو نمونه را در مرجع رسمی ما امتحان کنید ، که استخراج مقدار از event_params را نیز پوشش میدهد.
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')
بیایید بفهمیم که پرس و جو در اینجا چه می کند. اینها چیزهایی هستند که متوجه خواهید شد
- در بند WHERE، ما در حال فیلتر کردن رویدادهای درآمدی هستیم، زیرا فقط به آنها علاقه مندیم و مانند دفعه قبل، به دنبال داده های iOS هستیم.
- اکنون، در بند SELECT، ارزش و همچنین واحد پول رویداد درآمد تبلیغات (ad_impression) را می گیریم، و زمانی که رویداد in_app_purchase است، event_value_in_usd را می گیریم.
- اگر چندین ارز ارسال می کنید، ابتدا باید برای این تجزیه و تحلیل با یک ارز واحد هماهنگ شوید. برای اهداف این مثال، ما فرض میکنیم که ارز برای درآمد حاصل از تبلیغات نیز USD است
خروجی چیزی شبیه به زیر خواهد بود (ستون user_pseudo_id در اینجا ویرایش شده است).
ترکیب این داده ها
تا به حال، دو پرس و جو انجام داده ایم، یکی برای یافتن داده های کاربرانی که برنامه را نصب و باز کرده اند، و دیگری برای یافتن درآمد آن کاربران. اکنون، بیایید آنچه را که در مورد محدودیت های شبکه SKAd بحث کردیم را به یاد بیاوریم. پنجره انتساب فقط ظرف 0-2 روز پس از نصب در دسترس است. بنابراین، ما باید مهرهای زمانی رویداد را برای نصب و درآمد بررسی کنیم، و فقط در صورتی که در آن محدوده زمانی اتفاق بیفتد، اطلاعات را دریافت کنیم. اکنون بیایید یک عکس ترکیبی در یک جستار بیاندازیم که کل درآمد را برای هر پست دو روز نصب برنامه ارائه می کند.
#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
پرس و جو فقط سعی می کند داده های نصب و داده های درآمد را در قسمت user_pseudo_id بپیوندد، و سپس باید اطمینان حاصل کنیم که مهر زمانی ظرف 2 روز است. اگر از SKAd Network 3.5 استفاده میکنید، پیشفرض 24 ساعت است، بنابراین میتوانید شرایط را به گونهای تغییر دهید که فقط دادههای 1 روز را شامل شود.
گروه بندی درآمد به سطل
پس از پرس و جو قبلی، user_pseudo_id و کل درآمد را خواهید داشت
اکنون باید این را در سطل هایی ترکیب کنیم که بتوانیم برای محدوده ارزش تبدیل خود استفاده کنیم. برای این منظور از تابع approx_quantiles در BigQuery استفاده می کنیم که به طور خودکار این محدوده ها را برای شما ایجاد می کند. بیایید برای اهداف این مثال فرض کنیم که میخواهیم 5 محدوده ایجاد کنیم، بنابراین میتوانیم از سطل AS SELECT approx_quantiles (total_revenue, 5) استفاده کنیم.
با آن، بیایید این را در پرس و جوی کلی خود بگنجانیم
#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
این پرس و جو باید درآمد را به 5 سطل تقسیم کند و BigQuery سعی می کند توزیع صدکی ثابتی را حفظ کند.
توزیع کاربر را با این سطل ها تجزیه و تحلیل کنید
اگر می خواهید توزیع کاربران خود را در هر سطل درک کنید، این یک مرحله اختیاری است. برای مثال ما، محدوده های سطلی که در پرس و جو قبلی بازگردانده شده اند، هستند
- 0.1
- 0.5
- 2
- 2.5
- 5 [آخرین مقدار نباید در پیکربندی محدوده استفاده شود]
برای محدودههای نهایی، آخرین سطل 5 را نادیده میگیریم، زیرا معمولاً حداکثر مقدار است، و فقط میتوانیم 2.5 را آخرین محدوده در نظر بگیریم. این به این دلیل است که ارائهدهندگان اسناد برنامه تمایل دارند ROAS را با استفاده از میانگین محدوده محاسبه کنند، بنابراین برای محاسبه یکنواختتر، باید خروجی را حذف کرد.
اکنون سعی خواهیم کرد به تعداد کاربران برای هر تاریخ در همه محدوده ها نگاه کنیم تا بتوانیم حجم روزانه کاربران در هر سطل را درک کنیم. ما می توانیم این کار را با استفاده از این پرس و جو نمونه انجام دهیم، جایی که می توانید مقادیر سطل را با مقادیر جایگزین کنید. داده های واقعی شما، و پرس و جو چیزی شبیه به این خواهد بود
#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
مانند زیر، کاربران را در هر بازه درآمدی برای هر روز برمی گرداند. اگر اعداد بسیار کم را در هر سطل یا توزیع به طور کلی ناهموار می بینید، ممکن است بخواهید تعداد سطل ها را تنظیم کرده و پرس و جو را دوباره اجرا کنید.
یک کلمه کوتاه در مورد SKAd Network 4.0
SKAd Network 4.0 پنجره های تبدیل متعددی را تا 2 روز، 3-7 روز و 8-35 روز ارائه می دهد. در رویکرد بالا، میتوانید به راحتی پنجره را برای تجزیه و تحلیل دادهها برای این سناریوهای اضافی نیز تغییر دهید. مقادیر دانه درشت LOW، MEDIUM و HIGH نیز موجود است. باز هم، اگر می خواهید از این روش استفاده کنید، می توانید آن را به عنوان 3 سطل در نظر بگیرید، بنابراین، با تغییر تعداد سطل ها به 3، می توانید آستانه های LOW، MEDIUM و HIGH را بدست آورید.
4. استقرار با ارائه دهنده اسناد شما
بسته به پلتفرم خاص، این راهنمایی ممکن است تغییر کند. لطفا با نمایندگان پلت فرم برای به روزترین اطلاعات در این زمینه همکاری کنید. برای اهداف این مثال، ما به نحوه استقرار آن در AppsFlyer نگاه خواهیم کرد
در پرس و جوی که قبلا اجرا کردیم، محدوده نهایی که به عنوان خروجی دریافت کردیم به صورت زیر بود
- محدوده 1: 0 تا 0.1
- محدوده 2: 0.1 تا 0.5
- محدوده 3: 0.5 تا 2
- محدوده 4: 2 تا 2.5
به یاد داشته باشید که ما تصمیم گرفتیم از آخرین بازه درآمد نادیده بگیریم ، زیرا این محدوده دور از دسترس خواهد بود، و میانگین محاسبات را برای ارائه دهنده اسناد برنامه شما تغییر دهیم.
AppsFlyer SKAN Conversion Studio را ارائه می دهد که در آن وارد کردن مستقیم آن به رابط کاربری بسیار ساده است. اگر از 3.5 استفاده می کنید می توانید مستقیماً از 4.0 استفاده کنید یا از حالت "Custom" استفاده کنید و اندازه گیری "درآمد" را اضافه کنید. سپس فقط می توانید محدوده های درآمدی را که از تجزیه و تحلیل قبلی محاسبه کرده اید، اضافه کنید.
بهترین روش ها و یادگیری ها در تبلیغات گوگل
اگر کمپینهایی را در Google Ads اجرا میکنید و تأثیر آن را از طریق طرح ارزش تبدیل شبکه SKAd اندازهگیری میکنید، میخواهیم توصیههایی به شما ارائه دهیم.
- مطمئن شوید که پنجره تبدیلی که در Google Ads استفاده می کنید با پنجره فعالیتی که در پلتفرم App Attribution خود مشخص کرده اید مطابقت داشته باشد. برای شبکه SKAd 3.5، این احتمالاً ظرف 1 تا 3 روز خواهد بود، بنابراین میتوانید با دنبال کردن مراحل ذکر شده در اینجا، آن را بر اساس آن در Google Ads تنظیم کنید.
- اگر از Appsflyer استفاده میکنید، در حال حاضر شمارنده رویداد پیشفرض 1 است، به این معنی که چندین رویداد را برای هر کاربر در نظر نمیگیرد. اگر از یک مدل مبتنی بر رویداد برای اندازهگیری SKAN و مقایسه با کمپینهای tCPA در Google Ads استفاده میکنید، میتوانید با پیروی از این دستورالعمل از Appsflyer سفارشیسازی کنید.
5. تبریک می گویم
تبریک میگوییم، شما با موفقیت طرح ارزش تبدیل شبکه SKAd خود را تنظیم کردید. اکنون میتوانید دادههای موجود در گزارش Google Ads SKAd Network خود را برای بررسی مقادیر تبدیل برای کمپینهای Google Ads خود به محض اینکه این گزارش فعال شد، بررسی کنید.
تو یاد گرفتی
- نحوه کاوش داده های خام غنی از GA4F در BigQuery
- رویکرد تحلیلی برای محاسبه سطل درآمد برای کسب و کار شما
- طرح را با AppsFlyer اجرا کنید