1. ภาพรวม
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีผสานรวม C++ Firebase Games SDK ในเกม Android ตัวอย่างโดยใช้ Google Analytics เป็นตัวอย่าง คุณจะเพิ่มฟีเจอร์ที่ต้องการ ผสานรวมตรรกะการวิเคราะห์พื้นฐานเพื่อวัดความคืบหน้าของผู้เล่น และแชร์เกมกับผู้ทดสอบเพื่อรับความคิดเห็นในช่วงแรกได้
คำแนะนำแบบทีละขั้น
หากต้องการทำตาม Codelab นี้กับผู้เขียน โปรดดูวิดีโอนี้
สิ่งที่คุณจะได้เรียนรู้
- วิธีเพิ่ม Firebase ลงในเกมที่ใช้ CMake ของ Android
- วิธีดูว่าคุณต้องใช้ทรัพยากร Dependency ของ C++ และ Gradle ใดบ้าง
- วิธีบันทึกเหตุการณ์ Analytics
- วิธีแก้ไขข้อบกพร่องของเหตุการณ์ Analytics
- วิธีแชร์เกมกับ App Distribution
สิ่งที่คุณต้องมี
- Android Studio
- โค้ดตัวอย่าง
- อุปกรณ์ทดสอบหรือโปรแกรมจำลองที่มีบริการ Google Play
2. รับโค้ดตัวอย่าง
ชำระเงินหรือดาวน์โหลดจาก GitHub
git clone https://github.com/FirebaseExtended/cmake-way-for-firebase.git
ดาวน์โหลด Firebase SDK
MacOS/Linux:
sh download.sh
Windows (จาก PowerShell):
./download.ps1
คุณยังดาวน์โหลด SDK ด้วยตนเองได้ด้วย หากทำเช่นนี้ คุณต้องแตกไฟล์ Firebase C++ SDK ไปยัง /third_party เพื่อให้โฟลเดอร์ชื่อ firebase_cpp_sdk มีรูท CMakeLists.txt จาก Firebase SDK อยู่ในนั้น
3. เรียกใช้เกมตัวอย่าง
ก่อนอื่น ให้เล่นเกมตัวอย่างและตรวจสอบว่าทุกอย่างทำงานได้ เกมนี้เป็นเกมวิ่งแบบไม่มีที่สิ้นสุดที่เรียบง่าย โดยมีด่านที่สร้างขึ้นตามขั้นตอนและปุ่มเดียวสำหรับกระโดด
- เลือกไฟล์ > ใหม่ > นำเข้าโปรเจ็กต์ (หรือเลือกนำเข้าโปรเจ็กต์จากหน้าจอเปิด)
- เปิดโฟลเดอร์
proj.android/ที่รวมอยู่ในที่เก็บ
- [ไม่บังคับ] เปิด
proj.android/gradle.propertiesแล้วค้นหาPROP_APP_ABIคุณอาจนำสถาปัตยกรรมทั้งหมดออก ยกเว้นสถาปัตยกรรมเป้าหมาย เพื่อลดเวลาในการบิลด์PROP_APP_ABI=x86จะสร้างขึ้นสำหรับโปรแกรมจำลองเท่านั้นPROP_APP_ABI=armeabi-v7aจะสร้างขึ้นสำหรับโทรศัพท์ส่วนใหญ่ - คลิกปุ่มแก้ไขข้อบกพร่อง
เพื่อสร้างและเรียกใช้เกม การดำเนินการนี้จะใช้เวลาในการสร้างเกมเอนจิน Cocos2dx
4. การตั้งค่าคอนโซล Firebase
- สร้างโปรเจ็กต์ใหม่ในคอนโซล Firebase

- ตั้งชื่อ เช่น "Popsicle Runner"
- เปิดใช้ Analytics

- เพิ่มหรือสร้างบัญชี Analytics

- เพิ่มแอป Android ใหม่ลงในโปรเจ็กต์

- เพิ่ม
com.firebase.popsiclerunnerเป็นชื่อแพ็กเกจ

