1. บทนำ
โฆษณาเป็นส่วนสำคัญของประสบการณ์การใช้งานแอปโดยรวม การติดตั้งใช้งานโฆษณาที่ดีจะช่วยปรับปรุงประสบการณ์การใช้งานแอปโดยรวม รวมถึงปรับปรุงการคงผู้ใช้ไว้และการมีส่วนร่วมของผู้ใช้ได้ด้วย เช่น โฆษณาที่มีการให้รางวัลช่วยให้คุณสามารถให้รางวัลผู้ใช้ด้วยสกุลเงินหรือไอเทมที่ซื้อในแอปจากการที่ผู้ใช้ดูโฆษณาวิดีโอ เพื่อให้ผู้ใช้สามารถก้าวไปสู่ระดับใหม่ๆ ได้ในกรณีที่ผู้ใช้อาจติดขัดและเลิกใช้งาน
อย่างไรก็ตาม การสร้างประสบการณ์การใช้งานโฆษณาที่ยอดเยี่ยมไม่ใช่เรื่องง่าย คุณอาจมีคำถาม เช่น คุณควรแสดงโฆษณาเหล่านี้บ่อยแค่ไหน คุณควรแสดงข้อความเหล่านี้ที่ไหนและเมื่อใด รางวัลควรเป็นอะไร น่าเสียดายที่คำตอบจะแตกต่างกันไปในแต่ละแอปและแต่ละตําแหน่ง ไม่มีคำตอบที่ตายตัว
Google Analytics สำหรับ Firebase, AdMob และเครื่องมืออื่นๆ ที่มีประสิทธิภาพแต่ใช้งานง่ายอีกหลายอย่างที่ Firebase มีให้ช่วยให้การปรับแต่งแอปตามข้อมูลทำได้ง่ายและมีประสิทธิภาพมากขึ้น วันนี้เราจะมาแนะนำวิธีเริ่มต้นใช้งาน
สิ่งที่คุณจะสร้าง
Codelab นี้เป็น Codelab แรกใน 3 รายการที่จะแนะนำวิธีสร้างแอปชื่อ Awesome Drawing Quiz ซึ่งเป็นเกมที่ให้ผู้เล่นทายชื่อของภาพวาด โดยจะแสดงให้เห็นวิธีผสานรวมโฆษณาที่มีการให้รางวัลและบริการ Firebase ในเกม
ใน Codelab นี้ คุณจะได้ผสานรวม Google Analytics สําหรับ Firebase เพื่อบันทึกเหตุการณ์สําคัญบางอย่างในแอป นอกจากนี้ คุณยังจะได้เรียนรู้วิธีอ่านข้อมูลวิเคราะห์แอปที่แสดงในคอนโซล Firebase
|
|
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่า Google Analytics สําหรับ Firebase ในแอป
- วิธีบันทึกเหตุการณ์ในแอป
- วิธีอ่านข้อมูลวิเคราะห์แอปที่แสดงในคอนโซล Firebase
สิ่งที่คุณต้องมี
- Unity 2018.4.4f1 ขึ้นไป
- Xcode 10 ขึ้นไป (เพื่อสร้างเป้าหมายสำหรับ iOS)
- บัญชี Google
- อุปกรณ์ทดสอบที่ใช้ Android 5.0 ขึ้นไปพร้อมสาย USB เพื่อเชื่อมต่ออุปกรณ์ หรือโปรแกรมจำลอง Android ที่เรียกใช้ AVD(อุปกรณ์เสมือน Android) พร้อมอิมเมจระบบที่รองรับ Play Store/Google APIs
- อุปกรณ์ iOS หรือโปรแกรมจำลองที่ใช้ iOS 8.0 ขึ้นไป
คุณจะให้คะแนนระดับประสบการณ์การใช้งาน AdMob เท่าใด
คุณจะให้คะแนนระดับประสบการณ์การใช้งาน Firebase เท่าใด
2. ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์
ดาวน์โหลดโค้ด
คลิกปุ่มต่อไปนี้เพื่อดาวน์โหลดโค้ดทั้งหมดสำหรับ Codelab นี้
แตกไฟล์ ZIP ที่ดาวน์โหลด การดำเนินการนี้จะแตกไฟล์โฟลเดอร์รูทชื่อ admob-firebase-codelabs-unity-master
...หรือโคลนที่เก็บ GitHub จากบรรทัดคำสั่ง
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-unity
ที่เก็บจะมีโฟลเดอร์ 4 โฟลเดอร์ดังนี้
101-base - โค้ดเริ่มต้นที่คุณจะสร้างใน Codelab นี้
101-complete_and_102-base - โค้ดที่เสร็จสมบูรณ์สำหรับ Codelab นี้และโค้ดเริ่มต้นสำหรับ Codelab 102
102-complete - โค้ดที่เสร็จสมบูรณ์สำหรับ Codelab 102
เตรียมไฟล์ที่จำเป็น
Awesome Drawing Quiz ใช้โค้ดโอเพนซอร์สหลายรายการซึ่งจำเป็นต่อการคอมไพล์และเรียกใช้โปรเจ็กต์
เปิดเทอร์มินัล แล้วย้ายไปที่ไดเรกทอรีรากของที่เก็บ จากนั้นเรียกใช้ ./gradlew :prepareThirdPartyFiles (gradlew.bat :prepareThirdPartyFiles ใน Windows) จากเทอร์มินัลเพื่อคัดลอกไฟล์ที่จำเป็นลงในโปรเจ็กต์
นำเข้าแอปเริ่มต้น
เปิด Unity แล้วเลือก "เปิด" ในหน้าจอต้อนรับ จากนั้นเลือกไดเรกทอรี 101-base จากโค้ดที่คุณดาวน์โหลด
ตอนนี้คุณควรเปิดโปรเจ็กต์ใน Unity ได้แล้ว
3. ตั้งค่าหน่วยโฆษณาวิดีโอที่มีการให้รางวัล (ไม่บังคับ)
แอปเริ่มต้นมีหน่วยโฆษณาวิดีโอที่มีการให้รางวัลโดยเฉพาะเพื่อความสะดวกของคุณอยู่แล้ว คุณข้ามขั้นตอนนี้ได้หากไม่ต้องการสร้างบัญชีใหม่ภายใต้บัญชี AdMob
การตั้งค่าสำหรับ Android
หากต้องการสร้างแอป AdMob ใหม่ในบัญชี โปรดทำตามวิธีการต่อไปนี้
- ไปที่คอนโซล AdMob
- จากเมนูแอป ให้คลิก "เพิ่มแอป"
- เมื่อระบบถามว่า "คุณได้เผยแพร่แอปบน Google Play หรือ App Store แล้วใช่ไหม" ให้ตอบว่า "ไม่"
- ตั้งชื่อแอปว่า "Awesome Drawing Quiz" เลือก "Android" เป็นแพลตฟอร์ม แล้วคลิก "เพิ่ม"
เมื่อสร้างแอป AdMob ในบัญชีแล้ว ให้ทำตามขั้นตอนที่อธิบายไว้ด้านล่างเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่
- คลิกเมนูแอปในส่วนหน้าของ AdMob แล้วเลือก "Awesome Drawing Quiz" จากรายการแอป
- คลิกเมนูหน่วยโฆษณา แล้วคลิกเพิ่มหน่วยโฆษณาเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่
- เลือกมีการให้รางวัลสำหรับรูปแบบโฆษณา

