AdMob+Firebase 101 Unity: การตั้งค่าและ ข้อมูลเบื้องต้นเกี่ยวกับ Analytics

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 โฟลเดอร์ดังต่อไปนี้

  • android_studio_folder.png101-base — โค้ดเริ่มต้นที่คุณจะสร้างใน Codelab นี้
  • android_studio_folder.png101-complete_and_102-base — โค้ดสำหรับ Codelab นี้และ เงื่อนไขเริ่มต้นสำหรับ Codelab 102
  • android_studio_folder.png102-complete — โค้ดสำหรับ Codelab 102 เสร็จสมบูรณ์

เตรียมไฟล์ที่จำเป็น

Awesome Drawing Quiz ใช้โค้ดโอเพนซอร์สหลายโค้ด ซึ่งต้องใช้ในการคอมไพล์และเรียกใช้โปรเจ็กต์

เปิดเทอร์มินัลแล้วย้ายไปยังไดเรกทอรีรูทของที่เก็บ จากนั้นเรียกใช้ ./gradlew :prepareThirdPartyFiles (gradlew.bat :prepareThirdPartyFiles ใน Windows) จากเทอร์มินัลเพื่อคัดลอกไฟล์ที่จำเป็นไปยังโปรเจ็กต์

นำเข้าแอปเริ่มต้น

เปิด Unity แล้วเลือก "เปิด" ในหน้าจอต้อนรับ จากนั้นเลือกไดเรกทอรี 101-base จากโค้ดที่คุณดาวน์โหลดมา

ตอนนี้คุณควรเปิดโปรเจ็กต์ใน Unity แล้ว

3. ตั้งค่าหน่วยโฆษณาวิดีโอที่มีการให้รางวัล (ไม่บังคับ)

แอปเริ่มต้นมีหน่วยโฆษณาวิดีโอที่มีการให้รางวัลโดยเฉพาะเพื่อความสะดวกของคุณ คุณสามารถข้ามขั้นตอนนี้ไปได้ หากไม่ต้องการสร้างบัญชีใหม่ในบัญชี AdMob

การตั้งค่าสำหรับ Android

ทำตามวิธีการต่อไปนี้เพื่อสร้างแอป AdMob ใหม่ในบัญชี

  1. ไปที่คอนโซล AdMob
  2. จากเมนูแอป ให้คลิก "เพิ่มแอป"
  3. เมื่อระบบถามว่า "คุณได้เผยแพร่แอปใน Google Play หรือ App Store หรือยัง" คำตอบ "NO"
  4. ตั้งชื่อแอป "Awesome Drawing Quiz," เลือก "Android" เป็นแพลตฟอร์ม แล้วคลิก "เพิ่ม"

เมื่อคุณสร้างแอป AdMob ในบัญชีแล้ว ให้ทำตามขั้นตอนตามที่อธิบายไว้ด้านล่างเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่

  1. คลิกเมนูแอปในส่วนหน้าของ AdMob แล้วเลือก "Awesome Drawing Quiz" จากรายการแอป
  2. คลิกเมนูหน่วยโฆษณา แล้วคลิกเพิ่มหน่วยโฆษณาเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่
  3. เลือกมีการให้รางวัลสำหรับรูปแบบโฆษณา

7672f41ec611101b.png

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

6d067814a2c38264.png

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

4bc1b3b341a5a81c.png

  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 ใหม่ในบัญชี

  1. ไปที่คอนโซล AdMob
  2. จากเมนูแอป ให้คลิก "เพิ่มแอป"
  3. เมื่อระบบถามว่า "คุณได้เผยแพร่แอปใน Google Play หรือ App Store หรือยัง" คำตอบ "NO"
  4. ตั้งชื่อแอป "Awesome Drawing Quiz," เลือก "iOS" เป็นแพลตฟอร์ม แล้วคลิก "เพิ่ม"

เมื่อคุณสร้างแอป AdMob ในบัญชีแล้ว ให้ทำตามขั้นตอนตามที่อธิบายไว้ด้านล่างเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่

  1. คลิกเมนูแอปในส่วนหน้าของ AdMob แล้วเลือก "Awesome Drawing Quiz" จากรายการแอป
  2. คลิกเมนูหน่วยโฆษณา แล้วคลิกเพิ่มหน่วยโฆษณาเพื่อสร้างหน่วยโฆษณาวิดีโอที่มีการให้รางวัลใหม่
  3. เลือกมีการให้รางวัลสำหรับรูปแบบโฆษณา

