Android của Firebase 101 cho AdMob: Thiết lập & Kiến thức cơ bản về Analytics

1. Giới thiệu

Quảng cáo là một phần quan trọng trong trải nghiệm tổng thể của người dùng đối với ứng dụng của bạn. Việc 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ể trong ứng dụng, 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 tặng thưởng tiền tệ hoặc vật phẩm trong ứng dụng cho người dùng vì họ đã xem quảng cáo dạng video, nhờ đó, người dùng có thể đạt được những thành tựu mới mà nếu không có quảng cáo này, họ có thể sẽ gặp khó khăn và bỏ cuộc.

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ể thắc mắc như: Bạn nên hiển thị những quảng cáo này bao nhiêu lần? Bạn nên hiển thị những quảng cáo này ở đâ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 từng ứng dụng và từng vị trí. Không có câu trả lời chung cho tất cả.

Với Google Analytics cho Firebase, AdMob và một số công cụ mạnh mẽ nhưng dễ sử dụng khác mà Firebase cung cấp, việc tinh chỉnh ứng dụng theo hướng dựa trên dữ liệu đã trở nên dễ dàng và tinh giản 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

Đây là lớp học lập trình đầu tiên trong số 3 lớp học lập trình hướng dẫn bạn cách tạo một ứng dụng có tên là Awesome Drawing Quiz (Đố vui vẽ hình siêu đỉnh), một trò chơi cho phép người chơi đoán tên của hình vẽ. Lớp học này sẽ minh hoạ cách bạn có thể kết hợp Quảng cáo có tặng thưởng và các dịch vụ của Firebase trong trò chơi.

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 của ứ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 xuất hiện 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 các sự kiện của ứng dụng
  • Cách đọc số liệu phân tích về ứng dụng xuất hiện 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ị 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ợ Cửa hàng Play/API Google

Bạn đánh giá thế nào về mức độ kinh nghiệm của mình với AdMob?

Người mới bắt đầu Trung cấp Thành thạo

Bạn đánh giá thế nào về mức độ kinh nghiệm của mình với Firebase?

Người mới bắt đầu Trung cấp Thành thạo

2. Thiết lập môi trường phát triển

Tải mã xuống

Nhấp vào nút sau đây để tải tất cả mã dành 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 một thư mục gốc có tên là 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ữ này chứa 4 thư mục như sau:

  • android_studio_folder.png101-base – Mã khởi đầu mà bạn sẽ tạo trong lớp học lập trình này.
  • android_studio_folder.png101-complete_and_102-base – Mã hoàn chỉnh cho lớp học lập trình này và mã khởi đầu cho lớp học lập trình 102.
  • android_studio_folder.png102-complete – Mã hoàn chỉnh cho lớp học lập trình 102.

Nhập ứng dụng khởi đầu

Khởi chạy Android Studio rồi 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 mã bạn đã tải xuống.

Bây giờ, bạn sẽ mở dự án trong Android Studio.

3. Thiết lập đơn vị quảng cáo dạng video có tặng thưởng (Không bắt buộc)

Ứng dụng khởi đầu đã có sẵn một Đơn vị quảng cáo video có tặng thưởng chuyên dụng để 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 tài khoản mới trong tài khoản AdMob của mình.

Để tạo một ứ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 sau:

  1. Chuyển đến AdMob Console.
  2. Trong trình đơn Ứng dụng, hãy nhấp vào "Thêm ứng dụng".
  3. 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?", hãy trả lời "CHƯA".
  4. Đặt tên cho ứng dụng là "Awesome Drawing Quiz" (Đố vui vẽ tranh thú vị), 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.

  1. Nhấp vào trình đơn Ứng dụng trong giao diện người dùng AdMob, sau đó chọn "Awesome Drawing Quiz" trong danh sách ứng dụng.
  2. Nhấp vào THÊM ĐƠN VỊ QUẢNG CÁO để tạo một đơn vị quảng cáo dạng Video có tặng thưởng mới.
  3. Chọn Có tặng thưởng cho Định dạng quảng cáo.

7672f41ec611101b.png

  1. Cung cấp tên của đơn vị quảng cáo theo ý bạn. Sau đó, hãy đặt số lượng phần thưởng thành 1 và vật phẩm thưởng thành "hint" (đây là phần thưởng mà ứng dụng hiện đang tặng cho người dùng). Nhấp vào TẠO ĐƠN VỊ QUẢNG CÁO để tạo một đơn vị quảng cáo video có tặng thưởng mới.