- ระบุชื่อหน่วยโฆษณาตามที่ต้องการ จากนั้นตั้งค่าจำนวนรางวัลเป็น 1 และตั้งค่าไอเท็มของรางวัลเป็น "คำใบ้" (ไอเท็มเหล่านี้คือรางวัลที่แอปมอบให้แก่ผู้ใช้ในปัจจุบัน) แล้วคลิกสร้างหน่วยโฆษณาเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่

- เมื่อสร้างสำเร็จแล้ว คุณจะเห็นวิธีการดังต่อไปนี้

- กลับไปที่โปรเจ็กต์ Unity แล้วอัปเดตค่าคงที่รหัสแอป AdMob และรหัสหน่วยโฆษณาให้เป็นค่าที่คุณสร้างไว้ในขั้นตอนก่อนหน้า
Ads/AdManager.cs
namespace AwesomeDrawingQuiz.Ads {
public class AdManager {
public const string APP_ID_ANDROID = "YOUR_ADMOB_APP_ID";
...
#elif UNITY_ANDROID
private const string APP_ID = APP_ID_ANDROID;
public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";
...
}
}
การตั้งค่าสำหรับ iOS
หากต้องการสร้างแอป AdMob ใหม่ในบัญชี โปรดทำตามวิธีการต่อไปนี้
- ไปที่คอนโซล AdMob
- จากเมนูแอป ให้คลิก "เพิ่มแอป"
- เมื่อระบบถามว่า "คุณได้เผยแพร่แอปบน Google Play หรือ App Store แล้วใช่ไหม" ให้ตอบว่า "ไม่"
- ตั้งชื่อแอปว่า "Awesome Drawing Quiz" เลือก "iOS" เป็นแพลตฟอร์ม แล้วคลิก "เพิ่ม"
เมื่อสร้างแอป AdMob ในบัญชีแล้ว ให้ทำตามขั้นตอนที่อธิบายไว้ด้านล่างเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่
- คลิกเมนูแอปในส่วนหน้าของ AdMob แล้วเลือก "Awesome Drawing Quiz" จากรายการแอป
- คลิกเมนูหน่วยโฆษณา แล้วคลิกเพิ่มหน่วยโฆษณาเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่
- เลือกมีการให้รางวัลสำหรับรูปแบบโฆษณา

- ระบุชื่อหน่วยโฆษณาตามที่ต้องการ จากนั้นตั้งค่าจำนวนรางวัลเป็น 1 และตั้งค่าไอเท็มของรางวัลเป็น "คำใบ้" (ไอเท็มเหล่านี้คือรางวัลที่แอปมอบให้แก่ผู้ใช้ในปัจจุบัน) แล้วคลิกสร้างหน่วยโฆษณาเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่

- เมื่อสร้างสำเร็จแล้ว คุณจะเห็นวิธีการดังต่อไปนี้