7672f41ec611101b.png

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

6d067814a2c38264.png

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

4bc1b3b341a5a81c.png

  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 ลงในโครงการ

  1. ดาวน์โหลดแพ็กเกจ Google Mobile Ads Unity Plugin 3.18.1 (โปรดทราบว่า Codelab นี้อาจทำงานร่วมกับปลั๊กอินเวอร์ชันอื่นไม่ได้)
  2. ในโปรเจ็กต์ Awesome Drawing Quiz Unity ในโปรเจ็กต์ ให้ไปที่เนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
  3. นำเข้า GoogleMobileAds.unitypackage ลงในโปรเจ็กต์ที่คุณดาวน์โหลด

กำหนดค่ารหัสแอป AdMob

ในตัวแก้ไข Unity ให้เลือกเนื้อหา > โฆษณาบนมือถือของ Google > การตั้งค่าจากเมนู

44fc84fe88235c1f.png

เปิดใช้ AdMob โดยคลิกช่องทำเครื่องหมายเปิดใช้ในส่วน Google AdMob จากนั้นป้อนรหัสแอป AdMob ดังนี้

  • Android : ca-app-pub-3940256099942544~3048611032
  • iOS: ca-app-pub-3940256099942544~2753522596

a6ad7402d4daf330.png

5. ตั้งค่าโปรเจ็กต์ Firebase

สร้างโปรเจ็กต์ใหม่จากคอนโซล Firebase

  1. ไปที่คอนโซล Firebase
  2. เลือกเพิ่มโปรเจ็กต์ แล้วตั้งชื่อโปรเจ็กต์ของคุณว่า "Awesome Drawing Quiz"

เพิ่มแอป Unity

  1. จากหน้าจอภาพรวมของโปรเจ็กต์ใหม่ ให้คลิกเพิ่ม Firebase ไปยังแอป Unity
  2. ทำเครื่องหมายที่ช่องลงทะเบียนเป็นแอป iOS
  3. ป้อนรหัสชุด iOS เป็น com.codelab.awesomedrawingquiz.unity
  4. ตั้งชื่อเล่นแอปเป็น Awesome Drawing Quiz (Unity บน iOS)
  5. เลือกช่องทำเครื่องหมายลงทะเบียนเป็นแอป Android
  6. ป้อนชื่อแพ็กเกจ Android เป็น com.codelab.awesomedrawingquiz.unity
  7. ตั้งชื่อเล่นแอปเป็น Awesome Drawing Quiz (Unity บน Android)
  8. เลือกลงทะเบียนแอปเพื่อลงทะเบียนทั้งแอป Android และ iOS

เพิ่มไฟล์การกำหนดค่า Firebase ลงในโปรเจ็กต์ Unity

ถัดไป ระบบจะแจ้งคุณในหน้าจอที่คุณสามารถดาวน์โหลดไฟล์การกำหนดค่าที่มีข้อมูลเมตา Firebase ทั้งหมดที่จำเป็นสำหรับแอป ดาวน์โหลดไฟล์ google-service.json และ GoogleService-Info.plist แล้วย้ายไฟล์ทั้งสองไปยังโฟลเดอร์ android_studio_folder.pngAssets ในโปรเจ็กต์ Unity

331c165d80ba105e.png

เพิ่ม Firebase Analytics SDK

  1. ดาวน์โหลด Firebase Unity SDK 5.5.0 แล้วแตกไฟล์ ZIP ในจุดที่คุณสะดวก
  2. เปิดโปรเจ็กต์ Awesome Drawing Quiz ใน Unity แล้วไปที่เนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
  3. จาก SDK ที่แยกไฟล์แล้ว ให้นำเข้า SDK การกำหนดค่าระยะไกล (dotnet4/FirebaseAnalytics.unitypackage)
  4. ในหน้าต่างนำเข้าแพ็กเกจ Unity ให้คลิกนำเข้า