- ดาวน์โหลด google-services.json แล้วคัดลอกลงใน
proj.android/app
- ไม่ต้องสนใจวิธีการที่ระบุไว้สำหรับการเพิ่ม Firebase SDK แล้วคลิกถัดไป
- คุณคลิก "ข้ามขั้นตอนนี้" ได้เมื่อระบบขอให้ยืนยันการติดตั้ง
5. เพิ่ม Firebase ลงในเกม
เพิ่ม Firebase SDK ลงใน CMakeLists.txt
เปิดรูทเลเวล CMakeLists.txt ซึ่งควรมีโค้ดต่อไปนี้อยู่ใกล้ด้านบน
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
set(APP_NAME popsiclerunner)
project(${APP_NAME})
และเพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของไฟล์ CMakeLists.txt
CMakeLists.txt
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/firebase_cpp_sdk)
target_link_libraries(${APP_NAME} firebase_analytics firebase_app)
add_subdirectory มี Firebase C++ SDK และทำให้พร้อมใช้งานในเกมนี้
target_link_libraries เชื่อมต่อเกมกับไลบรารี C++ ของ Firebase ที่สร้างขึ้นสำหรับ Android
เพิ่มปลั๊กอินบริการของ Google
หากต้องการเชื่อมต่อ Firebase SDK คุณต้องเพิ่มปลั๊กอินบริการของ Google ลงในสคริปต์บิลด์ Gradle โดยให้เปิดไฟล์ project level build.gradle (อยู่ในโฟลเดอร์ proj.android) และเพิ่ม classpath 'com.google.gms:google-services:4.3.3' เป็นการพึ่งพา buildscript
build.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin
}
}
จากนั้นเพิ่มปลั๊กอินลงในไฟล์ build.gradle ที่ระดับโมดูล (อยู่ในโฟลเดอร์ proj.android/app) เพิ่ม apply plugin: 'com.google.gms.google-services' ใต้ apply plugin: 'com.android.application' ดังนี้
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google Services plugin
ค้นหา C++ SDK ใน Gradle
หากต้องการบอก Gradle ว่าจะค้นหา Firebase C++ SDK ได้ที่ใด ให้เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์ settings.gradle
settings.gradle
gradle.ext.firebase_cpp_sdk_dir = "$settingsDir/../third_party/firebase_cpp_sdk/"
includeBuild "$gradle.ext.firebase_cpp_sdk_dir"
เพิ่มการอ้างอิง Android
หากต้องการเชื่อมต่อทรัพยากร Dependency ของ Android สำหรับ Firebase ให้เปิดไฟล์ Gradle ระดับโมดูลสำหรับ popsicle_runner (ใน proj.android/app/build.gradle) แล้วเพิ่มข้อมูลต่อไปนี้ก่อนส่วน dependences { ทั่วไปที่ส่วนท้าย
build.gradle
apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
firebaseCpp.dependencies {
analytics
}
AndroidX และ Jetifier
เพิ่มการรองรับ AndroidX และ Jetifier โดยเปิด gradle.properties แล้วเพิ่มข้อความนี้ที่ส่วนท้าย
gradle.properties
android.useAndroidX = true
android.enableJetifier = true
เริ่มต้น Firebase ในเกม
เริ่มต้น Firebase ในเกมโดยเปิด Classes/AppDelegate.cpp เพิ่ม#includeคำสั่งต่อไปนี้ที่ด้านบน
AppDelegate.cpp
#include <firebase/app.h>
#include <firebase/analytics.h>
จากนั้นเพิ่ม App::Create และเริ่มต้นฟีเจอร์ Firebase ที่คุณต้องการ โดยค้นหา AppDelegate::applicationDidFinishLaunching แล้วเพิ่มโค้ดนี้ก่อน auto scene = MainMenuScene::createScene()
AppDelegate.cpp
{
using namespace firebase;
auto app = App::Create(JniHelper::getEnv(), JniHelper::getActivity());
analytics::Initialize(*app);
}
หากคุณแก้ไขข้อบกพร่องของเกมและรีเฟรชแดชบอร์ด Firebase คุณควรเห็นผู้ใช้ใหม่ 1 รายปรากฏขึ้นหลังจากผ่านไปประมาณ 1 นาที
6. เพิ่ม Analytics
แม้ในช่วงแรกของการพัฒนา Analytics ก็เป็นเครื่องมือที่มีประโยชน์ในการวัดวิธีที่ผู้ทดสอบเวอร์ชันเบต้าโต้ตอบกับเกม มีข้อมูลวิเคราะห์บางอย่างที่รวบรวมโดยอัตโนมัติ เช่น รายงานการคงผู้ใช้ แต่การเพิ่มเหตุการณ์ที่กําหนดเองซึ่งปรับให้เหมาะกับเกมของคุณโดยเฉพาะก็มีประโยชน์เช่นกัน
จุดเริ่มต้นที่ดีคือการบันทึกเหตุการณ์การวิเคราะห์เมื่อผู้เล่นเริ่มเลเวล เราสามารถใช้จำนวนเหตุการณ์การเริ่มด่านเพื่อดูความถี่ที่ผู้เล่นอาจเล่นเกมซ้ำในเซสชัน

นอกจากนี้ เราจะบันทึกเหตุการณ์เมื่อผู้เล่นตายพร้อมกับระยะทางที่ผู้เล่นไปถึง ซึ่งจะช่วยให้เราเห็นว่าการเปลี่ยนแปลงที่เราทำนั้นส่งผลต่อระยะเวลาของเซสชันเดียวอย่างไร และช่วยให้เราทราบว่าผู้เล่นต้องการเกมที่สั้น/ยากขึ้นหรือยาว/ง่ายขึ้น
เพิ่มส่วนหัวของ Analytics
เปิด Classes/PopsicleScene.cpp แล้วเพิ่มส่วนหัวของ Firebase ที่ด้านบนเพื่อให้เราเรียกใช้ข้อมูลวิเคราะห์ได้
PopsicleScene.cpp
#include <firebase/analytics.h>
#include <firebase/analytics/event_names.h>
บันทึกเหตุการณ์ Level Start
หากต้องการบันทึกเหตุการณ์เมื่อ Cocos2dx Director จัดฉากนี้ ให้ค้นหาฟังก์ชันที่สร้างขึ้น PopsicleScene::onEnter() ป้อนโค้ดต่อไปนี้เพื่อบันทึกเหตุการณ์ "เริ่มเลเวล" ที่นี่
PopsicleScene.cpp
using namespace firebase;
analytics::LogEvent(analytics::kEventLevelStart);
บันทึกเหตุการณ์สิ้นสุดระดับ
หากต้องการดูว่าผู้เล่นทำได้ดีเพียงใด ให้บันทึกเหตุการณ์ "จบเลเวล" พร้อมกับระยะทางที่ผู้เล่นไปถึงเมื่อตายในที่สุด โดยค้นหา PopsicleScene::gameOver() แล้วเพิ่มข้อความนี้ที่ส่วนท้ายของบล็อก if(!_gameOver) { ก่อนตั้งค่า _gameOver = true;
PopsicleScene.cpp
{
using namespace firebase;
analytics::LogEvent(analytics::kEventLevelEnd, "distance", _lastDistance);
}
kEventLevelEnd คือเหตุการณ์สิ้นสุดเลเวล ส่วน "distance" คือ "พารามิเตอร์เหตุการณ์" เราจะเพิ่มระยะทางที่บันทึกไว้ล่าสุดที่นี่ ซึ่งเป็นค่าประมาณที่ดีสำหรับระยะทางที่ผู้เล่นเดินทางก่อนที่จะตาย
7. การทดสอบเหตุการณ์
คุณคลิกแก้ไขข้อบกพร่อง
ได้แล้ว แต่ระบบจะใช้เวลาสักครู่ในการรายงานเหตุการณ์ในแดชบอร์ด Analytics สาเหตุมี 2 ประการ ได้แก่ 1) ระบบจะจัดกลุ่มและอัปโหลดเหตุการณ์ประมาณ 1 ครั้งต่อชั่วโมงเพื่อประหยัดแบตเตอรี่ และ 2) ระบบจะสร้างรายงานทุก 24 ชั่วโมง
การเปิดใช้โหมดแก้ไขข้อบกพร่อง
คุณยังคงแก้ไขข้อบกพร่องของเหตุการณ์ Analytics ได้โดยการตั้งค่าอุปกรณ์เป็นโหมดแก้ไขข้อบกพร่อง
ก่อนอื่น ให้ตรวจสอบว่าคุณได้ติดตั้งและตั้งค่า Android Debug Bridge (ADB) แล้ว การพิมพ์ adb devices ควรแสดงอุปกรณ์ที่คุณจะทดสอบ
$ adb devices List of devices attached emulator-5554 device
จากนั้นเรียกใช้คำสั่ง adb shell ต่อไปนี้
adb shell setprop debug.firebase.analytics.app com.firebase.popsiclerunner
ซึ่งจะบอก Firebase Analytics ให้บันทึกเหตุการณ์ทันที และจะยกเว้นเหตุการณ์เหล่านั้นจากรายงานปกติโดยอัตโนมัติเพื่อหลีกเลี่ยงการปนเปื้อนเหตุการณ์ที่ใช้งานจริงเมื่อทำการทดสอบ หากต้องการยกเลิกการดำเนินการนี้ในภายหลัง เพียงเขียนว่า
adb shell setprop debug.firebase.analytics.app .none.
การดูเหตุการณ์
เปิด "DebugView" ในคอนโซล Firebase 
คลิกแก้ไขข้อบกพร่อง
แล้วเล่นเกม คุณควรเห็นเหตุการณ์ใหม่ปรากฏขึ้นแทบจะทันทีหลังจากที่เกิดขึ้นในเกม 
หากขยายlevel_endเหตุการณ์ คุณจะเห็นพารามิเตอร์ "ระยะทาง" ที่กําหนดเองซึ่งคุณบันทึกไว้ด้วย 
8. การหาผู้ทดสอบ
จากนั้นคุณจะต้องให้ผู้คนได้เห็นเกมของคุณ ไม่ว่าจะเป็นคนในสตูดิโอ เพื่อนสนิท หรือคนในชุมชน Firebase App Distribution เป็นวิธีที่ยอดเยี่ยมในการเชิญผู้เล่นมาเล่นเกมของคุณ
การสร้างไบนารีแบบสแตนด์อโลน
ก่อนอื่นให้สร้าง APK แบบสแตนด์อโลนเพื่อแชร์จาก Build > Build Bundles(s) / APK(s) > Build APK(s) 
Android Studio จะแสดงกล่องโต้ตอบที่ช่วยให้คุณค้นหาไฟล์ที่สร้างขึ้นได้ หากพลาด คุณสามารถคลิก "บันทึกเหตุการณ์" เพื่อรับลิงก์อีกครั้งได้ 
อัปโหลดไปยัง Firebase App Distribution
- เปิด App Distribution แล้วคลิก "เริ่มต้นใช้งาน"