- กลับไปที่โปรเจ็กต์ Unity แล้วอัปเดตค่าคงที่รหัสแอป AdMob และรหัสหน่วยโฆษณาให้เป็นค่าที่คุณสร้างไว้ในขั้นตอนก่อนหน้า
Ads/AdManager.cs
namespace AwesomeDrawingQuiz.Ads {
public class AdManager {
public const string APP_ID_IOS = "YOUR_ADMOB_APP_ID";
...
#elif UNITY_IOS
private const string APP_ID = APP_ID_IOS;
public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";
...
}
}
4. เพิ่มปลั๊กอิน Unity สำหรับ Google Mobile Ads
นำเข้าปลั๊กอิน
หากต้องการแสดงโฆษณา AdMob ในแอป Unity คุณต้องเพิ่มปลั๊กอิน Unity สำหรับโฆษณาในอุปกรณ์เคลื่อนที่ของ Google ลงในโปรเจ็กต์
- ดาวน์โหลดแพ็กเกจปลั๊กอิน Unity สำหรับ Google Mobile Ads 3.18.1 (โปรดทราบว่า Codelab นี้อาจใช้ร่วมกับปลั๊กอินเวอร์ชันอื่นไม่ได้)
- ในโปรเจ็กต์ Unity ของ Awesome Drawing Quiz ในโปรเจ็กต์ ให้ไปที่ชิ้นงาน > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
- นําเข้า GoogleMobileAds.unitypackage ไปยังโปรเจ็กต์ที่คุณดาวน์โหลด
กำหนดค่ารหัสแอป AdMob
ในโปรแกรมแก้ไข Unity ให้เลือกชิ้นงาน > โฆษณา Google ในอุปกรณ์เคลื่อนที่ > การตั้งค่าจากเมนู

เปิดใช้ AdMob โดยคลิกช่องทําเครื่องหมายเปิดใช้ในส่วน Google AdMob จากนั้นป้อนรหัสแอป AdMob ดังนี้
- Android :
ca-app-pub-3940256099942544~3048611032 - iOS:
ca-app-pub-3940256099942544~2753522596

5. ตั้งค่าโปรเจ็กต์ Firebase
สร้างโปรเจ็กต์ใหม่จากคอนโซล Firebase
- ไปที่คอนโซล Firebase
- เลือกเพิ่มโปรเจ็กต์ แล้วตั้งชื่อโปรเจ็กต์ว่า "แบบทดสอบวาดภาพสุดเจ๋ง"
เพิ่มแอป Unity
- จากหน้าจอภาพรวมของโปรเจ็กต์ใหม่ ให้คลิกเพิ่ม Firebase ไปยังแอป Unity
- เลือกช่องทำเครื่องหมาย "ลงทะเบียนเป็นแอป iOS"
- ป้อนรหัสชุด iOS เป็น com.codelab.awesomedrawingquiz.unity
- ระบุชื่อเล่นของแอปเป็น Awesome Drawing Quiz (Unity บน iOS)
- เลือกช่องทำเครื่องหมายลงทะเบียนเป็นแอป Android
- ป้อนชื่อแพ็กเกจ Android เป็น com.codelab.awesomedrawingquiz.unity
- ระบุชื่อเล่นของแอปเป็น Awesome Drawing Quiz (Unity ใน Android)
- เลือกลงทะเบียนแอปเพื่อลงทะเบียนทั้งแอป Android และ iOS
เพิ่มไฟล์กำหนดค่า Firebase ลงในโปรเจ็กต์ Unity
จากนั้นระบบจะแจ้งให้คุณไปยังหน้าจอที่ดาวน์โหลดไฟล์การกำหนดค่าซึ่งมีข้อมูลเมตา Firebase ที่จำเป็นทั้งหมดสำหรับแอปได้ ให้ดาวน์โหลดไฟล์ google-service.json และ GoogleService-Info.plist แล้วย้ายทั้ง 2 ไฟล์ไปยังโฟลเดอร์
Assets ในโปรเจ็กต์ Unity

เพิ่ม Firebase Analytics SDK
- ดาวน์โหลด Firebase Unity SDK 5.5.0 แล้วแยกไฟล์ ZIP ไว้ที่ใดก็ได้ที่คุณสะดวก
- เปิดโปรเจ็กต์ Unity ของ Awesome Drawing Quiz แล้วไปที่ชิ้นงาน > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
- นำเข้า SDK การกำหนดค่าระยะไกล (
dotnet4/FirebaseAnalytics.unitypackage) จาก SDK ที่แยกไฟล์แล้ว - คลิกนำเข้าในหน้าต่างนำเข้าแพ็กเกจ Unity
6. ลิงก์ AdMob กับโปรเจ็กต์ Firebase
ทำตามขั้นตอนด้านล่างเพื่อลิงก์แอปกับ Firebase
- ลงชื่อเข้าใช้บัญชี AdMob ที่ https://apps.admob.com
- คลิกแอปในแถบด้านข้าง
- เลือก "Awesome Drawing Quiz" หากไม่อยู่ในรายการแอปล่าสุด ให้คลิกดูแอปทั้งหมด เพื่อค้นหาจากรายการแอปทั้งหมดที่คุณเพิ่มไปยัง AdMob
- คลิกการตั้งค่าแอปในแถบด้านข้าง
- คลิกลิงก์กับ Firebase
- เลือกตัวเลือก "ลิงก์กับโปรเจ็กต์ Firebase ที่มีอยู่และสร้างแอป Firebase ใหม่" จากนั้นเลือกโปรเจ็กต์ "Awesome Drawing Quiz" จากเมนูแบบเลื่อนลง
- เมื่อคลิกปุ่ม "ดำเนินการต่อ" คุณจะเห็นข้อความ "ลิงก์สำเร็จแล้ว" คลิกปุ่ม "เสร็จสิ้น" เพื่อดำเนินการให้เสร็จสมบูรณ์
เมื่อลิงก์แอป AdMob กับโปรเจ็กต์ Firebase แล้ว คุณจะใช้ฟีเจอร์เพิ่มเติมบางอย่างได้ทั้งในคอนโซล AdMob และ Firebase ดังนี้
การ์ดรายได้ (AdMob)
จากการ์ดรายได้ คุณจะดูแหล่งที่มาของรายได้ทั้งหมดที่เป็นไปได้ในที่เดียวได้ แหล่งที่มาของรายได้ที่รองรับมีดังนี้
- AdMob (โดยประมาณ)
- เครือข่ายโฆษณาที่ใช้สื่อกลาง (ที่พบ)
- การซื้อในแอป
- การซื้อผ่านอีคอมเมิร์ซ

