1. Giới thiệu
Một số thông tin cơ bản trước khi chúng ta bắt đầu
Nếu là nhà phát triển ứng dụng iOS, chắc hẳn bạn đã nghe nói về các nội dung cập nhật về quyền riêng tư trên iOS 14.5 trở lên. Để đo lường những hành động chuyển đổi có ý nghĩa sau khi cài đặt, Apple cung cấp SKAd Network API. API này cho phép bạn đo lường mức độ thành công của chiến dịch quảng cáo trong khi vẫn tôn trọng quyền riêng tư của người dùng. Dựa trên nhu cầu kinh doanh, bạn có thể tìm ra cách tối ưu nhất để tận dụng SKAdNetwork nhằm thu thập thông tin chi tiết có ý nghĩa về chiến dịch của mình. Trong lớp học lập trình này, chúng ta sẽ xem xét một phương pháp ví dụ để tận dụng dữ liệu GA4F trong BigQuery nhằm nhóm doanh thu sau khi cài đặt ứng dụng thành các nhóm. Sau đó, bạn có thể dùng các nhóm này để thiết lập với đối tác phân bổ ứng dụng. Mặc dù lớp học lập trình này sử dụng phương pháp dựa trên doanh thu, nhưng bạn cũng có thể sử dụng phương pháp dựa trên sự kiện hoặc phễu để đo lường SKAN. Vui lòng tham khảo trung tâm trợ giúp này để biết hướng dẫn chi tiết hơn. Đây chỉ là một ví dụ, không phải là đề xuất chính thức của Google. Bạn có thể thiết kế lược đồ của riêng mình dựa trên nhu cầu kinh doanh cụ thể
Nội dung chúng tôi dự định đề cập
- Khám phá dữ liệu GA4F trong BigQuery
- Tìm dữ liệu doanh thu của những người dùng đã chuyển đổi trong vòng 0 đến 2 ngày
- Nhóm dữ liệu doanh thu thành các nhóm
- Tìm hiểu về mức phân bổ người dùng trong mỗi nhóm
- Triển khai các nhóm trong Appsflyer SKAN Conversion Studio
Điều kiện tiên quyết
- GA4F SDK trong ứng dụng iOS của bạn và tất cả các sự kiện doanh thu được tích hợp (in_app_purchase hoặc doanh thu từ quảng cáo)
- Firebase sang BigQuery đã bật tính năng xuất
- Đối tác phân bổ ứng dụng, cũng đang ghi lại tất cả các sự kiện doanh thu
2. Truy cập vào BigQuery Export
Chuyển đến Tập dữ liệu trên Google Cloud
Chuyển đến tập dữ liệu trong GA4F bằng cách truy cập vào Project Settings > Integrations > BigQuery (Cài đặt dự án > Tích hợp > BigQuery). Trước tiên, bạn cần bật nút bật/tắt này. Sau khi bật, bạn sẽ phải đợi khoảng 48 giờ thì tập dữ liệu mới xuất hiện. Bạn có thể nhấp vào đường liên kết bên dưới để chuyển đến BigQuery
Chạy một số truy vấn
Giờ đây, khi truy cập vào BigQuery, bạn sẽ thấy các bảng được tạo hằng ngày. Trong ảnh chụp màn hình ví dụ bên dưới, chúng ta thấy 64 bảng hằng ngày, tức là quá trình xuất dữ liệu đã diễn ra trong 64 ngày. Nếu truy cập vào bảng này lần đầu tiên, bạn có thể chỉ thấy 1 bảng hằng ngày cho dữ liệu của ngày hôm trước. Ở bên phải, bạn sẽ thấy giản đồ bảng. Bạn có thể tham khảo thêm thông tin chi tiết về các trường tại đây
Để bắt đầu viết truy vấn, bạn có thể nhấp vào Query > In new tab (Truy vấn > Trong thẻ mới)
Sau đó, bạn có thể thử chạy truy vấn mẫu trong thẻ mới
3. Phân tích dữ liệu doanh thu
Tìm nạp dữ liệu lượt cài đặt
Để bắt đầu tạo các nhóm doanh thu, trước tiên, chúng ta phải xem xét dữ liệu của những người dùng đã cài đặt ứng dụng trong vòng 24 đến 72 giờ qua. SKAdNetwork 4.0 cho phép bạn xem dữ liệu trong khoảng thời gian 0-2 ngày, trong khi SKAdNetwork 3.5 cho phép xem dữ liệu trong 24 giờ theo mặc định. (Tuỳ thuộc vào khả năng của Đối tác phân bổ ứng dụng, bạn có thể sửa đổi khoảng thời gian hoạt động này thành không quá 72 giờ). Khi người dùng cài đặt và mở ứng dụng lần đầu tiên, sự kiện first_open sẽ được SDK kích hoạt và ghi lại trong BigQuery.
Mã nhận dạng mà bạn có thể sử dụng cho BigQuery là user_pseudo_id (còn gọi là mã nhận dạng phiên bản ứng dụng). Vì vậy, bạn có thể sử dụng truy vấn bên dưới để tìm những người dùng này
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'
Một số điều cần lưu ý về truy vấn này
- Vui lòng thay thế tên bảng bằng bảng được xuất từ Analytics. Bạn có thể sử dụng ký tự đại diện để truy vấn nhiều bảng hằng ngày. Ví dụ: 2023* sẽ truy vấn tất cả dữ liệu trong năm 2023
- Nếu có nhiều người dùng, bạn cũng có thể chỉ truy vấn 30 ngày gần nhất để xử lý nhanh hơn
- Chúng tôi lọc theo nền tảng = "IOS". Trong trường hợp có nhiều ứng dụng iOS trong dự án Firebase, bạn cũng có thể thêm bộ lọc cho app_info.firebase_app_id để nhận dữ liệu cho ứng dụng cụ thể
Tìm nạp dữ liệu doanh thu
Bây giờ, hãy xem một truy vấn để tìm doanh thu cho người dùng của bạn. Trong trường hợp này, chúng tôi sẽ giả định rằng các sự kiện doanh thu của bạn là in_app_purchase và ad_impression. Doanh thu từ in_app_purchase có trong event_value_usd, còn đối với ad_impression, doanh thu có trong thông số giá trị, trong thông số sự kiện. Nếu chưa quen với các thông số sự kiện trong BigQuery, bạn nên xem định nghĩa tại đây và có thể thử truy vấn mẫu này trong tài liệu tham khảo chính thức của chúng tôi. Tài liệu này cũng đề cập đến việc trích xuất giá trị từ 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')
Hãy tìm hiểu xem truy vấn này đang làm gì. Đây là những điều bạn sẽ nhận thấy
- Trong mệnh đề WHERE, chúng ta đang lọc các sự kiện doanh thu vì chỉ quan tâm đến những sự kiện đó và giống như lần trước, chúng ta đang tìm kiếm dữ liệu iOS
- Giờ đây, trong mệnh đề SELECT, chúng ta sẽ lấy giá trị cũng như đơn vị tiền tệ cho sự kiện doanh thu từ quảng cáo (ad_impression) và chúng ta sẽ lấy event_value_in_usd khi sự kiện là in_app_purchase
- Nếu đang gửi nhiều đơn vị tiền tệ, trước tiên, bạn cần phải điều chỉnh thành một đơn vị tiền tệ duy nhất cho hoạt động phân tích này. Trong ví dụ này, chúng ta sẽ giả định rằng đơn vị tiền tệ cho doanh thu từ quảng cáo cũng là USD
Kết quả đầu ra sẽ có dạng như bên dưới (cột user_pseudo_id bị che khuất ở đây).
Kết hợp dữ liệu này
Cho đến nay, chúng ta đã chạy 2 truy vấn, một truy vấn để tìm dữ liệu cho những người dùng đã cài đặt và mở ứng dụng, và một truy vấn khác để tìm doanh thu của những người dùng đó. Bây giờ, hãy nhớ lại những gì chúng ta đã thảo luận về các điểm hạn chế của SKAdNetwork. Thời lượng phân bổ chỉ có thể có trong vòng 0 đến 2 ngày sau khi cài đặt. Do đó, chúng ta cần kiểm tra dấu thời gian của sự kiện cài đặt và doanh thu, đồng thời chỉ lấy thông tin nếu sự kiện xảy ra trong khung thời gian đó. Bây giờ, hãy thử kết hợp thành một truy vấn cung cấp tổng doanh thu cho mỗi bài đăng sau 2 ngày cài đặt ứng dụng
#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
Truy vấn này chỉ cố gắng kết hợp dữ liệu lượt cài đặt và dữ liệu doanh thu trên trường user_pseudo_id, sau đó chúng ta phải đảm bảo rằng dấu thời gian nằm trong vòng 2 ngày. Nếu đang sử dụng SKAdNetwork 3.5, thì thời gian mặc định là 24 giờ, vì vậy, bạn cũng có thể thay đổi điều kiện để chỉ bao gồm dữ liệu của 1 ngày
Nhóm doanh thu thành các khoảng
Sau truy vấn trước đó, bạn sẽ có user_pseudo_id và tổng doanh thu
Bây giờ, chúng ta cần kết hợp các giá trị này thành những nhóm mà chúng ta có thể sử dụng cho các dải giá trị lượt chuyển đổi. Để làm việc này, chúng ta sẽ sử dụng hàm approx_quantiles trong BigQuery. Hàm này sẽ tự động tạo các dải giá trị này cho bạn. Giả sử trong ví dụ này, chúng ta muốn tạo 5 dải, vì vậy, chúng ta chỉ cần sử dụng SELECT approx_quantiles(total_revenue, 5) AS buckets
Với thông tin đó, hãy kết hợp thông tin này vào truy vấn tổng thể của chúng ta
#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
Truy vấn này sẽ chia doanh thu thành 5 nhóm và BigQuery cố gắng duy trì một tỷ lệ phần trăm phân phối nhất quán
Phân tích mức độ phân phối người dùng bằng các nhóm này
Đây là bước không bắt buộc nếu bạn muốn tìm hiểu về mức độ phân bổ người dùng trong mỗi nhóm. Đối với ví dụ của chúng ta, các dải ô nhóm được trả về trong truy vấn trước là
- 0,1
- 0,5
- 2
- 2.5
- 5 [không được dùng giá trị cuối cùng trong cấu hình phạm vi]
Đối với các dải cuối cùng, chúng ta sẽ bỏ qua nhóm cuối cùng là 5, vì đó thường là giá trị tối đa và chúng ta chỉ cần coi 2, 5 là dải cuối cùng. Điều này là do các nhà cung cấp dịch vụ phân bổ ứng dụng thường tính toán ROAS bằng cách sử dụng giá trị trung bình của phạm vi, vì vậy, bạn phải loại trừ giá trị ngoại lệ để tính toán đồng nhất hơn.
Bây giờ, chúng ta sẽ cố gắng xem xét số lượng người dùng cho từng ngày trong tất cả các phạm vi, để có thể nắm được số lượng người dùng hằng ngày trong mỗi nhóm.Chúng ta có thể thực hiện việc đó bằng cách sử dụng truy vấn mẫu này, trong đó bạn có thể thay thế các giá trị nhóm bằng dữ liệu thực tế của mình và truy vấn sẽ có dạng như sau
#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
Thao tác này sẽ trả về số người dùng trong mỗi phạm vi doanh thu cho mỗi ngày, như bên dưới. Nếu thấy số lượng rất thấp trong bất kỳ nhóm nào hoặc phân phối không đồng đều nói chung, bạn có thể điều chỉnh số lượng nhóm và chạy lại truy vấn.
Thông tin ngắn gọn về SKAdNetwork 4.0
SKAdNetwork 4.0 cung cấp nhiều khoảng thời gian chuyển đổi lên đến 2 ngày, 3-7 ngày và 8-35 ngày. Trong phương pháp trên, bạn cũng có thể dễ dàng thay đổi cửa sổ để phân tích dữ liệu cho những trường hợp bổ sung này. Bạn cũng có thể dùng Giá trị thô là THẤP, TRUNG BÌNH và CAO. Một lần nữa, nếu muốn sử dụng phương pháp này, bạn có thể coi đây là 3 nhóm. Vì vậy, bằng cách thay đổi số lượng nhóm thành 3, bạn có thể nhận được các ngưỡng cho THẤP, TRUNG BÌNH và CAO
4. Triển khai với nhà cung cấp dịch vụ phân bổ
Hướng dẫn này có thể thay đổi tuỳ thuộc vào từng nền tảng cụ thể. Vui lòng liên hệ với người đại diện của nền tảng để biết thông tin mới nhất về vấn đề này. Trong ví dụ này, chúng ta sẽ xem xét cách triển khai tính năng này trên AppsFlyer
Trong truy vấn mà chúng ta đã chạy trước đó, các dải ô cuối cùng mà chúng ta nhận được dưới dạng đầu ra là như bên dưới
- Phạm vi 1 : 0 đến 0,1
- Phạm vi 2 : 0,1 đến 0,5
- Phạm vi 3 : 0,5 đến 2
- Phạm vi 4 : 2 đến 2,5
Hãy nhớ rằng chúng ta đã quyết định bỏ qua phạm vi doanh thu cuối cùng vì đó sẽ là giá trị ngoại lệ và làm sai lệch các phép tính trung bình cho nhà cung cấp thông tin phân bổ ứng dụng của bạn.
AppsFlyer cung cấp SKAN Conversion Studio, nơi bạn có thể dễ dàng nhập thông tin này trực tiếp vào giao diện người dùng. Bạn có thể sử dụng trực tiếp phiên bản 4.0 hoặc sử dụng chế độ "Tuỳ chỉnh" nếu đang dùng phiên bản 3.5 và thêm chỉ số đo lường "Doanh thu". Sau đó, bạn chỉ cần thêm các khoảng doanh thu mà bạn đã tính toán từ bản phân tích trước đó.
Các phương pháp hay nhất và thông tin học được trên Google Ads
Nếu đang chạy chiến dịch trên Google Ads và đo lường tác động thông qua một giản đồ giá trị lượt chuyển đổi SKAdNetwork, thì bạn nên tham khảo một số đề xuất sau
- Đảm bảo rằng thời lượng chuyển đổi mà bạn đang sử dụng trên Google Ads khớp với khoảng thời gian hoạt động mà bạn đã chỉ định trên nền tảng Phân bổ ứng dụng. Đối với mạng SKAd 3.5, thời gian này có thể là từ 1 đến 3 ngày. Vì vậy, bạn có thể điều chỉnh cho phù hợp trên Google Ads bằng cách làm theo các bước được liệt kê tại đây
- Nếu bạn đang sử dụng Appsflyer, thì bộ đếm sự kiện mặc định hiện tại là 1, tức là bộ đếm này không tính đến nhiều sự kiện trên mỗi người dùng. Nếu đang sử dụng mô hình dựa trên sự kiện để đo lường SKAN và so sánh với chiến dịch tCPA trên Google Ads, bạn có thể chọn tuỳ chỉnh bằng cách làm theo hướng dẫn này của Appsflyer
5. Xin chúc mừng
Chúc mừng bạn đã thiết lập thành công giản đồ Giá trị lượt chuyển đổi SKAdNetwork. Giờ đây, bạn có thể theo dõi dữ liệu trong báo cáo SKAdNetwork của Google Ads để kiểm tra giá trị lượt chuyển đổi cho chiến dịch trên Google Ads sau khi báo cáo này hoạt động
Kiến thức bạn học được
- Cách khám phá dữ liệu thô phong phú từ GA4F trong BigQuery
- Phương pháp phân tích để tính toán các nhóm doanh thu cho doanh nghiệp của bạn
- Triển khai giản đồ bằng AppsFlyer