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 đó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?

Người mới tập Trung cấp Thành thạo

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

Người mới tập Trung cấp Thành thạo

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:

  • android_studio_folder.png101-base — Đoạn 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 — Đ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.
  • android_studio_folder.png102-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:

  1. Chuyển đến Bảng điều khiển AdMob.
  2. Trên trình đơn Apps (Ứng dụng), hãy nhấp vào "Add App" (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", câu trả lời "KHÔNG"
  4. Đặ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.

  1. 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.
  2. 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.
  3. Chọn Có tặng thưởng cho định dạng Quảng cáo.

7672f41ec611101b.png.

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

6d067814a2c38264.pngS

  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 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

  1. Truy cập vào bảng điều khiển của Firebase.
  2. 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.
  3. 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.
  4. Nhấp vào Create project (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 của bạn: Bài đố vui về bản vẽ tuyệt vời
  4. Để trống trường SHA-1 vì dự án này không bắt buộc phải dùng 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 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 android_studio_folder.pngapp (ứng dụng) trong dự án của bạn.

32419a0fa25a1405.pngS

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.

  1. Đăng nhập vào tài khoản AdMob tại https://apps.admob.com.
  2. Nhấp vào Ứng dụng trong thanh bên.
  3. 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.
  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 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.
  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 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ử

10fe118249e11150.pngS

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.

5f56366f1b31d4a1.pngS

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ọ.

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 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ử.

98cb283977b023a.pngS

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.

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 đây 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 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ẽ.

8e87e96256d6874a.png. 9c4a0143c3234cb2.pngS

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.

edcf6f0d833ea4ea.png 47ab9a07b1c71711.pngS

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_NAMEFirebaseAnalytics.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.

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_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à 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()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 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:

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

c8dc1b4f08a224b8.png

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

827059255d09ac00.pngS

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.

475db00d05d03ab8.pngS

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:

  1. 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 đó.
  2. Nhấp vào Analytics > 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 quá trình đă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

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.

25da426bbc0c612c.png.

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:

43de290f9f1a0ac9.pngS

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 ý.

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 đố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.

d9eeaa019d1bceb4.png

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