6d067814a2c38264.png

  1. Khi tạo thành công, bạn sẽ thấy hướng dẫn tương tự như sau: ff872a005a07b75e.png
  2. Quay lại dự án Android và cập nhật các hằng số mã ứng dụng AdMob và mã đơn vị quảng cáo thành các 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 một dự án mới trong Bảng điều khiển của Firebase

  1. Truy cập vào bảng điều khiển của Firebase.
  2. Chọn Thêm dự án rồi đặt tên cho dự án là "Bài kiểm tra vẽ thú vị". Đảm bảo rằng bạn đã bật nút chọn Bật Google Analytics cho dự án này.
  3. Chọn tài khoản Google Analytics mà bạn dự định sử dụng. Đối với hầu hết mọi người, việc chọn Tài khoản mặc định cho Firebase là đủ, nhưng nếu bạn muốn sử dụng một tài khoản Google Analytics khác, hãy chọn tài khoản đó tại đây.
  4. Nhấp vào Tạo dự án.

Thêm ứng dụng Android

  1. 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.
  2. Nhập tên gói của lớp học lập trình: com.codelab.awesomedrawingquiz
  3. Đặt biệt hiệu cho ứng dụng: Bài kiểm tra vẽ thú vị
  4. Để trống trường SHA-1 vì dự án này không yêu cầu SHA-1.
  5. 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 nơi bạn có thể tải tệp cấu hình chứa tất cả siêu dữ liệu cần thiết của Firebase cho ứng dụng của mình. Nhấp vào Tải google-service.json xuống rồi sao chép tệp này vào thư mục android_studio_folder.pngapp trong dự án của bạn.

32419a0fa25a1405.png

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 từng 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, Firebase Analytics SDK và phiên bản Firebase Core SDK.

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 dùng tệp google-services.json để định cấu hình ứng dụng của bạn 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 đó, hãy áp dụng trình bổ trợ google-services bằng cách thêm một dòng vào 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 SDK Firebase 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 của bạn với các tệp Gradle

Để đảm bảo rằng ứng dụng của bạn 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 trình đơn File > Sync Project with Gradle Files (Tệp > Đồng bộ hoá dự án với các tệp Gradle) để đồng bộ hoá dự án với các tệp Gradle.

5. Liên kết AdMob với dự án Firebase

Hoàn tất các bước dưới đây để liên kết các ứng dụng của bạn với Firebase.

  1. Đăng nhập vào tài khoản AdMob của bạn tại https://apps.admob.com.
  2. Nhấp vào Ứng dụng trong thanh bên.
  3. Chọn "Câu hỏi vẽ hình siêu đỉnh". Nếu không thấy ứ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 danh sách tất cả các ứng dụng mà bạn đã thêm vào AdMob.
  4. Nhấp vào Cài đặt ứng dụng trong thanh bên.
  5. Nhấp vào Liên kết với Firebase.
  6. Chọn phương án "Liên kết với một dự án Firebase hiện có và tạo một ứng dụng Firebase mới". Sau đó, hãy chọn dự án "Awesome Drawing Quiz" (Bài kiểm tra vẽ thú vị) trong trình đơn thả xuống.
  7. 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 với dự án Firebase, ứng dụng đó sẽ mở khoá một số tính năng bổ sung trên cả bảng điều khiển AdMob và bảng điều khiển của Firebase như sau:

Thẻ doanh thu (AdMob)

Trên thẻ Doanh thu, bạn có thể xem tổng quan về tất cả các nguồn doanh thu có thể có ở 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
  • Số lượt mua hàng thương mại điện tử

10fe118249e11150.png

Thẻ chỉ số người dùng (AdMob)

Trong thẻ chỉ số người dùng, bạn có thể xem mức độ ảnh hưởng của các thay đổi đối với trải nghiệm quảng cáo đến hành vi của người dùng.

5f56366f1b31d4a1.png

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 rõ cách người dùng tương tác với quảng cáo có tặng thưởng của họ.

658a2868777690ea.png

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 giao dịch mua hàng trong ứng dụng và giao dịch mua hàng thương mại điện tử.

98cb283977b023a.png

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à lượt tặng thưởng) được tự động thu thập và có thể sử dụng trong Google Analytics cho Firebase.

bf77bd8c00c1441b.png

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 khi ứng dụng khởi động.

15f1d8041988974c.png

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 của bản vẽ bằng cách sử dụng gợi ý xuất hiện ở trên cùng. Từ đó, bạn có thể suy luận chữ cái đầu tiên và độ dài của tên bản vẽ.

8e87e96256d6874a.png 9c4a0143c3234cb2.png

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 một gợi ý giúp bạn đoán ra câu trả lời. Bạn có thể nhận thêm một gợi ý bằng cách nhấp vào nút "GỢI Ý" và xem một quảng cáo dạng video có tặng thưởng. Sau khi bạn xem xong quảng cáo, một chữ cái khác sẽ được tiết lộ làm phần thưởng.

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