6. ลิงก์ AdMob กับโปรเจ็กต์ Firebase

ทำตามขั้นตอนด้านล่างเพื่อลิงก์แอปกับ Firebase

  1. ลงชื่อเข้าใช้บัญชี AdMob ที่ https://apps.admob.com
  2. คลิก "แอป" ในแถบด้านข้าง
  3. เลือก "แบบทดสอบการวาดภาพสุดเจ๋ง" หากไม่เห็นแอปในรายชื่อแอปล่าสุด ให้คลิก "ดูแอปทั้งหมด" เพื่อค้นหาจากรายชื่อแอปทั้งหมดที่คุณเพิ่มลงใน AdMob
  4. คลิกการตั้งค่าแอปในแถบด้านข้าง
  5. คลิก "ลิงก์กับ Firebase"
  6. เลือกตัวเลือก "ลิงก์กับโปรเจ็กต์ Firebase ที่มีอยู่และสร้างแอป Firebase ใหม่" จากนั้นเลือกโปรเจ็กต์ "Awesome Drawing Quiz" จากเมนูแบบเลื่อนลง
  7. เมื่อคลิกปุ่ม "ดำเนินการต่อ" คุณจะเห็นข้อความ "ลิงก์สำเร็จแล้ว" คลิกปุ่ม "เสร็จสิ้น" เพื่อสิ้นสุดการทำงาน

เมื่อคุณลิงก์แอป AdMob กับโปรเจ็กต์ Firebase แล้ว แอปดังกล่าวจะปลดล็อกฟีเจอร์เพิ่มเติมบางอย่างทั้งในคอนโซล AdMob และ Firebase ดังนี้

การ์ดรายได้ (AdMob)

การ์ดรายได้จะช่วยให้คุณดูแหล่งรายได้ที่เป็นไปได้ทั้งหมดได้ในที่เดียว แหล่งรายได้ที่รองรับมีดังนี้

  • AdMob (โดยประมาณ)
  • เครือข่ายโฆษณาที่ใช้สื่อกลาง (สังเกตการณ์)
  • การซื้อในแอป
  • การซื้อผ่านอีคอมเมิร์ซ

10fe118249e11150.png

การ์ดเมตริกผู้ใช้ (AdMob)

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

5f56366f1b31d4a1.png

รายงานโฆษณาที่มีการให้รางวัล (AdMob)

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

658a2868777690ea.png

การ์ดรายได้ทั้งหมด (Firebase)

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

98cb283977b023a.png

การรายงานเหตุการณ์โฆษณา (Firebase)

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

bf77bd8c00c1441b.png

7. เรียกใช้โปรเจ็กต์

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

f5fbf4565c5d8647.png

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

bbdf4d23fb08a519.png ad82d7e657945c4d.png

หากไม่รู้ว่าภาพวาดชื่ออะไร คุณข้ามระดับได้โดยคลิกปุ่ม "ข้าม"

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

8c33687361f83a13.png b048d6587c10e9df.png

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 ซึ่งอยู่ในแถบเครื่องมือด้านล่าง

c8dc1b4f08a224b8.png