การ์ดเมตริกผู้ใช้ (AdMob)
จากการ์ดเมตริกผู้ใช้ คุณจะเห็นว่าการเปลี่ยนแปลงประสบการณ์การใช้งานโฆษณาอาจส่งผลต่อพฤติกรรมของผู้ใช้อย่างไร

รายงานโฆษณาที่มีการให้รางวัล (AdMob)
รายงานโฆษณาที่มีการให้รางวัลมีเมตริกหลากหลายที่จะช่วยให้ผู้เผยแพร่เนื้อหาเข้าใจวิธีที่ผู้ใช้โต้ตอบกับโฆษณาที่มีการให้รางวัล

การ์ดรายได้ทั้งหมด (Firebase)
หลังจากลิงก์แอป AdMob กับ Firebase แล้ว การ์ดรายได้ทั้งหมดในแดชบอร์ด Firebase จะแสดงรายได้จาก AdMob พร้อมกับการซื้อในแอปและการซื้ออีคอมเมิร์ซ

การรายงานเหตุการณ์โฆษณา (Firebase)
ระบบจะรวบรวมเหตุการณ์ที่เฉพาะเจาะจงโฆษณา (เหตุการณ์คลิก เหตุการณ์การแสดงผล และเหตุการณ์รางวัล) โดยอัตโนมัติ และพร้อมใช้งานใน Google Analytics สําหรับ Firebase

7. เรียกใช้โปรเจ็กต์
เมื่อคอมไพล์และเรียกใช้โปรเจ็กต์แล้ว คุณจะเห็นหน้าจอต่อไปนี้เมื่อแอปเริ่มต้น

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

หากไม่ทราบว่าภาพวาดนั้นชื่ออะไร คุณสามารถข้ามเลเวลได้โดยคลิกปุ่ม "ข้าม"
คุณอาจต้องการคำใบ้เพิ่มเติมที่จะช่วยให้คุณเดาคำตอบได้ คุณรับคำใบ้เพิ่มเติมได้โดยคลิกปุ่ม "คำใบ้" แล้วดูโฆษณาวิดีโอที่มีการให้รางวัล หลังจากดูโฆษณาจนจบ คุณจะได้รับตัวอักษรเพิ่ม 1 ตัวเป็นรางวัล

