AdMob+Firebase 101 Unity: การตั้งค่าและ ข้อมูลเบื้องต้นเกี่ยวกับ Analytics
เกี่ยวกับ Codelab นี้
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 หรือยัง" คำตอบ "NO"
- ตั้งชื่อแอป "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 หรือยัง" คำตอบ "NO"
- ตั้งชื่อแอป "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 เพิ่มปลั๊กอินร่วมสำหรับโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google
นำเข้าปลั๊กอิน
ในการแสดงโฆษณา AdMob บนแอป Unity คุณต้องเพิ่มปลั๊กอินร่วมสำหรับโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google ลงในโครงการ
- ดาวน์โหลดแพ็กเกจ Google Mobile Ads Unity Plugin 3.18.1 (โปรดทราบว่า Codelab นี้อาจทำงานร่วมกับปลั๊กอินเวอร์ชันอื่นไม่ได้)
- ในโปรเจ็กต์ Awesome Drawing Quiz Unity ในโปรเจ็กต์ ให้ไปที่เนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
- นำเข้า 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
- เลือกเพิ่มโปรเจ็กต์ แล้วตั้งชื่อโปรเจ็กต์ของคุณว่า "Awesome Drawing Quiz"
เพิ่มแอป 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 แล้วย้ายไฟล์ทั้งสองไปยังโฟลเดอร์ Assets ในโปรเจ็กต์ Unity
เพิ่ม Firebase Analytics SDK
- ดาวน์โหลด Firebase Unity SDK 5.5.0 แล้วแตกไฟล์ ZIP ในจุดที่คุณสะดวก
- เปิดโปรเจ็กต์ Awesome Drawing Quiz ใน Unity แล้วไปที่เนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
- จาก SDK ที่แยกไฟล์แล้ว ให้นำเข้า SDK การกำหนดค่าระยะไกล (
dotnet4/FirebaseAnalytics.unitypackage
) - ในหน้าต่างนำเข้าแพ็กเกจ Unity ให้คลิกนำเข้า
6 ลิงก์ AdMob กับโปรเจ็กต์ Firebase
ทำตามขั้นตอนด้านล่างเพื่อลิงก์แอปกับ Firebase
- ลงชื่อเข้าใช้บัญชี AdMob ที่ https://apps.admob.com
- คลิก "แอป" ในแถบด้านข้าง
- เลือก "แบบทดสอบการวาดภาพสุดเจ๋ง" หากไม่เห็นแอปในรายชื่อแอปล่าสุด ให้คลิก "ดูแอปทั้งหมด" เพื่อค้นหาจากรายชื่อแอปทั้งหมดที่คุณเพิ่มลงใน 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 เพิ่มเหตุการณ์ของแอป
เพื่อทำความเข้าใจเส้นทางของผู้ใช้อย่างลึกซึ้งในแบบทดสอบการวาดภาพสุดเจ๋ง คุณจะกำหนดเหตุการณ์ที่กำหนดเอง 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, จำนวน_attempts, elapsed_time_sec, hint_used |
level_fail | เมื่อผู้ใช้ข้ามระดับ | level_name, จำนวน_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 | จำนวนระดับที่เคลียร์ในเกม |
สร้างคลาสตัวช่วยสำหรับการบันทึกเหตุการณ์ที่กำหนดเอง
หากต้องการบันทึกเหตุการณ์ Analytics อย่างง่ายดาย คุณจะต้องสร้างชั้นเรียนตัวช่วยเพื่อจัดการเหตุการณ์ที่กำหนดเอง
ขั้นแรก ให้สร้างโฟลเดอร์ใหม่ในโฟลเดอร์ Assets/Scripts
และตั้งชื่อว่า Analytics
จากนั้นสร้างสคริปต์ C# ใหม่และตั้งชื่อว่า 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
ให้เพิ่มคำสั่งโดยใช้ดังนี้
ฉาก/Game.cs
using AwesomeDrawingQuiz.Ads;
// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;
...
namespace AwesomeDrawingQuiz.Scene {
...
}
ถัดไป ในฟังก์ชัน Start()
ให้เรียก QuizAnalytics.SetScreenName()
เพื่อเปลี่ยนชื่อของหน้าจอปัจจุบัน หรือโทรหา QuizAnalytics.LogGameStart()
เพื่อระบุว่าเกมเริ่มเล่นแล้ว
ฉาก/Game.cs
void Start () {
// TODO: Log screen name (101)
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_GAME);
...
SetHintButtonEnabled(false);
// TODO: Log game_start event (101)
QuizAnalytics.LogGameStart();
...
}
ถัดไป ให้เพิ่มการเรียกเพื่อบันทึกเหตุการณ์ที่กำหนดเองดังนี้ในฟังก์ชัน Callback
ฉาก/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
บรรยากาศ/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 ทำงานอยู่)
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 แล้วเลือกโปรเจ็กต์แบบทดสอบการวาดภาพสุดเจ๋งที่คุณสร้างไว้ก่อนหน้านี้
- คลิกเหตุการณ์จากเมนูการนำทาง
- ในแถวของเหตุการณ์ที่ต้องการแก้ไข ให้คลิก
> แก้ไขการรายงานพารามิเตอร์
- ป้อนชื่อของพารามิเตอร์ที่ต้องการบันทึกในช่องป้อนชื่อพารามิเตอร์
หมายเหตุ: หากไม่พบรายการที่ตรงกัน ให้ป้อนชื่อพารามิเตอร์และคลิก เพิ่ม 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
อาจมีหลายสาเหตุในการตัดสินใจของผู้ใช้
อย่างไรก็ตาม เนื่องจากเกมสามารถให้คำแนะนำหลังจากที่ดูโฆษณาวิดีโอที่มีการให้รางวัล คุณจึงต้องทราบว่าอย่างน้อยผู้ใช้พยายามล้างด่านด้วยคำแนะนำหรือไม่
คลิกเหตุการณ์ 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
เหตุการณ์จากรายงานเหตุการณ์ ค้นหาการ์ด number_of_correct_answers
ในรายงานเหตุการณ์ game_complete คุณจะเห็นจำนวนพารามิเตอร์เหตุการณ์โดยเฉลี่ย number_of_correct_answers
รายการ
หากจำนวนระดับที่ล้างได้โดยเฉลี่ยต่ำเกินไป คุณควรพิจารณาจัดเรียงเกมใหม่เพื่อช่วยให้ผู้ใช้ผ่านด่านหนึ่งๆ ได้ เพื่อที่จะได้เล่นเกมของคุณต่อได้โดยไม่เสียความสนใจ
12 เสร็จเรียบร้อย
คุณเข้าร่วม AdMob+Firebase 101 Unity Codelab เสร็จสมบูรณ์แล้ว คุณดูโค้ดที่สมบูรณ์ของ Codelab นี้ได้ในโฟลเดอร์ 101-complete_and_102-base
ในส่วนถัดไปของ Codelab ของ AdMob+Firebase คุณจะได้เรียนรู้เกี่ยวกับวิธีใช้ Funnel เพื่อแสดงภาพโฟลว์เหตุการณ์ของแอป นอกจากนี้ยังพูดถึงวิธีใช้การกำหนดค่าระยะไกลและการทดสอบ A/B เพื่อเพิ่มประสิทธิภาพค่าพารามิเตอร์ในเกมโดยไม่ต้องอัปเดตแอป