لمحة عن هذا الدرس التطبيقي حول الترميز
1. مقدمة
بعض السياقات قبل البدء
إذا كنت مطوّر تطبيقات iOS، من المفترض أنّك سمعت عن تحديثات الخصوصية لنظام التشغيل iOS 14.5 أو الإصدارات الأحدث. ولقياس إجراءات الإحالات الناجحة المفيدة بعد التثبيت، توفّر Apple واجهة برمجة تطبيقات SKAd Network API التي تتيح لك قياس مدى نجاح حملاتك الإعلانية مع احترام خصوصية المستخدم. واستنادًا إلى احتياجات نشاطك التجاري، يمكنك التوصّل إلى أفضل طريقة للاستفادة من "شبكة إعلانات SKAd" للحصول على إحصاءات مفيدة عن حملاتك. في هذا الدرس التطبيقي حول الترميز، ندرس منهجية للاستفادة من بيانات "إحصاءات Google لبرنامج Firebase" (GA4F) في BigQuery لتجميع الأرباح بعد تثبيت التطبيق في حِزم يمكنك استخدامها لإعدادها من خلال شريك إحالة التطبيقات. مع أنّ هذا الدرس التطبيقي حول الترميز يستخدم منهجًا قائمًا على الأرباح، يمكنك أيضًا استخدام الأساليب المستندة إلى الأحداث أو مسار الإحالة الناجحة لقياس SKAN. يُرجى الرجوع إلى مركز المساعدة هذا للحصول على إرشادات أكثر تفصيلاً. هذا مثال فقط، وليس اقتراحًا رسميًا من Google. يمكنك تصميم المخطّط الخاص بك استنادًا إلى احتياجات نشاطك التجاري المحدّدة.
الجوانب التي نعتزم تناولها
- استكشاف بيانات "إحصاءات Google لبرنامج Firebase" (GA4F) في BigQuery
- الاطّلاع على بيانات الأرباح للمستخدمين الذين أجروا إحالات ناجحة في غضون يوم أو يومَين
- تجميع بيانات الأرباح في مجموعات
- فهم توزيع المستخدمين في كل مجموعة
- تنفيذ الحِزم في Appsflyer SKAN Conversion Studio
المتطلبات الأساسية
- حزمة تطوير البرامج (SDK) الخاصة بإصدار "إحصاءات Google لبرنامج Firebase" في تطبيق iOS، وجميع أحداث الأرباح المُدمَجة (in_app_purchase أو الأرباح المموَّلة من الإعلانات)
- تم تفعيل عمليات التصدير من Firebase إلى BigQuery
- شريك إحالة التطبيقات، الذي يسجِّل أيضًا جميع أحداث الأرباح
2. الوصول إلى BigQuery Export
انتقِل إلى مجموعة بيانات Google Cloud.
انتقِل إلى مجموعة البيانات في "إحصاءات Google لبرنامج Firebase" من خلال الانتقال إلى إعدادات المشروع >. عمليات الدمج > BigQuery. يجب تفعيل مفتاح التبديل أولاً، وبعد تفعيله، يستغرق توفّر مجموعة البيانات حوالي 48 ساعة. يمكنك النقر فوق الرابط الموضح أدناه وسينقلك إلى BigQuery
تنفيذ بعض طلبات البحث
الآن بعد أن أصبحت في BigQuery، يُفترض أن ترى الجداول اليومية التي تم إنشاؤها. في لقطة الشاشة المثالية أدناه، يظهر لنا 64 جدولاً يوميًا، وبالتالي يستمر التصدير لمدة 64 يومًا. إذا كنت تصل إليه لأول مرة، فقد ترى جدولاً يوميًا واحدًا فقط لبيانات اليوم السابق. على يسار الصفحة، يمكنك الاطّلاع على مخطط الجدول. يمكنك الاطّلاع على المزيد من التفاصيل حول الحقول هنا.
لبدء كتابة الاستعلام، يمكنك النقر فوق Query > في علامة تبويب جديدة
يمكنك بعد ذلك محاولة تشغيل نموذج الاستعلام في علامة التبويب الجديدة
3. تحليل بيانات الأرباح
جلب بيانات التثبيت
الآن لبدء إنشاء مجموعات بيانات الأرباح، علينا إلقاء نظرة أولاً على بيانات المستخدمين الذين ثبَّتوا في التطبيق خلال آخر 24 إلى 72 ساعة. تتيح لك شبكة SKAd Network 4.0 عرض البيانات خلال يوم واحد أو يومَين، في حين توفّر شبكة SKAd Network 3.5 مدة 24 ساعة تلقائيًا. (استنادًا إلى إمكانات شريك إحالة التطبيقات، قد تتمكن من تعديل فترة النشاط هذه بشكل عام لتصبح لا تزيد عن 72 ساعة). عندما يثبّت المستخدمون التطبيق ويفتحونه لأول مرة، يتم تنشيط حدث 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'
في ما يلي بعض الملاحظات حول طلب البحث هذا
- يُرجى استبدال اسم الجدول بالجدول الذي تم تصديره في "إحصاءات Google". يمكنك استخدام أحرف البدل لطلب جداول يومية متعدّدة. على سبيل المثال، سيتم إجراء طلب بحث في عام 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)، ونستخدِم event_value_in_usd عندما يكون الحدث in_app_purchase
- إذا كنت ترسل عملات متعددة، فستحتاج أولاً إلى التوافق مع عملة واحدة لهذا التحليل. لأغراض هذا المثال، نفترض أن عملة الأرباح المموّلة من الإعلانات هي أيضًا الدولار الأمريكي
ستظهر المخرجات على النحو الموضّح أدناه (تم إخفاء عمود user_pseudo_id هنا).
دمج هذه البيانات
حتى الآن، أجرينا طلبين، أحدهما للعثور على بيانات المستخدمين الذين ثبَّتوا التطبيق وفتحوه، والآخر لمعرفة أرباح هؤلاء المستخدمين. والآن، لنتذكر ما ناقشناه حول قيود شبكة إعلانات SKAd. تتوفّر فترة تحديد المصدر فقط خلال مدة تتراوح بين يوم ويومَين بعد التثبيت. وبالتالي، سنحتاج إلى التحقّق من الطوابع الزمنية للأحداث الخاصة بالتثبيت والأرباح، وعدم تلقّي المعلومات إلّا إذا حدثت خلال ذلك الإطار الزمني. لنأخذ لقطة الآن للدمج في استعلام يوفر إجمالي الإيرادات لكل مشاركة لمدة يومين من تثبيت التطبيق
#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، وبعد ذلك يجب التأكّد من وصول الطابع الزمني خلال يومَين. إذا كنت تستخدم الإصدار 3.5 من شبكة إعلانات SKAd Network، تكون القيمة التلقائية هي 24 ساعة، لذا يمكنك أيضًا تغيير الشرط لتضمين بيانات يوم واحد فقط.
تجميع الأرباح في حِزم
بعد الاستعلام السابق، سيكون لديك user_pseudo_id وإجمالي الإيرادات
سنحتاج الآن إلى دمج هذا القيم في مجموعات يمكننا استخدامها لنطاقات قيم الإحالات الناجحة الخاصة بنا. لهذا الغرض، سنستخدم الدالة approx_quantiles في BigQuery التي تنشئ هذه النطاقات تلقائيًا بالنيابة عنك. لنفترض لأغراض هذا المثال أننا نريد إنشاء 5 نطاقات، ولذلك يمكننا استخدام SELECT approx_quantiles(total_revenue, 5) AS مجموعات فقط
بذلك، دعنا ندمج هذا في استعلامنا العام
#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 فقط هي النطاق الأخير. ويرجع ذلك إلى أنّ مقدّمي إحالات التطبيقات يميلون إلى حساب عائد الإنفاق الإعلاني باستخدام متوسط النطاق، لذا يجب استبعاد القيمة الاستثنائية لإجراء عمليات حسابية أكثر توحيدًا.
سنحاول الآن النظر في عدد المستخدمين لكل تاريخ على مستوى جميع النطاقات، حتى نتمكن من فهم الحجم اليومي للمستخدمين في كل مجموعة.يمكننا إجراء ذلك باستخدام نموذج طلب البحث هذا، حيث يمكنك استبدال قيم الحزمة ببياناتك الفعلية، وسيظهر طلب البحث على النحو التالي
#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 فترات إحالة ناجحة متعدّدة تصل مدتها إلى يومَين و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، حيث يمكن إدخالها مباشرةً في واجهة المستخدم بكل سهولة. يمكنك إما استخدام الإصدار 4.0 مباشرةً أو استخدام "مخصّص" إذا كنت تستخدم 3.5، وأضف "الأرباح" القياس. يمكنك بعد ذلك إضافة نطاقات الأرباح التي حسبتها من التحليل السابق.
أفضل الممارسات والدروس المستفادة من "إعلانات Google"
نودّ أن نقدّم لك بعض الاقتراحات في حال عرض حملات على "إعلانات Google" وقياس التأثير من خلال مخطّط قيمة الإحالة الناجحة على شبكة إعلانات SKAd
- تأكّد من أن فترة الإحالة الناجحة التي تستخدِمها على "إعلانات Google" تتطابق مع فترة النشاط التي حدّدتها على منصّة إحالة التطبيقات. وبالنسبة إلى الإصدار 3.5 من شبكة SKAd، من المرجّح أن يستغرق ذلك من يوم إلى 3 أيام، لذا يمكنك تعديله وفقًا لذلك في "إعلانات Google" باتّباع الخطوات المذكورة هنا.
- في حال استخدام Appsflyer، يتم حاليًا ضبط عدّاد الأحداث التلقائي على 1، ما يعني أنّه لا يحتسب أحداثًا متعددة لكل مستخدم. إذا كنت تستخدِم نموذجًا مستندًا إلى الأحداث لقياس SKAN ومقارنته بحملات التكلفة المستهدفة للإجراء على "إعلانات Google"، يمكنك اختيار التخصيص من خلال اتّباع هذه الإرشادات من Appsflyer.
5. تهانينا
تهانينا، لقد أعددت مخطط قيمة الإحالة الناجحة على شبكة إعلانات SKAd بنجاح. يمكنك الآن مراقبة البيانات في تقرير "شبكة إعلانات Google" للاطّلاع على قيم الإحالات الناجحة لحملاتك على "إعلانات Google" بعد نشرها.
لقد تعلمت
- كيفية استكشاف البيانات الأولية الغنية بصريًا من "إحصاءات Google لبرنامج Firebase" (GA4F) في BigQuery
- منهج تحليلي لحساب مجموعات الأرباح لنشاطك التجاري
- نشر المخطط باستخدام AppsFlyer