8. เพิ่มเหตุการณ์ของแอป
หากต้องการทําความเข้าใจเส้นทางของผู้ใช้ใน Awesome Drawing Quiz อย่างลึกซึ้ง คุณจะต้องกําหนดเหตุการณ์ที่กําหนดเอง 2-3 รายการที่ติดตามพฤติกรรมของผู้ใช้ในเกมดังนี้
ชื่อเหตุการณ์ | ทริกเกอร์แล้ว... | พารามิเตอร์ |
game_start | เมื่อผู้ใช้เริ่มเกมใหม่ | ไม่มี |
level_start | เมื่อผู้ใช้เริ่มด่านใหม่ (แบบทดสอบการวาดภาพใหม่) ภายในสเตจ (มี 6 ระดับใน 1 ระยะ) | level_name |
level_wrong_answer | เมื่อผู้ใช้ส่งคำตอบที่ไม่ถูกต้อง | level_name |
ad_reward_prompt | เมื่อผู้ใช้แตะปุ่มคำใบ้และได้รับแจ้งให้ดูโฆษณาวิดีโอที่มีการให้รางวัล | ad_unit_id |
ad_reward_impression | เมื่อผู้ใช้เริ่มดูโฆษณาวิดีโอที่มีการให้รางวัล | ad_unit_id |
level_success | เมื่อผู้ใช้ส่งคำตอบที่ถูกต้อง (ผ่านด่าน) | level_name, number_of_attempts, elapsed_time_sec, hint_used |
level_fail | เมื่อผู้ใช้ข้ามระดับ | level_name, number_of_attempts, elapsed_time_sec, hint_used |
game_complete | เมื่อเกมจบ | number_of_correct_answers |
คําอธิบายของพารามิเตอร์แต่ละรายการที่เชื่อมโยงกับเหตุการณ์แต่ละรายการมีดังนี้
ชื่อเหตุการณ์ | ชื่อพารามิเตอร์ | คำอธิบาย |
level_start | level_name | ชื่อของภาพวาดที่แสดงในระดับ (เช่น "กล้วย") |
level_wrong_answer | level_name | ชื่อของภาพวาดที่แสดงในระดับ (เช่น "กล้วย") |
ad_reward_prompt | ad_unit_id | รหัสหน่วยโฆษณาที่ใช้เพื่อแสดงโฆษณาวิดีโอที่มีการให้รางวัล |
ad_reward_impression | ad_unit_id | รหัสหน่วยโฆษณาที่ใช้เพื่อแสดงโฆษณาวิดีโอที่มีการให้รางวัล |
level_success | level_name | ชื่อของภาพวาดที่แสดงในระดับ (เช่น "กล้วย") |
level_success | number_of_attempts | จำนวนครั้งที่พยายามผ่านด่าน |
level_success | elapsed_time_sec | เวลาที่ผ่านไปในการเคลียร์ด่าน หน่วยเป็นวินาที |
level_success | hint_used | ผู้ใช้ใช้คำใบ้ (ดูโฆษณาวิดีโอที่มีการให้รางวัล) หรือไม่เพื่อผ่านด่าน (1: ใช้คำใบ้ / 0: ผ่านด่านโดยไม่ใช้คำใบ้) |
level_fail | level_name | ชื่อของภาพวาดที่แสดงในระดับ (เช่น "กล้วย") |
level_fail | number_of_attempts | จำนวนครั้งที่พยายามผ่านด่าน |
level_fail | elapsed_time_sec | เวลาที่ผ่านไปในการเคลียร์ด่าน หน่วยเป็นวินาที |
level_fail | hint_used | ผู้ใช้ใช้คำใบ้ (ดูโฆษณาวิดีโอที่มีการให้รางวัล) หรือไม่เพื่อผ่านด่าน (1: ใช้คำใบ้ / 0: ผ่านด่านโดยไม่ใช้คำใบ้) |
game_complete | number_of_correct_answers | จำนวนด่านที่ผ่านในเกม |
สร้างคลาสตัวช่วยสำหรับการบันทึกเหตุการณ์ที่กำหนดเอง
หากต้องการบันทึกเหตุการณ์การวิเคราะห์อย่างง่ายดาย คุณจะต้องสร้างคลาส Helper เพื่อจัดการเหตุการณ์ที่กำหนดเอง
ก่อนอื่น ให้สร้างโฟลเดอร์ใหม่ภายใต้โฟลเดอร์ Assets/Scripts แล้วตั้งชื่อว่า Analytics จากนั้นสร้าง C# Script ใหม่และตั้งชื่อเป็น QuizAnalytics.cs ในโฟลเดอร์ Analytics
เพิ่มโค้ดด้านล่างลงในไฟล์ QuizAnalytics.cs
Analytics/QuizAnalytics.cs
using Firebase.Analytics;
namespace AwesomeDrawingQuiz.Analytics {
public class QuizAnalytics {
private const string EVENT_AD_REWARD_PROMPT = "ad_reward_prompt";
private const string EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression";
private const string EVENT_LEVEL_FAIL = "level_fail";
private const string EVENT_LEVEL_SUCCESS = "level_success";
private const string EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer";
private const string EVENT_GAME_START = "game_start";
private const string EVENT_GAME_COMPLETE = "game_complete";
private const string PARAM_AD_UNIT_ID = "ad_unit_id";
private const string PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec";
private const string PARAM_HINT_USED = "hint_used";
private const string PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts";
private const string PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers";
public const string SCREEN_MAIN = "main";
public const string SCREEN_GAME = "game";
public static void LogGameStart() {
FirebaseAnalytics.LogEvent(EVENT_GAME_START);
}
public static void LogLevelStart(string levelName) {
FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventLevelStart,
FirebaseAnalytics.ParameterLevelName, levelName);
}
public static void LogLevelWrongAnswer(string levelName) {
FirebaseAnalytics.LogEvent(EVENT_LEVEL_WRONG_ANSWER,
FirebaseAnalytics.ParameterLevelName, levelName);
}
public static void LogAdRewardPrompt(string adUnitId) {
FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_PROMPT, PARAM_AD_UNIT_ID, adUnitId);
}
public static void LogAdRewardImpression(string adUnitId) {
FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_IMPRESSION, PARAM_AD_UNIT_ID, adUnitId);
}
public static void LogLevelSuccess(
string levelName, int numberOfAttemps, int elapsedTimeInSec, bool hintUsed
) {
FirebaseAnalytics.LogEvent(EVENT_LEVEL_SUCCESS, new Parameter[] {
new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttemps),
new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
});
}
public static void LogLevelFail(
string levelName, int numberOfAttempts, int elapsedTimeInSec, bool hintUsed
) {
FirebaseAnalytics.LogEvent(EVENT_LEVEL_FAIL, new Parameter[] {
new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts),
new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
});
}
public static void LogGameComplete(int numberOfCorrectAnswers) {
FirebaseAnalytics.LogEvent(EVENT_GAME_COMPLETE,
PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers);
}
public static void SetScreenName(string screenName) {
FirebaseAnalytics.SetCurrentScreen(screenName, null);
}
}
}
บันทึกเหตุการณ์การวิเคราะห์ในเกม
เปิดไฟล์ Game.cs ในโฟลเดอร์ Assets/Scripts/Scenes หากต้องการใช้คลาส QuizAnalytics ซึ่งอยู่ในเนมสเปซ AwesomeDrawingQuiz.Analytics ให้เพิ่มคำสั่ง using ดังนี้
Scenes/Game.cs
using AwesomeDrawingQuiz.Ads;
// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;
...
namespace AwesomeDrawingQuiz.Scene {
...
}
จากนั้นในStart() ให้เรียกใช้ QuizAnalytics.SetScreenName() เพื่อเปลี่ยนชื่อหน้าจอปัจจุบัน นอกจากนี้ ให้โทรหาQuizAnalytics.LogGameStart()เพื่อระบุว่าเกมเริ่มแล้ว
Scenes/Game.cs
void Start () {
// TODO: Log screen name (101)
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_GAME);
...
SetHintButtonEnabled(false);
// TODO: Log game_start event (101)
QuizAnalytics.LogGameStart();
...
}
จากนั้นในฟังก์ชันเรียกกลับ ให้เพิ่มการเรียกเพื่อบันทึกเหตุการณ์ที่กําหนดเองดังนี้
Scenes/Game.cs
public void OnClickHint() {
// TODO: Log ad_reward_prompt event (101)
QuizAnalytics.LogAdRewardPrompt(AdManager.AD_UNIT_ID);
...
}
...
public void OnAdStarted(object sender, EventArgs args) {
// TODO: Log ad_reward_impression event (101)
QuizAnalytics.LogAdRewardImpression(AdManager.AD_UNIT_ID);
}
...
public void OnGameOver(object sender, GameOverEventArgs args) {
// TODO: Log game_complete event (101)
QuizAnalytics.LogGameComplete(args.NumCorrectAnswers);
...
}
public void OnLevelCleared(object sender, LevelClearEventArgs args) {
// TODO: Log level_success event (101)
QuizAnalytics.LogLevelSuccess(
args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);
...
}
public void OnLevelSkipped(object sender, LevelSkipEventArgs args) {
// TODO: Log level_fail event (101)
QuizAnalytics.LogLevelFail(
args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);
}
public void OnNewLevel(object sender, NewLevelEventArgs args) {
// TODO: Log level_start event (101)
QuizAnalytics.LogLevelStart(args.Drawing.word);
...
}
public void OnWrongAnwser(object sender, WrongAnswerEventArgs args) {
// TODO: Log level_wrong_answer event (101)
QuizAnalytics.LogLevelWrongAnswer(args.Drawing.word);
...
}
สุดท้าย ให้อัปเดตไฟล์ Main.cs ในโฟลเดอร์ Assets/Scripts/Scenes คุณควรตรวจสอบว่า Firebase พร้อมใช้งานหรือไม่ก่อนที่จะเรียกใช้เมธอดใดๆ ใน Firebase SDK
Scenes/Main.cs
using AwesomeDrawingQuiz.Ads;
// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;
...
namespace AwesomeDrawingQuiz.Scene {
public class Main : MonoBehaviour {
...
void Start () {
Screen.sleepTimeout = SleepTimeout.SystemSetting;
#if UNITY_ANDROID
// Disable 'Start a game' button until
// Firebase dependencies are ready to use on the Android
buttonStartGame.interactable = false;
// TODO: Check Google Play Services on Android (101)
// Check Google Play Services on Android device is up to date
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
Debug.Log("All Firebase services are available");
// TODO: Set screen name (101)
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
} else {
throw new System.InvalidOperationException(System.String.Format(
"Could not resolve all Firebase dependencies: {0}", dependencyStatus));
}
}).ContinueWith(task => {
// Enable 'Start a game' button
UnityMainThreadDispatcher.Instance()
.Enqueue(() => buttonStartGame.interactable = true);
});
#else
// TODO: Set screen name (101)
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
#endif
}
...
}
}
9. แก้ไขข้อบกพร่องของเหตุการณ์ Analytics
คุณสามารถใช้ DebugView เพื่อยืนยันว่าระบบบันทึกเหตุการณ์อย่างถูกต้อง DebugView ช่วยให้คุณดูข้อมูลเหตุการณ์ดิบที่แอปบันทึกไว้ในอุปกรณ์การพัฒนาได้แบบเกือบเรียลไทม์
ซึ่งมีประโยชน์อย่างยิ่งสําหรับการตรวจสอบความถูกต้องในระยะการวัดผลของการพัฒนา และช่วยให้คุณค้นพบข้อผิดพลาดในการติดตั้งใช้งาน Analytics
เปิดใช้โหมดแก้ไขข้อบกพร่องใน Android
โดยทั่วไปแล้ว ระบบจะจัดกลุ่มเหตุการณ์ที่บันทึกในแอปเป็นชุดในช่วงเวลาประมาณ 1 ชั่วโมงและอัปโหลดพร้อมกัน หากต้องการตรวจสอบการติดตั้งใช้งาน Analytics ในทันที คุณต้องเปิดใช้โหมดแก้ไขข้อบกพร่องในอุปกรณ์ที่ใช้พัฒนาซอฟต์แวร์เพื่ออัปโหลดเหตุการณ์โดยมีความล่าช้าน้อยที่สุด
ก่อนอื่น ให้เปิดเครื่องมือเทอร์มินัลใน Android Studio โดยจะอยู่ที่แถบเครื่องมือด้านล่าง