- ลากและวางไฟล์ .apk ลงในกล่องที่ระบุว่า "ลากไฟล์ .apk มาที่นี่เพื่อสร้างรุ่นใหม่"

- ป้อนอีเมลของคุณเป็นผู้ทดสอบคนแรก

- คลิก "ถัดไป"
- เพิ่มคำอธิบายแล้วคลิกเผยแพร่
เชิญผู้ทดสอบ
คุณสร้างลิงก์คำเชิญได้แทนที่จะต้องป้อนอีเมลทุกรายการด้วยตนเอง เมื่อได้ผู้ใช้ผ่านลิงก์คำเชิญนี้ คุณจะเพิ่มผู้ใช้ลงในกลุ่มผู้ทดสอบได้ด้วย ซึ่งจะช่วยให้คุณแยกผู้ทดสอบภายในออกจากผู้ทดสอบภายนอกได้ เป็นต้น
- คลิก "ผู้ทดสอบและกลุ่ม"

- สร้างกลุ่มใหม่
และตั้งชื่อกลุ่ม เช่น "ผู้ทดสอบ Android" - คลิก "ลิงก์คำเชิญ"

- คลิก "ลิงก์คำเชิญใหม่"
- ตั้งค่ากลุ่มที่นี่จากเมนูแบบเลื่อนลง