7. Thêm sự kiện trong ứng dụng

Để hiểu rõ hành trình của người dùng trong Awesome Drawing Quiz (Đố vui vẽ tranh siêu đỉnh), 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

Đã kích hoạt...

Tham số

game_start

khi một người dùng bắt đầu một trò chơi mới

không có

level_start

khi một người dùng bắt đầu một cấp độ mới (một câu đố 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 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 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 Quảng cáo dạng video có tặng thưởng

ad_unit_id

level_success

khi người dùng gửi câu trả lời chính xác (vượt qua một cấp độ)

level_name, number_of_attempts, elapsed_time_sec, hint_used

level_fail

khi người dùng bỏ qua một cấp độ

level_name, number_of_attempts, elapsed_time_sec, hint_used

game_complete

khi trò chơi kết thúc

number_of_correct_answers

Sau đây là nội dung mô tả về từng thông số được liên kết với từng 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 hình vẽ xuất hiện trong cấp độ (ví dụ: "quả chuối")

level_wrong_answer

level_name

khi người dùng gửi câu trả lời sai

ad_reward_prompt

ad_unit_id

Mã đơn vị quảng cáo được 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 được 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 hình vẽ xuất hiện trong cấp độ (ví dụ: "quả chuối")

level_success

number_of_attempts

Số lần thử để vượt qua một cấp độ

level_success

elapsed_time_sec

Thời gian đã trôi qua để hoàn thành 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 dạng video có tặng thưởng) hay không để vượt qua một cấp độ (1: sử dụng gợi ý / 0: vượt qua một cấp độ mà không cần gợi ý)

level_fail

level_name

Tên của hình vẽ xuất hiện trong cấp độ (ví dụ: "quả chuối")

level_fail

number_of_attempts

Số lần thử để vượt qua một cấp độ

level_fail

elapsed_time_sec

Thời gian đã trôi qua để hoàn thành 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 dạng video có tặng thưởng) hay không để vượt qua một cấp độ (1: sử dụng gợi ý / 0: vượt qua một cấp độ mà không cần gợi ý)

game_complete

number_of_correct_answers

Số cấp đã hoàn thành trong trò chơi

Tạo một lớp trợ giúp để ghi lại các sự kiện tuỳ chỉnh

Để dễ dàng ghi nhật ký sự kiện phân tích, bạn sẽ tạo một lớp trợ giúp để quản lý các 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) và đặt tên là QuizAnalytics.kt trong gói com.codelab.awesomedrawingquiz. Tạo các trường xác định tên của sự kiện tuỳ chỉnh và thông số của sự kiện đó.

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 tiện ích giúp bạn ghi lại các sự kiện tuỳ chỉnh trong trò chơi. Xin lưu ý rằng hầu hết các sự kiện tuỳ chỉnh đều có thông số để bạn có thêm bối cảnh của từng sự kiện. Cũng xin lưu ý rằng Analytics đã xác định sẵn một số tên và thông số sự kiện (FirebaseAnalytics.Event.LEVEL_NAMEFirebaseAnalytics.Event.LEVEL_START), vì vậy, chúng ta sẽ sử dụng những tên và thông số đó.

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 nhật ký 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ư bạn đã làm trước đó 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 phiên bản FirebaseAnalytics đến 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 các 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.

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ừ phiên bản 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_successlevel_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à thất bại.

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()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()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 đo lường của quá trình phát triển và có thể giúp bạn phát hiện mọi lỗi trong quá trình triển khai tính năng 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 gộp lại với nhau trong khoảng thời gian khoảng một giờ và được tải lên cùng nhau. Để xác thực việc triển khai Analytics ngay lập tức, bạn cần bật chế độ Gỡ lỗi trên thiết bị phát triển để tải 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:

  1. Mở cửa sổ công cụ Terminal (Dòng lệnh) trong Android Studio (View > Tool Windows > Terminal (Xem > Cửa sổ công cụ > Dòng lệnh)).