จากนั้นเรียกใช้คำสั่งต่อไปนี้ (ตรวจสอบว่าอุปกรณ์ Android สำหรับทดสอบเชื่อมต่อกับคอมพิวเตอร์หรือ Android Emulator กำลังทำงานอยู่)
adb shell setprop debug.firebase.analytics.app com.google.codelab.awesomedrawingquiz
การทำงานนี้จะยังคงอยู่จนกว่าคุณจะปิดใช้โหมดแก้ไขข้อบกพร่องอย่างชัดแจ้งโดยใช้คำสั่งต่อไปนี้
adb shell setprop debug.firebase.analytics.app .none.
เปิดใช้โหมดแก้ไขข้อบกพร่องใน iOS
ในการเปิดใช้โหมดแก้ไขข้อบกพร่องของ Analytics ในอุปกรณ์การพัฒนา ให้ระบุอาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้ใน Xcode
-FIRDebugEnabled
การทำงานนี้จะยังคงอยู่จนกว่าคุณจะปิดใช้โหมดแก้ไขข้อบกพร่องอย่างชัดแจ้งโดยระบุอาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้
-FIRDebugDisabled
แก้ไขข้อบกพร่องของเหตุการณ์ Analytics ด้วย DebugView
เมื่อเปิดใช้โหมดแก้ไขข้อบกพร่องในอุปกรณ์ทดสอบแล้ว ให้ไปที่คอนโซล Firebase แล้วเลือก DebugView จากเมนู จากนั้นในอุปกรณ์ทดสอบ ให้เล่นเกมเพื่อดูการบันทึกเหตุการณ์และแสดงในรายงาน DebugView