จากนั้นเรียกใช้คำสั่งต่อไปนี้ (ตรวจสอบว่าอุปกรณ์ 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

827059255d09ac00.png

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

475db00d05d03ab8.png

โปรดดูรายละเอียดเพิ่มเติมที่บทความในศูนย์ช่วยเหลือของ DebugView

10. เปิดใช้การรายงานพารามิเตอร์

Google Analytics สําหรับ Firebase จะรวบรวมจํานวนเหตุการณ์ทั้งหมดโดยค่าเริ่มต้น แต่คุณจะต้องเปิดการรายงานสําหรับพารามิเตอร์ที่กําหนดเองอย่างชัดแจ้งสําหรับพารามิเตอร์เหตุการณ์แต่ละรายการที่สนใจ เมื่อเปิดใช้แล้ว Google Analytics สําหรับ Firebase จะแสดงการ์ดเพิ่มเติมเพื่อแสดงสถิติของพารามิเตอร์ที่กําหนดเอง

วิธีการบันทึกพารามิเตอร์ที่กำหนดเองสำหรับเหตุการณ์

  1. ไปที่คอนโซล Firebase แล้วเลือกโปรเจ็กต์แบบทดสอบการวาดภาพสุดเจ๋งที่คุณสร้างไว้ก่อนหน้านี้
  2. คลิกเหตุการณ์จากเมนูการนำทาง
  1. ในแถวของเหตุการณ์ที่ต้องการแก้ไข ให้คลิก 73afe611adf58774.png> แก้ไขการรายงานพารามิเตอร์

aad40de06ee0c3ad.png

  1. ป้อนชื่อของพารามิเตอร์ที่ต้องการบันทึกในช่องป้อนชื่อพารามิเตอร์

หมายเหตุ: หากไม่พบรายการที่ตรงกัน ให้ป้อนชื่อพารามิเตอร์และคลิก เพิ่มe066c761aae4797f.png 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 รายการ

6d569c8c27df2914.png

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

d1a37589d54bca6b.png

11. รับข้อมูลเชิงลึกจากรายงานเหตุการณ์

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

ระดับใดมีจำนวนคำตอบผิดมากที่สุด

ในการตอบคำถามนี้ คุณควรดูจำนวนเหตุการณ์ level_wrong_answer ที่มีการทริกเกอร์ในแต่ละระดับ

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

25da426bbc0c612c.png

จากภาพหน้าจอด้านบน คุณจะเห็นได้ง่ายๆ ว่าขอบฟ้ามีคำตอบที่ผิดมากที่สุด ซึ่งหมายความว่าผู้ใช้ใช้งานได้ยากเมื่อเทียบกับระดับอื่นๆ

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

โดยเฉลี่ยแล้ว คุณพยายามเคลียร์ระดับใดระดับหนึ่ง

ในแบบทดสอบการวาดภาพสุดเจ๋ง ผู้ใช้จะส่งคำตอบสำหรับแต่ละระดับได้มากเท่าที่ต้องการ

เนื่องจากคุณเปิดใช้การรายงานพารามิเตอร์ในพารามิเตอร์ number_of_attempts ในเหตุการณ์ level_success คุณจะดูเมตริกโดยละเอียดของพารามิเตอร์นั้นได้

คลิกเหตุการณ์ level_success จากรายงานเหตุการณ์ ค้นหาการ์ด number_of_attemps ในรายงานเหตุการณ์ level_success คุณจะเห็นจำนวนครั้งโดยเฉลี่ยในบัตรนั้นๆ ดังนี้

43de290f9f1a0ac9.png

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

ผู้ใช้พยายามตอบคำถามด้วยการรับคำแนะนำ แม้ว่าจะตอบคำถามไม่ได้ในขั้นสุดท้ายก็ตาม

เมื่อผู้ใช้ตัดสินใจข้ามระดับ ระบบจะทริกเกอร์เหตุการณ์ level_fail อาจมีหลายสาเหตุในการตัดสินใจของผู้ใช้

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

คลิกเหตุการณ์ level_fail จากรายงานเหตุการณ์ ค้นหาการ์ด hint_used ในรายงานเหตุการณ์ level_fail คุณจะเห็นจำนวนพารามิเตอร์เหตุการณ์โดยเฉลี่ย hint_used รายการ โปรดทราบว่าเมื่อมีการใช้คำแนะนำ ระบบจะตั้งค่าเป็น 1 ขณะที่ตั้งค่าเป็น 0 เมื่อไม่ได้ใช้คำแนะนำ

313814372cd7c8a4.png

หากตัวเลขบนการ์ด 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 รายการ

d9eeaa019d1bceb4.png

หากจำนวนระดับที่ล้างได้โดยเฉลี่ยต่ำเกินไป คุณควรพิจารณาจัดเรียงเกมใหม่เพื่อช่วยให้ผู้ใช้ผ่านด่านหนึ่งๆ ได้ เพื่อที่จะได้เล่นเกมของคุณต่อได้โดยไม่เสียความสนใจ

12. เสร็จเรียบร้อย

คุณเข้าร่วม AdMob+Firebase 101 Unity Codelab เสร็จสมบูรณ์แล้ว คุณดูโค้ดที่สมบูรณ์ของ Codelab นี้ได้ในโฟลเดอร์ android_studio_folder.png101-complete_and_102-base

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