- คลิก "สร้างลิงก์"
- คลิก "คัดลอกลิงก์" แล้วแชร์ตามที่คุณต้องการ
9. ขอแสดงความยินดี
คุณเพิ่มข้อมูลวิเคราะห์ลงในเกมที่สร้างด้วย C++ เชิญเพื่อนบางคนมาเล่น และรู้วิธีค้นหาและลิงก์ไลบรารี Firebase ในระบบบิลด์ที่ใช้ CMake และ Gradle ซึ่งเป็นเรื่องปกติในการพัฒนา Android เรียบร้อยแล้ว
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีเพิ่ม Firebase ลงในเกมที่ใช้ CMake ของ Android
- วิธีดูว่าคุณต้องใช้ทรัพยากร Dependency ของ C++ และ Gradle ใดบ้าง
- วิธีบันทึกเหตุการณ์ Analytics
- วิธีแก้ไขข้อบกพร่องของเหตุการณ์ Analytics
- วิธีแชร์เกมกับ App Distribution
ขั้นตอนถัดไป
- ลองบันทึกคะแนนสูงสุดของผู้ใช้ใน Realtime Database โดยไม่ระบุตัวตน
- บันทึกเหตุการณ์ Analytics ในเกมของคุณเอง
- ลองเพิ่มข้อมูลวิเคราะห์ลงในเกม iOS
ดูข้อมูลเพิ่มเติม
- ดูรายการเหตุการณ์เฉพาะเกม และพิจารณาว่าเหตุการณ์เหล่านั้นอาจเหมาะกับเกมของคุณอย่างไร