คุณเข้าถึงข้อมูลโดยละเอียดเกี่ยวกับแต่ละเหตุการณ์ได้โดยคลิกชื่อเหตุการณ์ ตัวอย่างเช่น ภาพหน้าจอต่อไปนี้แสดงรายละเอียดพารามิเตอร์ที่เชื่อมโยงกับเหตุการณ์ level_start

ดูรายละเอียดเพิ่มเติมได้ที่บทความในศูนย์ช่วยเหลือเกี่ยวกับ DebugView
10. เปิดใช้การรายงานพารามิเตอร์
Google Analytics สําหรับ Firebase จะรวบรวมจํานวนเหตุการณ์ทั้งหมดโดยค่าเริ่มต้น แต่ต้องเปิดการรายงานสําหรับพารามิเตอร์ที่กําหนดเองอย่างชัดเจนสําหรับพารามิเตอร์เหตุการณ์แต่ละรายการที่คุณสนใจ เมื่อเปิดใช้แล้ว Google Analytics สําหรับ Firebase จะแสดงการ์ดเพิ่มเติมเพื่อแสดงสถิติสําหรับพารามิเตอร์ที่กําหนดเอง
วิธีการบันทึกพารามิเตอร์ที่กำหนดเองสำหรับเหตุการณ์
- ไปที่คอนโซล Firebase แล้วเลือกโปรเจ็กต์ Awesome Drawing Quiz ที่คุณสร้างไว้ก่อนหน้านี้
- คลิกกิจกรรมจากเมนูการนำทาง
- ในแถวสำหรับเหตุการณ์ที่คุณต้องการแก้ไข ให้คลิก
> แก้ไขการรายงานพารามิเตอร์

- ป้อนชื่อของพารามิเตอร์ที่ต้องการบันทึกในช่องป้อนชื่อพารามิเตอร์
หมายเหตุ: หากไม่พบรายการที่ตรงกัน ให้ป้อนชื่อพารามิเตอร์แล้วคลิก เพิ่ม
5. โปรดดูตารางด้านล่าง แล้วตั้งค่าช่องประเภทเป็นข้อความหรือตัวเลขตามความเหมาะสม สำหรับพารามิเตอร์ที่เป็นตัวเลข โปรดตรวจสอบว่าคุณได้ตั้งค่าช่องหน่วยวัดด้วย 6. คลิกปุ่มบันทึกเพื่อตั้งค่าให้เสร็จสมบูรณ์
เปิดใช้การรายงานพารามิเตอร์ในแต่ละเหตุการณ์ที่ระบุไว้ด้านล่าง
ชื่อเหตุการณ์ | ชื่อพารามิเตอร์ | ประเภทพารามิเตอร์ | หน่วยวัด |
level_start | level_name | ข้อความ | ไม่มี |
level_wrong_answer | level_name | ข้อความ | ไม่มี |
level_success | level_name | ข้อความ | ไม่มี |
level_success | number_of_attempts | ตัวเลข | มาตรฐาน |
level_success | elapsed_time_sec | ตัวเลข | วินาที |
level_success | hint_used | ตัวเลข | มาตรฐาน |
level_fail | level_name | ข้อความ | ไม่มี |
level_fail | number_of_attempts | ตัวเลข | มาตรฐาน |
level_fail | elapsed_time_sec | ตัวเลข | วินาที |
level_fail | hint_used | ตัวเลข | มาตรฐาน |
game_complete | number_of_correct_answers | ตัวเลข | มาตรฐาน |
ตัวอย่างต่อไปนี้แสดงการตั้งค่าการรายงานพารามิเตอร์ที่กําหนดเองสําหรับเหตุการณ์ level_success

เมื่อตั้งค่าการรายงานพารามิเตอร์เสร็จแล้ว คุณจะเห็นพารามิเตอร์ที่เชื่อมโยงกับแต่ละเหตุการณ์ที่เปิดการรายงานพารามิเตอร์ไว้

11. ดูข้อมูลเชิงลึกจากรายงานเหตุการณ์
เมื่อเพิ่มเหตุการณ์ 2-3 รายการในเกมแล้ว คุณควรตอบคำถามเกี่ยวกับพฤติกรรมของผู้ใช้ในเกมได้ ต่อไปนี้คือข้อมูลเชิงลึกบางส่วนที่คุณจะได้รับจากรายงานเหตุการณ์ Firebase
ระดับใดที่มีคำตอบผิดมากที่สุด
หากต้องการตอบคำถามนี้ คุณควรดูว่ามีการทริกเกอร์เหตุการณ์ level_wrong_answer กี่ครั้งในแต่ละระดับ
คลิก level_wrong_answer จากรายงานเหตุการณ์ ค้นหาการ์ด level_name ในlevel_wrong_answerรายงานเหตุการณ์ คุณจะเห็นค่าที่เชื่อมโยงกับพารามิเตอร์ level_name ในการ์ดนั้นดังนี้