c8dc1b4f08a224b8.png

  1. Thực thi lệnh sau (đảm bảo thiết bị Android kiểm thử đượ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 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ậ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 Phân tích > 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.

827059255d09ac00.png

Bạn có thể truy cập vào 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ề tham số được liên kết với sự kiện level_start.

475db00d05d03ab8.png

Vui lòng tham khảo bài viết về DebugView trên trung tâm trợ giúp để biết thêm thông tin.

9. Bật phương diện và chỉ số tuỳ chỉnh

Theo mặc định, Google Analytics cho Firebase sẽ 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 báo cáo một cách rõ ràng cho thông số đó. Sau đó, Google Analytics cho Firebase có thể hiển thị các thẻ bổ sung để cho biết số liệu thống kê về thông số tuỳ chỉnh.

Cách đăng ký phương diện và chỉ số tuỳ chỉnh:

  1. Chuyển đến bảng điều khiển của Firebase rồi chọn dự án Awesome Drawing Quiz mà bạn đã tạo trước đó.
  2. Nhấp vào Phân tích > Sự kiện trong trình đơn điều hướng.
  1. Nhấp vào Quản lý định nghĩa tùy chỉnh.
  2. Trong thẻ Phương diện tuỳ chỉnh, hãy nhấp vào Tạo phương diện tuỳ chỉnh.
  3. 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 việc đăng ký thông số.

3d20ee9d7de74e9b.png

  1. 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.
  2. 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

Vì đã thêm một số sự kiện trong trò chơi, nên bạn 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. Sau đây là một số 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ó số câu trả lời sai nhiều nhất?

Để trả lời câu hỏi này, bạn nên tìm hiểu xem 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ị được liên kết với thông số level_name trên thẻ đó như sau.

25da426bbc0c612c.png

Theo ảnh chụp màn hình ở trên, bạn có thể dễ dàng nhận thấy horizon có số lượng câu trả lời sai cao nhất, tức là cấp độ này khó hơn 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 nhận đượ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 để duy trì tỷ lệ giữ chân cao.

Trung bình, người chơi đã thử bao nhiêu lần để vượt qua một cấp độ?

Trong Bài kiểm tra vẽ vui nhộn, người dùng có thể gửi câu trả lời cho mỗi cấp độ bao nhiêu lần tuỳ ý.

Vì đã bật tính năng báo cáo thông số trên 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:

43de290f9f1a0ac9.png

Bạn có thể sử dụng thông tin chi tiết tại đây để tối ưu hoá độ khó trung bình của trò chơi. Ví dụ: nếu số lần thử trung bình quá gần 1, bạn có thể cân nhắc tăng độ khó của trò chơi.

Người dùng có cố gắng giải quyết câu hỏi bằng cách xem gợi ý, mặc dù cuối cùng họ không vượt qua được cấp độ 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 khiến người dùng đưa ra quyết định này.

Tuy nhiên, vì trò chơi có thể gợi ý cho người chơi sau khi họ xem Quảng cáo dạng video có tặng thưởng, nên bạn cần biết liệu người dùng có cố gắng vượt qua 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 trung bình của các thông số sự kiện hint_used. Xin lưu ý rằng giá trị của tham số là 1 nếu một gợi ý đã được sử dụng và là 0 nếu một gợi ý không được sử dụng.

313814372cd7c8a4.png

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 cho những người dùng này. Ngoài ra, bạn đang bỏ lỡ 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 tặng phần thưởng lớn hơn để người dùng có thể tương tác sâu hơn với trò chơi, 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 đã được hoàn thành trong mỗi trò chơi?

Mỗi trò chơi trong Bài kiểm tra vẽ vui nhộn có tổng cộng 6 cấp độ. Sau khi người dùng hoàn thành 6 cấp độ (bất kể họ đã hoàn thành hay thất bại ở mỗi cấp độ), sự kiện game_complete sẽ được kích hoạt với number_of_correct_answers làm tham số. Tham số number_of_correct_answers cho biết số lượng cấp độ mà người dùng đã trả lời đúng.

Nhấp vào sự kiện game_complete trong báo cáo sự kiện. Trong báo cáo sự kiện game_complete, hãy tìm thẻ number_of_correct_answers. Bạn sẽ thấy số lượng trung bình của các thông số sự kiện number_of_correct_answers.

d9eeaa019d1bceb4.png

Nếu số lượng cấp độ đã hoàn thành trung bình quá thấp, bạn nên cân nhắc sắp xếp lại các cấp độ trong trò chơi để giúp mọi người dễ dàng vượt qua các cấp độ ban đầu hơn, nhờ đó họ có thể tiếp tục chơi trò chơi của bạn mà không cảm thấy nhàm chán.

11. Đã xong!

Bạn đã hoàn tất Lớp học lập trình AdMob+Firebase 101 cho Android. Bạn có thể tìm thấy mã hoàn chỉnh cho Lớp học lập trình này trong thư mục android_studio_folder.png101-complete_and_102-base.

Trong phần tiếp theo của Lớp học lập trình AdMob + Firebase, bạn sẽ tìm hiểu cách sử dụng một phễu để trực quan hoá luồng sự kiện của ứ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ị tham số trong trò chơi mà không cần bản cập nhật ứng dụng.