1. Giới thiệu
Quảng cáo đóng vai trò quan trọng trong trải nghiệm người dùng tổng thể của ứng dụng. Những cách triển khai quảng cáo hiệu quả có thể giúp cải thiện trải nghiệm tổng thể của ứng dụng và thậm chí là cải thiện tỷ lệ giữ chân và mức độ tương tác của người dùng. Ví dụ: Quảng cáo có tặng thưởng cho phép bạn cung cấp cho người dùng tiền hoặc mặt hàng trong ứng dụng để xem quảng cáo dạng video. Nhờ đó, người dùng có thể đạt đến những tầm cao mới nếu không sẽ gặp khó khăn và có thể rời bỏ ứng dụng.
Tuy nhiên, việc tạo ra trải nghiệm quảng cáo tuyệt vời không hề dễ dàng. Bạn có thể có những câu hỏi như: Bạn nên hiển thị những quảng cáo này với tần suất như thế nào? Bạn nên đăng thông báo ở đâu và vào thời điểm nào? Phần thưởng đó nên là gì? Rất tiếc, câu trả lời sẽ khác nhau tuỳ theo ứng dụng và vị trí đặt quảng cáo. Không có câu trả lời nào phù hợp với mọi trường hợp.
Với Google Analytics cho Firebase, AdMob và một số công cụ mạnh mẽ và dễ sử dụng khác mà Firebase cung cấp, việc tinh chỉnh ứng dụng của bạn theo cách dựa trên dữ liệu trở nên dễ dàng và hợp lý hơn nhiều. Hôm nay, chúng tôi sẽ hướng dẫn bạn cách bắt đầu!
Sản phẩm bạn sẽ tạo ra
Lớp học lập trình này là lớp học đầu tiên trong số 3 lớp học lập trình sẽ hướng dẫn bạn cách tạo ứng dụng có tên Awesome Drawing Inspector, một trò chơi cho phép người chơi đoán tên của bản vẽ. Ví dụ này sẽ minh hoạ cách kết hợp Quảng cáo có tặng thưởng và dịch vụ Firebase vào trò chơi của mình.
Trong lớp học lập trình này, bạn sẽ tích hợp Google Analytics cho Firebase để ghi lại một số sự kiện quan trọng trong ứng dụng. Ngoài ra, bạn sẽ tìm hiểu cách đọc số liệu phân tích ứng dụng hiển thị trong bảng điều khiển của Firebase.
Nếu bạn gặp vấn đề (lỗi trong đoạn mã, lỗi ngữ pháp, từ ngữ không rõ ràng, v.v.) khi thực hành theo lớp học lập trình này, vui lòng báo cáo vấn đề thông qua đường liên kết Báo cáo lỗi ở góc dưới bên trái lớp học lập trình.
Kiến thức bạn sẽ học được
- Cách thiết lập Google Analytics cho Firebase trong ứng dụng
- Cách ghi lại sự kiện trong ứng dụng
- Cách đọc số liệu phân tích ứng dụng hiển thị trong bảng điều khiển của Firebase
Bạn cần có
- Android Studio phiên bản 4.1 trở lên
- Tài khoản Google
- Một thiết bị thử nghiệm chạy Android 5.0 trở lên có cáp USB để kết nối thiết bị của bạn hoặc một Trình mô phỏng Android chạy AVD (Thiết bị Android ảo) có hình ảnh hệ thống hỗ trợ API của Cửa hàng Play/Google
Bạn đánh giá mức độ trải nghiệm của mình với AdMob như thế nào?
Bạn đánh giá thế nào về mức độ trải nghiệm của mình với Firebase?
2. Thiết lập môi trường phát triển
Tải mã nguồn xuống
Nhấp vào nút sau đây để tải tất cả mã cho lớp học lập trình này:
Giải nén tệp zip đã tải xuống. Thao tác này sẽ giải nén thư mục gốc có tên admob-firebase-codelabs-android
.
...hoặc sao chép kho lưu trữ GitHub từ dòng lệnh.
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
Kho lưu trữ chứa 4 thư mục như sau:
101-base — Đoạn mã khởi đầu mà bạn sẽ tạo trong lớp học lập trình này.
101-complete_and_102-base — Đoạn mã đã hoàn tất cho lớp học lập trình này & điều kiện khởi đầu cho lớp học lập trình 102.
102-complete — Đã hoàn thành mã cho lớp học lập trình 102.
Nhập ứng dụng khởi đầu
Chạy Android Studio và chọn "Import project" (Nhập dự án) trên màn hình chào mừng. Sau đó, chọn thư mục 101-base trong đoạn mã mà bạn đã tải xuống.
Bây giờ, bạn sẽ mở dự án này trong Android Studio.
3. Thiết lập đơn vị quảng cáo video có tặng thưởng (Không bắt buộc)
Ứng dụng khởi đầu này đã bao gồm một Đơn vị quảng cáo dạng video có tặng thưởng chuyên biệt để thuận tiện cho bạn. Bạn hoàn toàn có thể bỏ qua bước này nếu không muốn tạo một bước mới trong tài khoản AdMob của mình.
Để tạo ứng dụng AdMob mới trong tài khoản của bạn, vui lòng làm theo hướng dẫn như sau:
- Chuyển đến Bảng điều khiển AdMob.
- Trên trình đơn Apps (Ứng dụng), hãy nhấp vào "Add App" (Thêm ứng dụng).
- Khi được hỏi "Bạn đã xuất bản ứng dụng của mình trên Google Play hoặc App Store chưa", câu trả lời "KHÔNG"
- Đặt tên cho ứng dụng là "Awesome Drawing Images" (Câu đố về bản vẽ tuyệt vời) chọn "Android" làm Nền tảng, sau đó nhấp vào "Thêm".
Sau khi bạn tạo một ứng dụng AdMob trong tài khoản của mình, hãy làm theo các bước được mô tả bên dưới để tạo một Đơn vị quảng cáo dạng video có tặng thưởng mới.
- Nhấp vào trình đơn Ứng dụng trong giao diện người dùng AdMob, sau đó chọn "Bài kiểm tra bản vẽ tuyệt vời" từ danh sách ứng dụng.
- Nhấp vào THÊM ĐƠN VỊ QUẢNG CÁO để tạo đơn vị quảng cáo Video có tặng thưởng mới.
- Chọn Có tặng thưởng cho định dạng Quảng cáo.
- Cung cấp tên đơn vị quảng cáo bạn muốn. Sau đó, đặt số tiền thưởng là 1 và mục phần thưởng thành "hint" (đây là phần thưởng mà ứng dụng hiện tặng cho người dùng). Nhấp vào TẠO ĐƠN VỊ QUẢNG CÁO để tạo đơn vị quảng cáo Video có tặng thưởng mới.
- Khi tạo thành công, bạn sẽ thấy hướng dẫn tương tự như sau:
- Quay lại dự án Android và cập nhật hằng số mã ứng dụng AdMob cũng như hằng số mã đơn vị quảng cáo thành những hằng số mà bạn đã tạo ở bước trước.
strings.xml
<!-- Update the value with your AdMob app id -->
<string name="admob_app_id">YOUR_ADMOB_APP_ID</string>
GameActivity.kt
// Update the value with your Rewarded Video ad unit id
private const val AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";
4. Thiết lập dự án Firebase
Tạo dự án mới từ Bảng điều khiển của Firebase
- Truy cập vào bảng điều khiển của Firebase.
- Chọn Add Project (Thêm dự án) rồi đặt tên cho dự án là "Awesome Drawing đẹp" (Bài kiểm tra bản vẽ tuyệt vời). Đảm bảo bạn đã bật nút chọn Bật Google Analytics cho dự án này.
- Chọn tài khoản Google Analytics mà bạn định sử dụng. Đối với hầu hết mọi trường hợp, bạn chỉ cần chọn tùy chọn Tài khoản mặc định cho Firebase, nhưng nếu bạn có một tài khoản Google Analytics khác muốn sử dụng, hãy chọn tùy chọn đó tại đây.
- Nhấp vào Create project (Tạo dự án).
Thêm ứng dụng Android
- Trên màn hình tổng quan của dự án mới, hãy nhấp vào Thêm Firebase vào ứng dụng Android.
- Nhập tên gói của lớp học lập trình: com.codelab.awesomedrawingquiz
- Đặt biệt hiệu cho ứng dụng của bạn: Bài đố vui về bản vẽ tuyệt vời
- Để trống trường SHA-1 vì dự án này không bắt buộc phải dùng SHA-1.
- Chọn Đăng ký ứng dụng để đăng ký ứng dụng của bạn.
Thêm tệp google-services.json vào ứng dụng
Tiếp theo, bạn sẽ thấy một màn hình hiển thị để bạn có thể tải tệp cấu hình chứa tất cả siêu dữ liệu Firebase cần thiết cho ứng dụng của mình xuống. Nhấp vào Tải google-service.json xuống rồi sao chép tệp đó vào thư mục app (ứng dụng) trong dự án của bạn.
Khai báo các phiên bản phần phụ thuộc
Hãy bắt đầu bằng cách thêm phiên bản của mỗi phần phụ thuộc cần thiết để tích hợp Firebase vào dự án. Mở tệp dependencies.gradle
nằm ở thư mục gốc của dự án, sau đó thêm trình bổ trợ google-services, SDK Firebase Analytics và phiên bản SDK chính của Firebase.
dependencies.gradle
ext {
...
// TODO: Declare google-services plugin version (101)
googleServicesPluginVersion = '4.3.4'
...
// TODO: Declare Firebase BOM version (101)
firebaseBomVersion = '26.2.0'
...
}
Áp dụng trình bổ trợ google-services cho ứng dụng của bạn
Trình bổ trợ google-services sử dụng tệp google-services.json
để định cấu hình ứng dụng của bạn nhằm sử dụng Firebase.
Thêm google-services làm classpath trong tệp build.gradle
nằm ở thư mục gốc của dự án.
build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
...
dependencies {
classpath "com.android.tools.build:gradle:$androidPluginVersion"
// TODO: Add google-services plugin (101)
classpath "com.google.gms:google-services:$googleServicesPluginVersion"
...
}
}
...
Sau đó, áp dụng trình bổ trợ google-services bằng cách thêm một dòng trong tệp app/build.gradle
như sau:
app/build.gradle
apply plugin: 'com.android.application'
// TODO: Apply google-services plugin (101)
apply plugin: 'com.google.gms.google-services'
android {
...
}
dependencies {
...
}
Thêm Firebase SDK vào dự án
Vẫn trong tệp app/build.gradle
, hãy thêm Analytics SDK vào các phần phụ thuộc của ứng dụng.
app/build.gradle
apply plugin: 'com.android.application'
android {
...
}
dependencies {
...
// TODO: Import the Firebase BoM (101)
implementation platform("com.google.firebase:firebase-bom:$firebaseBomVersion")
// COMPLETE: Add Firebase Analytics dependency (101)
implementation 'com.google.firebase:firebase-analytics-ktx'
...
}
...
Đồng bộ hoá dự án với các tệp gradle
Để đảm bảo ứng dụng của bạn dùng được tất cả các phần phụ thuộc, hãy đồng bộ hoá dự án với các tệp Gradle. Chọn File > (Tệp >) Trình đơn Đồng bộ hoá dự án với tệp Gradle để đồng bộ hoá dự án của bạn với các tệp Gradle.
5. Liên kết AdMob với dự án Firebase
Hãy hoàn tất các bước bên dưới để liên kết các ứng dụng của bạn với Firebase.
- Đăng nhập vào tài khoản AdMob tại https://apps.admob.com.
- Nhấp vào Ứng dụng trong thanh bên.
- Chọn "Câu đố về bản vẽ tuyệt vời". Nếu không thấy tên ứng dụng trong danh sách các ứng dụng gần đây, bạn có thể nhấp vào Xem tất cả các ứng dụng để tìm kiếm danh sách tất cả các ứng dụng bạn đã thêm vào AdMob.
- Nhấp vào Cài đặt ứng dụng trong thanh bên.
- Nhấp vào Liên kết với Firebase.
- Chọn lựa chọn "Liên kết đến dự án Firebase hiện có và tạo ứng dụng Firebase mới". Sau đó, hãy chọn dự án "Awesome Drawing Question" trên trình đơn thả xuống.
- Sau khi nhấp vào nút "TIẾP TỤC", bạn sẽ thấy thông báo "Đã liên kết thành công". Nhấp vào nút "XONG" để hoàn tất.
Sau khi bạn liên kết ứng dụng AdMob của mình với Dự án Firebase, ứng dụng này sẽ có thêm một số tính năng bổ sung cả trên bảng điều khiển của AdMob và Firebase như sau:
Thẻ doanh thu (AdMob)
Trong thẻ Doanh thu, bạn có thể nắm bắt thông tin toàn diện về tất cả các nguồn doanh thu có thể phát sinh ở cùng một nơi. Sau đây là các nguồn doanh thu được hỗ trợ:
- AdMob (Ước tính)
- Mạng quảng cáo dàn xếp (Đã quan sát được)
- Mua hàng trong ứng dụng
- Giao dịch mua hàng thương mại điện tử
Thẻ chỉ số người dùng (AdMob)
Từ thẻ chỉ số người dùng, bạn có thể thấy các thay đổi đối với trải nghiệm quảng cáo có thể tác động như thế nào đến hành vi của người dùng.
Báo cáo quảng cáo có tặng thưởng (AdMob)
Báo cáo quảng cáo có tặng thưởng cung cấp nhiều chỉ số giúp nhà xuất bản hiểu cách người dùng tương tác với quảng cáo có tặng thưởng của họ.
Thẻ Tổng doanh thu (Firebase)
Sau khi bạn liên kết ứng dụng AdMob với Firebase, thẻ Tổng doanh thu trên trang tổng quan Firebase sẽ hiển thị doanh thu từ AdMob cùng với lượt mua hàng trong ứng dụng và giao dịch mua hàng trên nền tảng thương mại điện tử.
Báo cáo sự kiện quảng cáo (Firebase)
Các sự kiện dành riêng cho quảng cáo (sự kiện lượt nhấp, lượt hiển thị và sự kiện tặng thưởng) được tự động thu thập và có sẵn để sử dụng trong Google Analytics cho Firebase.
6. Chạy dự án
Sau khi biên dịch và chạy dự án, bạn sẽ thấy màn hình sau đây khi ứng dụng khởi động.
Sau khi nhấp vào BẮT ĐẦU TRÒ CHƠI, bạn sẽ thấy một hình vẽ trên màn hình. Nhiệm vụ của bạn là đoán tên bản vẽ bằng cách sử dụng gợi ý hiển thị ở trên cùng, từ đó bạn có thể suy ra chữ cái đầu tiên và độ dài tên của bản vẽ.
Nếu không biết tên của bản vẽ, bạn có thể bỏ qua cấp độ bằng cách nhấp vào nút "BỎ QUA".
Bạn có thể muốn có thêm gợi ý giúp bạn đoán câu trả lời. Bạn có thể nhận thêm manh mối bằng cách nhấp vào nút "HINT" rồi xem Quảng cáo dạng video có tặng thưởng. Sau khi xem xong quảng cáo, bạn sẽ nhận được thêm một chữ cái để nhận phần thưởng.
7. Thêm sự kiện ứng dụng
Để hiểu sâu sắc về hành trình của người dùng trong Bài đố vui về bản vẽ tuyệt vời,bạn sẽ xác định một số sự kiện tuỳ chỉnh theo dõi hành vi của người dùng trong trò chơi như sau:
Tên sự kiện | Được kích hoạt... | Tham số |
game_start | khi người dùng bắt đầu một trò chơi mới | không có |
level_start | khi người dùng bắt đầu một cấp độ mới (bài kiểm tra về bản vẽ mới) trong một giai đoạn. (có 6 cấp trong một giai đoạn) | level_name |
level_wrong_answer | khi người dùng gửi một câu trả lời sai | level_name |
ad_reward_prompt | khi người dùng nhấn vào nút gợi ý và được nhắc xem một Quảng cáo dạng video có tặng thưởng | ad_unit_id |
ad_reward_impression | khi người dùng bắt đầu xem một Quảng cáo dạng video có tặng thưởng | ad_unit_id |
level_success | khi người dùng gửi một câu trả lời đúng (xoá một cấp độ) | level_name, number_of_attempts, ignore_time_giây, hint_used |
level_fail | khi người dùng bỏ qua một cấp độ | level_name, number_of_attempts, ignore_time_giây, hint_used |
game_complete | khi trò chơi kết thúc | number_of_correct_answers |
Dưới đây là nội dung mô tả về từng thông số được liên kết với mỗi sự kiện:
Tên sự kiện | Tên thông số | Nội dung mô tả |
level_start | level_name | Tên của bản vẽ hiển thị trong cấp (ví dụ: "chuối") |
level_wrong_answer | level_name | khi người dùng gửi một câu trả lời sai |
ad_reward_prompt | ad_unit_id | Mã đơn vị quảng cáo dùng để hiển thị Quảng cáo dạng video có tặng thưởng |
ad_reward_impression | ad_unit_id | Mã đơn vị quảng cáo dùng để hiển thị Quảng cáo dạng video có tặng thưởng |
level_success | level_name | Tên của bản vẽ hiển thị trong cấp (ví dụ: "chuối") |
level_success | number_of_attempts | Số lần thử xoá một cấp |
level_success | elapsed_time_sec | Thời gian đã trôi qua để xóa một cấp độ (tính bằng giây) |
level_success | hint_used | Người dùng có sử dụng gợi ý (đã xem Quảng cáo video có tặng thưởng) hay không để xóa một cấp độ (1: đã sử dụng gợi ý / 0: xóa một cấp mà không có gợi ý) |
level_fail | level_name | Tên của bản vẽ hiển thị trong cấp (ví dụ: "chuối") |
level_fail | number_of_attempts | Số lần thử xoá một cấp |
level_fail | elapsed_time_sec | Thời gian đã trôi qua để xóa một cấp độ (tính bằng giây) |
level_fail | hint_used | Người dùng có sử dụng gợi ý (đã xem Quảng cáo video có tặng thưởng) hay không để xóa một cấp độ (1: đã sử dụng gợi ý / 0: xóa một cấp mà không có gợi ý) |
game_complete | number_of_correct_answers | Số cấp độ đã xóa trong trò chơi |
Tạo một lớp trợ giúp để ghi nhật ký sự kiện tuỳ chỉnh
Để dễ dàng ghi lại sự kiện Analytics, bạn sẽ tạo một lớp trợ giúp để quản lý sự kiện tuỳ chỉnh.
Trước tiên, hãy tạo một tệp Kotlin mới (không phải lớp Kotlin) rồi đặt tên tệp đó là QuizAnalytics.kt
trong gói com.codelab.awesomedrawingquiz
. Tạo các trường xác định tên và thông số của sự kiện tuỳ chỉnh.
QuizAnalytics.kt
private const val EVENT_AD_REWARD_PROMPT = "ad_reward_prompt"
private const val EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression"
private const val EVENT_LEVEL_FAIL = "level_fail"
private const val EVENT_LEVEL_SUCCESS = "level_success"
private const val EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer"
private const val EVENT_GAME_START = "game_start"
private const val EVENT_GAME_COMPLETE = "game_complete"
private const val PARAM_AD_UNIT_ID = "ad_unit_id"
private const val PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec"
private const val PARAM_HINT_USED = "hint_used"
private const val PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts"
private const val PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers"
Tiếp theo, hãy thêm các hàm mở rộng giúp bạn ghi nhật ký các sự kiện tuỳ chỉnh trong trò chơi của mình. Xin lưu ý rằng hầu hết các sự kiện tuỳ chỉnh đều bao gồm thông số để bạn có thêm ngữ cảnh về từng sự kiện. Ngoài ra, xin lưu ý rằng Analytics đã xác định một số tên và thông số sự kiện (FirebaseAnalytics.Event.LEVEL_NAME
và FirebaseAnalytics.Event.LEVEL_START
), vì vậy, chúng ta sẽ sử dụng các thông số và tên đó.
QuizAnalytics.kt
...
fun FirebaseAnalytics.logGameStart() = logEvent(EVENT_GAME_START, null)
fun FirebaseAnalytics.logLevelStart(levelName: String) {
logEvent(FirebaseAnalytics.Event.LEVEL_START) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
}
}
fun FirebaseAnalytics.logLevelWrongAnswer(levelName: String) {
logEvent(EVENT_LEVEL_WRONG_ANSWER) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
}
}
fun FirebaseAnalytics.logAdRewardPrompt(adUnitId: String) {
logEvent(EVENT_AD_REWARD_PROMPT) {
param(PARAM_AD_UNIT_ID, adUnitId)
}
}
fun FirebaseAnalytics.logAdRewardImpression(adUnitId: String) {
logEvent(EVENT_AD_REWARD_IMPRESSION) {
param(PARAM_AD_UNIT_ID, adUnitId)
}
}
fun FirebaseAnalytics.logLevelSuccess(
levelName: String,
numberOfAttempts: Int,
elapsedTimeSec: Int,
hintUsed: Boolean
) {
logEvent(EVENT_LEVEL_SUCCESS) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
}
}
fun FirebaseAnalytics.logLevelFail(
levelName: String,
numberOfAttempts: Int,
elapsedTimeSec: Int,
hintUsed: Boolean
) {
logEvent(EVENT_LEVEL_FAIL) {
param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
}
}
fun FirebaseAnalytics.logGameComplete(
numberOfCorrectAnswers: Int
) {
logEvent(EVENT_GAME_COMPLETE) {
param(PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers.toLong())
}
}
Ghi lại các sự kiện phân tích trong trò chơi
Trong lớp GameViewModel
, hãy thêm một thuộc tính mới cho thực thể FirebaseAnalytics
.
GameViewModel.kt
class GameViewModel(
...
// TODO: Accept FirebaseAnalytics instance as a parameter (101)
private val analytics: FirebaseAnalytics,
) : ViewModel() {
...
}
Tiếp theo, trong lớp AwesomeDrawingQuizViewModelFactory
, hãy thêm một thuộc tính mới như trước đây bạn đã làm trong GameViewModel
.
AwesomeDrawingQuizViewModelFactory.kt
class AwesomeDrawingQuizViewModelFactory(
...
// TODO: Accept FirebaseAnalytics instance as a parameter (101)
private val analytics: FirebaseAnalytics,
) : ViewModelProvider.Factory {
...
}
Tiếp theo, trong lớp AwesomeDrawingQuiz
, hãy thêm hàm provideFirebaseAnalytics()
và cập nhật hàm provideViewModelFactory()
để truyền thực thể FirebaseAnalytics
vào AwesomeDrawingViewModelFactory
.
AwesomeDrawingQuiz.kt
class AwesomeDrawingQuiz : Application() {
...
fun provideViewModelFactory() = AwesomeDrawingQuizViewModelFactory(
this,
provideGameSettings(),
// TODO: Pass FirebaseAnalytics instance as a parameter (101)
provideFirebaseAnalytics(),
)
// TODO: Provide FirebaseAnalytics instance (101)
private fun provideFirebaseAnalytics() = Firebase.analytics
...
}
Bây giờ, bạn đã sẵn sàng triển khai sự kiện tuỳ chỉnh. Trước tiên, trong hàm startGame()
, hãy gọi logGameStart()
để cho biết một trò chơi đã bắt đầu.
Vì logGameStart()
là một hàm mở rộng của lớp FirebaseAnalytics
, nên bạn có thể gọi hàm này từ thực thể của lớp FirebaseAnalytics
.
GameViewModel.kt
fun startGame() {
...
// TODO: Log game_start event (101)
analytics.logGameStart()
...
}
Tiếp theo, trong hàm checkAnswer()
, hãy thêm các sự kiện level_success
và level_wrong_answer
.
GameViewModel.kt
fun checkAnswer(userAnswer: String) {
...
if (correct) {
...
// TODO: Log level_success event (101)
analytics.logLevelSuccess(
levelName = drawing.word,
numberOfAttempts = numAttempts,
elapsedTimeSec = elapsedTimeInSeconds,
hintUsed = isHintUsed,
)
...
} else {
// TODO: Log level_wrong_answer event (101)
analytics.logLevelWrongAnswer(levelName = drawing.word)
...
}
}
Tiếp theo, trong hàm skipLevel()
, hãy thêm sự kiện level_fail để đánh dấu cấp độ là không đạt.
GameViewModel.kt
fun skipLevel() {
...
// TODO: Log level_fail event (101)
analytics.logLevelFail(
levelName = drawing.word,
numberOfAttempts = numAttempts,
elapsedTimeSec = elapsedTimeInSeconds,
hintUsed = isHintUsed,
)
...
}
Tiếp theo, hãy triển khai các hàm logAdRewardPrompt()
và logAdRewardImpression()
để theo dõi hành vi của người dùng liên quan đến Quảng cáo dạng video có tặng thưởng.
GameViewModel.kt
fun logAdRewardPrompt(adUnitId: String) {
// TODO: Log ad_reward_prompt event (101)
analytics.logAdRewardPrompt(adUnitId)
}
fun logAdRewardImpression(adUnitId: String) {
// TODO: Log ad_reward_impression event (101)
analytics.logAdRewardImpression(adUnitId)
}
Cuối cùng, hãy sửa đổi hàm requestNewDrawing()
và finishGame()
để thêm các sự kiện tuỳ chỉnh level_start và game_complete.
GameViewModel.kt
private fun requestNewDrawing() {
...
drawingRequestDisposable = drawingDao.getRandomDrawings(seenWords)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { d ->
...
// TODO: Log level_start event (101)
analytics.logLevelStart(d.word)
...
}
}
private fun finishGame() {
// TODO: Log game_complete event (101)
analytics.logGameComplete(numCorrectAnswers)
...
}
8. Gỡ lỗi sự kiện Analytics
Bạn có thể sử dụng DebugView trong bảng điều khiển của Firebase để xác minh rằng các sự kiện đang được ghi lại chính xác. DebugView cho phép bạn xem dữ liệu sự kiện thô do ứng dụng của bạn ghi lại trên các thiết bị phát triển gần như theo thời gian thực.
Điều này rất hữu ích cho mục đích xác thực trong giai đoạn phát triển đo lường và có thể giúp bạn phát hiện bất kỳ lỗi nào trong triển khai phân tích.
Bật chế độ gỡ lỗi
Thông thường, các sự kiện được ghi lại trong ứng dụng của bạn sẽ được nhóm lại với nhau trong khoảng một giờ và được tải lên cùng nhau. Để xác thực việc triển khai Analytics một cách nhanh chóng, bạn cần bật chế độ Gỡ lỗi trên thiết bị phát triển để tải các sự kiện lên với độ trễ tối thiểu.
Để bật chế độ Gỡ lỗi, hãy hoàn tất các bước sau:
- Mở cửa sổ công cụ Terminal trong Android Studio (View > Tool Windows > Terminal (Xem > Cửa sổ công cụ > Thiết bị đầu cuối).
- Thực thi lệnh sau (đảm bảo rằng thiết bị Android thử nghiệm đã được kết nối với máy tính hoặc Trình mô phỏng Android đang chạy):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz
Hành vi này sẽ tồn tại cho đến khi bạn tắt chế độ Gỡ lỗi rõ ràng bằng cách thực thi lệnh sau:
adb shell setprop debug.firebase.analytics.app .none.
Gỡ lỗi sự kiện Analytics bằng DebugView
Sau khi bạn bật Chế độ gỡ lỗi trên thiết bị thử nghiệm, hãy chuyển đến dự án của bạn trong bảng điều khiển của Firebase rồi chọn Analytics > DebugView trong trình đơn. Sau đó, trên thiết bị thử nghiệm, hãy chơi trò chơi để xem các sự kiện đang được ghi lại và hiển thị trên báo cáo DebugView.
Bạn có thể xem thông tin chi tiết về từng sự kiện bằng cách nhấp vào tên sự kiện. Ví dụ: ảnh chụp màn hình sau đây cho thấy thông tin chi tiết về thông số liên quan đến sự kiện level_start
.
Vui lòng tham khảo bài viết trên trung tâm trợ giúp DebugView để biết thêm chi tiết.
9. Bật phương diện và chỉ số tuỳ chỉnh
Theo mặc định, Google Analytics cho Firebase thu thập tổng số sự kiện. Đối với mỗi thông số sự kiện mà bạn quan tâm, bạn cần bật tính năng báo cáo cho thông số đó một cách rõ ràng. Sau đó, Google Analytics cho Firebase có thể hiển thị thêm các thẻ để hiển thị số liệu thống kê cho các thông số tuỳ chỉnh.
Cách đăng ký phương diện và chỉ số tuỳ chỉnh:
- Chuyển đến bảng điều khiển của Firebase rồi chọn dự án Bài kiểm tra bản vẽ tuyệt vời mà bạn đã tạo trước đó.
- Nhấp vào Analytics > Sự kiện trong trình đơn điều hướng.
- Nhấp vào Quản lý định nghĩa tùy chỉnh.
- Trong thẻ Phương diện tuỳ chỉnh, hãy nhấp vào Tạo phương diện tuỳ chỉnh.
- Trong trường Tên thông số sự kiện, hãy nhập level_name rồi nhấp vào Lưu để hoàn tất quá trình đăng ký thông số.
- Tiếp theo, hãy chọn thẻ Chỉ số tuỳ chỉnh rồi nhấp vào Tạo chỉ số tuỳ chỉnh.
- Nhập tên thông số, đơn vị đo lường cho các thông số sau.
Tên thông số | Loại thông số | Đơn vị đo lường |
number_of_attempts | Số | Tiêu chuẩn |
hint_used | Số | Tiêu chuẩn |
elapsed_time_sec | Số | Giây |
number_of_correct_answers | Số | Tiêu chuẩn |
10. Nhận thông tin chi tiết từ Báo cáo sự kiện
Khi đã thêm một số sự kiện vào trò chơi, bạn sẽ có thể trả lời các câu hỏi liên quan đến hành vi của người dùng trong trò chơi. Dưới đây là một vài thông tin chi tiết mà bạn có thể nhận được từ báo cáo sự kiện Firebase.
Cấp nào có nhiều câu trả lời sai nhất?
Để trả lời câu hỏi này, bạn nên tìm hiểu có bao nhiêu sự kiện level_wrong_answer
đã được kích hoạt cho mỗi cấp.
Nhấp vào biểu tượng level_wrong_answer
trong báo cáo sự kiện. Trong báo cáo sự kiện level_wrong_answer
, hãy tìm thẻ level_name
. Bạn sẽ thấy các giá trị liên kết với tham số level_name
trên thẻ đó như sau.
Theo ảnh chụp màn hình ở trên, bạn có thể dễ dàng nhận ra khuôn khổ có nhiều câu trả lời sai nhất, tức là khó hơn cho người dùng so với các cấp độ khác.
Bằng cách sử dụng thông tin chi tiết mà bạn có được từ đây, bạn có thể quyết định không cung cấp các cấp độ khó cho người dùng mới làm quen để duy trì tỷ lệ giữ chân cao.
Bạn đã thử trung bình bao nhiêu lần để xoá một cấp độ?
Trong Bài kiểm tra về bản vẽ tuyệt vời, người dùng có thể gửi câu trả lời cho mỗi cấp bao nhiêu tuỳ thích.
Vì bạn đã bật tính năng báo cáo thông số cho thông số number_of_attempts
trong sự kiện level_success
, nên bạn có thể xem các chỉ số chi tiết cho thông số đó.
Nhấp vào sự kiện level_success
trong báo cáo sự kiện. Trong báo cáo sự kiện level_success
, hãy tìm thẻ number_of_attemps
. Bạn sẽ thấy số lần thử trung bình trên thẻ đó như sau:
Bạn có thể sử dụng thông tin chi tiết từ đây để tối ưu hoá độ khó trung bình của trò chơi. Ví dụ: nếu số lượt chơi trung bình quá gần 1, bạn có thể cân nhắc việc tăng độ khó của trò chơi một chút.
Người dùng có thử giải câu hỏi bằng cách nhận gợi ý, mặc dù cuối cùng họ chưa hoàn thành được một cấp độ nào đó không?
Khi người dùng quyết định bỏ qua một cấp, sự kiện level_fail
sẽ được kích hoạt. Có thể có nhiều lý do cho quyết định của người dùng.
Tuy nhiên, vì trò chơi có thể cung cấp cho họ gợi ý sau khi họ xem Quảng cáo video có tặng thưởng, nên điều quan trọng là phải biết liệu người dùng có cố gắng hoàn thành cấp độ với sự trợ giúp của gợi ý hay không.
Nhấp vào sự kiện level_fail
trong báo cáo sự kiện. Trong báo cáo sự kiện level_fail
, hãy tìm thẻ hint_used
. Bạn sẽ thấy số lượng thông số sự kiện trung bình là hint_used
. Lưu ý rằng giá trị của tham số sẽ là 1 nếu sử dụng gợi ý và 0 nếu không sử dụng gợi ý.
Nếu các con số trên thẻ hint_used
gần bằng 0, thì đó là tín hiệu cho thấy phần thưởng (gợi ý) không đủ hữu ích đối với những người dùng này. Ngoài ra, bạn sẽ mất cơ hội tăng doanh thu từ Quảng cáo dạng video có tặng thưởng.
Do đó, bạn nên cân nhắc việc đưa ra phần thưởng lớn hơn để người dùng có thể tương tác với trò chơi sâu hơn, nhờ đó giúp bạn tăng doanh thu từ Quảng cáo dạng video có tặng thưởng.
Trung bình có bao nhiêu cấp bị xoá trong mỗi trò chơi?
Có tổng cộng 6 cấp độ cho mỗi trò chơi trong Bài kiểm tra bản vẽ tuyệt vời. Sau khi người dùng hoàn thành 6 cấp (bất kể họ đã xóa hay không vượt qua từng cấp), sự kiện game_complete
sẽ được kích hoạt bằng thông số number_of_correct_answers
. Tham số number_of_correct_answers
cho biết số cấp độ mà người dùng đã đưa ra câu trả lời đúng.
Nhấp vào game_complete
sự kiện trong báo cáo sự kiện. Trong báo cáo sự kiện game_complete, tìm thẻ number_of_correct_answers
. Bạn sẽ thấy số lượng thông số sự kiện trung bình là number_of_correct_answers
.
Nếu số lần vượt qua cấp độ trung bình quá thấp, bạn nên xem xét việc sắp xếp lại các cấp độ trong trò chơi để giúp mọi người vượt qua các cấp độ trước đó dễ dàng hơn, để họ có thể tiếp tục chơi trò chơi của bạn mà không mất sự hứng thú.
11. Đã xong!
Bạn đã hoàn thành Lớp học lập trình Android 101 về AdMob và Firebase. Bạn có thể tìm thấy mã đã hoàn chỉnh cho lớp học lập trình này trên thư mục 101-complete_and_102-base.
Trong phần tiếp theo của Lớp học lập trình AdMob và Firebase, bạn sẽ tìm hiểu cách sử dụng phễu để trực quan hoá quy trình của sự kiện ứng dụng. Phần tiếp theo cũng sẽ đề cập đến cách sử dụng Cấu hình từ xa và thử nghiệm A/B để tối ưu hoá giá trị thông số trong trò chơi mà không cần cập nhật ứng dụng.