จากภาพหน้าจอด้านบน คุณจะเห็นได้ง่ายๆ ว่าระดับยากมีจำนวนคำตอบที่ผิดมากที่สุด ซึ่งหมายความว่าระดับนี้ยากสำหรับผู้ใช้เมื่อเทียบกับระดับอื่นๆ
การใช้ข้อมูลเชิงลึกที่คุณได้รับจากที่นี่จะช่วยให้คุณตัดสินใจได้ว่าจะไม่ให้ระดับที่ยากแก่ผู้ใช้มือใหม่เพื่อรักษาอัตราการคงผู้ใช้ไว้สูง
โดยเฉลี่ยแล้ว มีการพยายามเคลียร์ด่านกี่ครั้ง
ในแบบทดสอบภาพวาดสุดเจ๋ง ผู้ใช้สามารถส่งคำตอบของแต่ละเลเวลได้มากเท่าที่ต้องการ
เนื่องจากคุณได้เปิดใช้การรายงานพารามิเตอร์ในพารามิเตอร์ number_of_attempts ในเหตุการณ์ level_success คุณจึงดูเมตริกแบบละเอียดสําหรับพารามิเตอร์นั้นได้
คลิกlevel_successเหตุการณ์จากรายงานเหตุการณ์ ค้นหาการ์ด number_of_attemps ในlevel_successรายงานเหตุการณ์ คุณจะเห็นจำนวนครั้งที่พยายามโดยเฉลี่ยในการ์ดนั้นดังนี้

คุณสามารถใช้ข้อมูลเชิงลึกจากที่นี่เพื่อเพิ่มประสิทธิภาพความยากของเกมโดยเฉลี่ย เช่น หากจำนวนครั้งที่พยายามโดยเฉลี่ยใกล้เคียงกับ 1 มากเกินไป คุณอาจพิจารณาทำให้เกมมีความท้าทายมากขึ้นเล็กน้อย
ผู้ใช้พยายามแก้คำถามโดยรับคำใบ้หรือไม่ แม้ว่าท้ายที่สุดแล้วจะผ่านด่านไม่สำเร็จก็ตาม
เมื่อผู้ใช้ตัดสินใจข้ามด่าน ระบบจะทริกเกอร์level_fail event การตัดสินใจของผู้ใช้อาจมีสาเหตุหลายประการ
อย่างไรก็ตาม เนื่องจากเกมสามารถให้คำใบ้แก่ผู้ใช้หลังจากที่ดูโฆษณาวิดีโอที่มีการให้รางวัลแล้ว จึงเป็นสิ่งสำคัญที่ต้องทราบว่าผู้ใช้พยายามผ่านด่านด้วยความช่วยเหลือจากคำใบ้หรือไม่
คลิกlevel_failเหตุการณ์จากรายงานเหตุการณ์ ค้นหาการ์ด hint_used ในlevel_failรายงานเหตุการณ์ คุณจะเห็นจํานวนhint_usedพารามิเตอร์เหตุการณ์โดยเฉลี่ย โปรดทราบว่าเมื่อใช้คำใบ้ ระบบจะตั้งค่าเป็น 1 แต่จะตั้งค่าเป็น 0 เมื่อไม่ได้ใช้คำใบ้

หากตัวเลขในhint_usedการ์ดใกล้เคียงกับ 0 แสดงว่ารางวัล (คำใบ้) ไม่ดึงดูดผู้ใช้มากนัก นอกจากนี้ คุณยังเสียโอกาสในการเพิ่มรายได้จากโฆษณาวิดีโอที่มีการให้รางวัลด้วย
ดังนั้น คุณควรพิจารณาให้รางวัลที่เป็นประโยชน์ต่อผู้ใช้มากขึ้น เพื่อให้ผู้ใช้มีส่วนร่วมกับเกมได้ลึกซึ้งยิ่งขึ้น รวมถึงเพิ่มรายได้จากโฆษณาวิดีโอที่มีการให้รางวัล
โดยเฉลี่ยแล้ว มีการเคลียร์ด่านกี่ด่านในแต่ละเกม
เกมแบบทดสอบการวาดภาพสุดเจ๋งมีทั้งหมด 6 ระดับในแต่ละเกม เมื่อผู้ใช้เล่นจนจบ 6 ด่าน (ไม่ว่าจะผ่านหรือไม่ผ่านแต่ละด่าน) ระบบจะทริกเกอร์เหตุการณ์ game_complete โดยมี number_of_correct_answers เป็นพารามิเตอร์
เนื่องจาก number_of_correct_answers จะระบุจำนวนด่านที่ผู้ใช้ผ่าน (เมื่อตอบคำถามถูกต้อง) คุณจึงดูคำตอบได้โดยดูเมตริกของพารามิเตอร์ number_of_correct_answers
คลิกgame_complete เหตุการณ์จากรายงานเหตุการณ์ ในรายงานเหตุการณ์ game_complete ให้ค้นหาการ์ด number_of_correct_answers คุณจะเห็นจํานวนnumber_of_correct_answersพารามิเตอร์เหตุการณ์โดยเฉลี่ย

หากจำนวนด่านที่ผ่านโดยเฉลี่ยต่ำเกินไป คุณควรพิจารณาจัดเรียงเกมใหม่เพื่อช่วยให้ผู้เล่นผ่านด่านได้ เพื่อให้ผู้เล่นเล่นเกมของคุณต่อไปได้โดยไม่เบื่อ
12. เสร็จเรียบร้อย
คุณได้ทำ Codelab AdMob+Firebase 101 Unity เสร็จแล้ว คุณดูโค้ดที่เสร็จสมบูรณ์สำหรับ Codelab นี้ได้ในโฟลเดอร์
101-complete_and_102-base
ในส่วนถัดไปของ Codelab AdMob + Firebase คุณจะได้เรียนรู้วิธีใช้ Funnel เพื่อแสดงภาพโฟลว์เหตุการณ์ในแอป นอกจากนี้ ยังจะครอบคลุมวิธีใช้การกำหนดค่าระยะไกลและการทดสอบ A/B เพื่อเพิ่มประสิทธิภาพค่าพารามิเตอร์ในเกมโดยไม่ต้องอัปเดตแอป