AdMob+Firebase 101 Unity: Setup & مبانی تجزیه و تحلیل

۱. مقدمه

تبلیغات بخش مهمی از تجربه کلی کاربر در اپلیکیشن شما هستند. پیاده‌سازی خوب تبلیغات می‌تواند به بهبود تجربه کلی اپلیکیشن شما و حتی بهبود حفظ و تعامل کاربر کمک کند. به عنوان مثال، تبلیغات جایزه‌دار به شما این امکان را می‌دهد که به کاربران با پول درون‌برنامه‌ای یا اقلامی برای تماشای تبلیغات ویدیویی پاداش دهید، به طوری که کاربران می‌توانند به سطوح جدیدی برسند که در غیر این صورت ممکن بود در آن گیر کنند و از اپلیکیشن خارج شوند.

با این حال، ایجاد یک تجربه تبلیغاتی عالی آسان نیست. ممکن است سوالاتی از این قبیل داشته باشید: چند وقت یکبار باید این تبلیغات را نشان دهید؟ کجا و چه زمانی باید آنها را نشان دهید؟ جایزه باید چه باشد؟ متأسفانه، پاسخ از برنامه‌ای به برنامه دیگر و از مکانی به مکان دیگر متفاوت است. هیچ پاسخ یکسانی برای همه وجود ندارد.

با استفاده از گوگل آنالیتیکس برای فایربیس، ادموب و چندین ابزار قدرتمند و در عین حال آسان دیگر که فایربیس ارائه می‌دهد، تنظیم دقیق برنامه شما به روشی داده‌محور بسیار آسان‌تر و ساده‌تر شده است. امروز، ما به شما نشان خواهیم داد که چگونه می‌توانید شروع کنید!

آنچه خواهید ساخت

این آزمایشگاه کد، اولین از سه آزمایشگاه کدی است که شما را در ساخت برنامه‌ای به نام Awesome Drawing Quiz راهنمایی می‌کند، بازی‌ای که به بازیکنان اجازه می‌دهد نام نقاشی را حدس بزنند. این آزمایشگاه نشان می‌دهد که چگونه می‌توانید تبلیغات پاداشی و سرویس‌های Firebase را در بازی خود بگنجانید.

در این آزمایشگاه کد، شما گوگل آنالیتیکس را برای فایربیس ادغام خواهید کرد تا برخی از رویدادهای مهم برنامه را ثبت کنید. همچنین، یاد خواهید گرفت که چگونه تجزیه و تحلیل برنامه نشان داده شده در کنسول فایربیس را بخوانید.

آنچه یاد خواهید گرفت

  • نحوه تنظیم گوگل آنالیتیکس برای فایربیس در برنامه شما
  • نحوه ثبت رویدادهای برنامه
  • نحوه خواندن تجزیه و تحلیل برنامه نشان داده شده در کنسول Firebase

آنچه نیاز دارید

  • یونیتی ۲۰۱۸.۴.۴f۱ یا بالاتر
  • Xcode نسخه ۱۰ یا بالاتر (برای ساخت تارگت برای iOS)
  • یک حساب گوگل
  • یک دستگاه آزمایشی با اندروید ۵.۰+ به همراه کابل USB برای اتصال دستگاه، یا یک شبیه‌ساز اندروید که AVD (دستگاه مجازی اندروید) را اجرا می‌کند و دارای یک ایمیج سیستمی است که از Play Store/Google APIs پشتیبانی می‌کند.
  • یک دستگاه iOS یا یک شبیه‌ساز که iOS 8.0 یا بالاتر را اجرا می‌کند

سطح تجربه خود را با AdMob چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

سطح تجربه خود با فایربیس را چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

۲. راه‌اندازی محیط توسعه

کد را دانلود کنید

برای دانلود تمام کدهای این codelab روی دکمه زیر کلیک کنید:

فایل زیپ دانلود شده را از حالت فشرده خارج کنید. این کار پوشه ریشه با نام admob-firebase-codelabs-unity-master را از حالت فشرده خارج می‌کند.

... یا مخزن GitHub را از خط فرمان کلون کنید.

$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-unity

این مخزن شامل چهار پوشه به شرح زیر است:

  • پوشه android_studio.png ۱۰۱-base — کد اولیه‌ای که در این آزمایشگاه کد خواهید ساخت.
  • پوشه android_studio.png ۱۰۱-complete_and_102-base — کد تکمیل‌شده برای این codelab و کد آغازین برای codelab 102.
  • پوشه android_studio.png ۱۰۲-کامل — کد کامل‌شده برای آزمایشگاه کد ۱۰۲.

تهیه فایل‌های مورد نیاز

آزمون طراحی فوق‌العاده از چندین کد متن‌باز استفاده می‌کند که برای کامپایل و اجرای پروژه مورد نیاز هستند.

ترمینال را باز کنید و به دایرکتوری ریشه مخزن بروید. سپس، دستور ./gradlew :prepareThirdPartyFiles (در ویندوز gradlew.bat :prepareThirdPartyFiles )‎ را از ترمینال اجرا کنید تا فایل‌های مورد نیاز در پروژه کپی شوند.

برنامه شروع کننده را وارد کنید

یونیتی را اجرا کنید، در صفحه خوشامدگویی «باز کردن» را انتخاب کنید. سپس دایرکتوری 101-base را از کدی که دانلود کرده‌اید انتخاب کنید.

حالا باید پروژه را در یونیتی باز کرده باشید.

۳. راه‌اندازی واحد تبلیغات ویدیویی پاداشی (اختیاری)

برنامه‌ی اولیه برای راحتی شما، از قبل شامل یک واحد تبلیغات ویدیویی پاداشی اختصاصی است. اگر نمی‌خواهید یک واحد جدید در حساب AdMob خود ایجاد کنید، می‌توانید از این مرحله صرف نظر کنید .

تنظیم برای اندروید

برای ایجاد یک برنامه جدید AdMob در حساب کاربری خود، لطفاً دستورالعمل‌های زیر را دنبال کنید:

  1. به کنسول ادموب بروید.
  2. از منوی برنامه‌ها ، روی « افزودن برنامه » کلیک کنید.
  3. وقتی از شما پرسیده شد «آیا برنامه خود را در گوگل پلی یا اپ استور منتشر کرده‌اید؟»، پاسخ « خیر» بود.
  4. نام برنامه را «Awesome Drawing Quiz» بگذارید، «Android» را به عنوان پلتفرم انتخاب کنید، سپس روی « Add » کلیک کنید.

پس از ایجاد یک برنامه AdMob در حساب کاربری خود، مراحل زیر را برای ایجاد یک واحد تبلیغات ویدیویی پاداش‌دار جدید دنبال کنید.

  1. روی منوی برنامه‌ها در بخش کاربری ادموب کلیک کنید، سپس «آزمون نقاشی فوق‌العاده» را از لیست برنامه‌ها انتخاب کنید.
  2. روی منوی واحدهای تبلیغاتی کلیک کنید، سپس برای ایجاد یک واحد تبلیغاتی ویدیوی پاداشی جدید، روی افزودن واحد تبلیغاتی کلیک کنید.
  3. برای قالب تبلیغ، گزینه «پاداش‌دار» (Rewarded) را انتخاب کنید.

7672f41ec611101b.png

  1. نام واحد تبلیغاتی را به دلخواه خود وارد کنید. سپس، مقدار پاداش را روی ۱ و آیتم پاداش را روی «hint» تنظیم کنید (این‌ها پاداش‌هایی هستند که برنامه در حال حاضر به کاربران می‌دهد). و برای ایجاد یک واحد تبلیغاتی ویدیویی پاداش‌دار جدید، روی «ایجاد واحد تبلیغاتی » کلیک کنید.

6d067814a2c38264.png

  1. وقتی با موفقیت ایجاد شد، دستورالعمل‌هایی مانند زیر را مشاهده خواهید کرد.

4bc1b3b341a5a81c.png

  1. به پروژه Unity برگردید و ثابت‌های شناسه برنامه AdMob و شناسه واحد تبلیغات را به مواردی که در مرحله قبل ایجاد کرده‌اید، به‌روزرسانی کنید.

تبلیغات/مدیر تبلیغات.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. به کنسول ادموب بروید.
  2. از منوی برنامه‌ها ، روی « افزودن برنامه » کلیک کنید.
  3. وقتی از شما پرسیده شد «آیا برنامه خود را در گوگل پلی یا اپ استور منتشر کرده‌اید؟»، پاسخ « خیر» بود.
  4. نام برنامه را «Awesome Drawing Quiz» بگذارید، «iOS» را به عنوان پلتفرم انتخاب کنید، سپس روی « Add » کلیک کنید.

پس از ایجاد یک برنامه AdMob در حساب کاربری خود، مراحل زیر را برای ایجاد یک واحد تبلیغات ویدیویی پاداش‌دار جدید دنبال کنید.

  1. روی منوی برنامه‌ها در بخش کاربری ادموب کلیک کنید، سپس «آزمون نقاشی فوق‌العاده» را از لیست برنامه‌ها انتخاب کنید.
  2. روی منوی واحدهای تبلیغاتی کلیک کنید، سپس برای ایجاد یک واحد تبلیغاتی ویدیوی پاداشی جدید، روی افزودن واحد تبلیغاتی کلیک کنید.
  3. برای قالب تبلیغ، گزینه «پاداش‌دار» (Rewarded) را انتخاب کنید.

7672f41ec611101b.png

  1. نام واحد تبلیغاتی را به دلخواه خود وارد کنید. سپس، مقدار پاداش را روی ۱ و آیتم پاداش را روی «hint» تنظیم کنید (این‌ها پاداش‌هایی هستند که برنامه در حال حاضر به کاربران می‌دهد). و برای ایجاد یک واحد تبلیغاتی ویدیویی پاداش‌دار جدید، روی «ایجاد واحد تبلیغاتی » کلیک کنید.

6d067814a2c38264.png

  1. وقتی با موفقیت ایجاد شد، دستورالعمل‌هایی مانند زیر را مشاهده خواهید کرد.

4bc1b3b341a5a81c.png

  1. به پروژه Unity برگردید و ثابت‌های شناسه برنامه AdMob و شناسه واحد تبلیغات را به مواردی که در مرحله قبل ایجاد کرده‌اید، به‌روزرسانی کنید.

تبلیغات/مدیر تبلیغات.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>";

        ...
    }
}

۴. افزونه یونیتی تبلیغات موبایلی گوگل را اضافه کنید

افزونه را وارد کنید

برای نمایش تبلیغات AdMob در برنامه Unity، باید افزونه Google Mobile Ads Unity را به پروژه اضافه کنید.

  1. بسته افزونه Google Mobile Ads Unity نسخه ۳.۱۸.۱ را دانلود کنید. (توجه داشته باشید که این Codelab ممکن است با نسخه دیگر افزونه سازگار نباشد)
  2. در پروژه یونیتی Awesome Drawing Quiz . در پروژه، به مسیر Assets > Import Package > Custom Package بروید.
  3. فایل GoogleMobileAds.unitypackage را به پروژه‌ای که دانلود کرده‌اید، وارد (import) کنید.

شناسه برنامه AdMob را پیکربندی کنید

در ویرایشگر Unity، از منو، Assets > Google Mobile Ads > Settings را انتخاب کنید.

44fc84fe88235c1f.png

با کلیک روی کادر انتخاب Enabled در بخش Google AdMob، AdMob را فعال کنید. سپس شناسه برنامه AdMob را به شرح زیر وارد کنید:

  • اندروید: ca-app-pub-3940256099942544~3048611032
  • iOS: ca-app-pub-3940256099942544~2753522596

a6ad7402d4daf330.png

۵. راه‌اندازی پروژه فایربیس

ایجاد یک پروژه جدید از کنسول Firebase

  1. به کنسول فایربیس بروید.
  2. گزینه «افزودن پروژه» را انتخاب کنید و نام پروژه خود را «آزمون نقاشی فوق‌العاده» بگذارید.

برنامه Unity را اضافه کنید

  1. از صفحه نمای کلی پروژه جدید خود، روی «افزودن فایربیس به برنامه یونیتی» کلیک کنید.
  2. کادر ثبت نام به عنوان برنامه iOS را علامت بزنید.
  3. شناسه بسته iOS را به صورت زیر وارد کنید: com.codelab.awesomedrawingquiz.unity
  4. یک نام مستعار برای برنامه انتخاب کنید: مسابقه نقاشی فوق‌العاده (یونیتی در iOS)
  5. کادر ثبت به عنوان برنامه اندروید را علامت بزنید.
  6. نام بسته اندروید را به صورت زیر وارد کنید: com.codelab.awesomedrawingquiz.unity
  7. یک نام مستعار برای برنامه انتخاب کنید: مسابقه نقاشی فوق‌العاده (یونیتی در اندروید)
  8. برای ثبت هر دو برنامه اندروید و iOS، گزینه ثبت برنامه را انتخاب کنید.

فایل‌های پیکربندی Firebase را به پروژه Unity اضافه کنید

در مرحله بعد، صفحه‌ای به شما نمایش داده می‌شود که می‌توانید در آن یک فایل پیکربندی که شامل تمام متادیتای لازم Firebase برای برنامه شما است را دانلود کنید. فایل‌های google-service.json و GoogleService-Info.plist را دانلود کنید، سپس هر دو را به ... منتقل کنید. پوشه android_studio.png پوشه‌ی Assets در پروژه‌ی Unity.

331c165d80ba105e.png

اضافه کردن کیت توسعه نرم‌افزاری (SDK) فایربیس آنالیتیکس

  1. Firebase Unity SDK 5.5.0 را دانلود کنید و آن را در جایی مناسب از حالت فشرده خارج کنید.
  2. پروژه یونیتی Awesome Drawing Quiz را باز کنید، به مسیر Assets > Import Package > Custom Package بروید.
  3. از SDK استخراج‌شده، SDK مربوط به Remote Config ( dotnet4/FirebaseAnalytics.unitypackage ) را وارد کنید.
  4. در پنجره‌ی «وارد کردن بسته‌ی Unity»، روی «وارد کردن» کلیک کنید.

۶. لینک کردن AdMob به پروژه Firebase

برای اتصال برنامه‌های خود به Firebase، مراحل زیر را انجام دهید.

  1. از طریق آدرس https://apps.admob.com وارد حساب کاربری AdMob خود شوید.
  2. روی برنامه‌ها در نوار کناری کلیک کنید.
  3. «آزمون نقاشی فوق‌العاده» را انتخاب کنید. اگر آن را در فهرست برنامه‌های اخیر نمی‌بینید، می‌توانید روی «مشاهده همه برنامه‌ها» کلیک کنید تا فهرستی از تمام برنامه‌هایی که به AdMob اضافه کرده‌اید را جستجو کنید.
  4. روی تنظیمات برنامه در نوار کناری کلیک کنید.
  5. روی پیوند به فایربیس کلیک کنید.
  6. گزینه «پیوند به یک پروژه Firebase موجود و ایجاد یک برنامه Firebase جدید» را انتخاب کنید. سپس از منوی کشویی، پروژه «آزمون نقاشی فوق‌العاده» را انتخاب کنید.
  7. پس از کلیک بر روی دکمه "ادامه" ، پیام "پیوند با موفقیت انجام شد" را مشاهده خواهید کرد. برای اتمام، روی دکمه "انجام شد" کلیک کنید.

زمانی که برنامه AdMob خود را به پروژه Firebase پیوند دهید، برخی از ویژگی‌های اضافی هم در کنسول AdMob و هم در کنسول Firebase به شرح زیر فعال خواهد شد:

کارت درآمد (ادموب)

از طریق کارت درآمد، می‌توانید نگاهی جامع به تمام جریان‌های درآمدی ممکن در یک مکان واحد داشته باشید. منابع درآمدی پشتیبانی شده به شرح زیر است:

  • ادموب (تخمین زده شده)
  • شبکه‌های تبلیغاتی واسطه‌ای (مشاهده‌شده)
  • خریدهای درون برنامه‌ای
  • خریدهای تجارت الکترونیک

10fe118249e11150.png

کارت معیارهای کاربر (AdMob)

از طریق کارت معیارهای کاربر، می‌توانید ببینید که چگونه تغییرات در تجربه تبلیغات شما ممکن است بر رفتار کاربر تأثیر بگذارد.

5f56366f1b31d4a1.png

گزارش تبلیغات جایزه‌دار (AdMob)

گزارش تبلیغات جایزه‌دار، معیارهای متنوعی را ارائه می‌دهد که به ناشران کمک می‌کند تا نحوه تعامل کاربران با تبلیغات جایزه‌دار خود را درک کنند.

658a2868777690ea.png

کارت درآمد کل (فایربیس)

پس از اینکه برنامه AdMob خود را به Firebase متصل کردید، کارت درآمد کل در داشبورد Firebase، درآمد حاصل از AdMob را به همراه خریدهای درون برنامه‌ای و خریدهای تجارت الکترونیک نمایش می‌دهد.

98cb283977b023a.png

گزارش رویدادهای تبلیغاتی (فایربیس)

رویدادهای خاص تبلیغات (رویدادهای کلیک، نمایش و پاداش) به طور خودکار جمع‌آوری می‌شوند و برای استفاده در Google Analytics برای Firebase در دسترس هستند.

bf77bd8c00c1441b.png

۷. اجرای پروژه

پس از کامپایل و اجرای پروژه، هنگام شروع برنامه، صفحه زیر را مشاهده خواهید کرد.

f5fbf4565c5d8647.png

وقتی روی «شروع بازی» کلیک کنید، یک نقاشی روی صفحه نمایش داده می‌شود. ماموریت شما این است که با استفاده از راهنمایی که در بالا نمایش داده می‌شود، نام نقاشی را حدس بزنید، که از طریق آن می‌توانید حرف اول و طول نام نقاشی را حدس بزنید.

bbdf4d23fb08a519.pngad82d7e657945c4d.png

اگر نام نقاشی را نمی‌دانید، می‌توانید با کلیک بر روی دکمه «رد شدن» از مرحله صرف نظر کنید.

ممکن است به یک سرنخ اضافی نیاز داشته باشید که به شما در حدس زدن پاسخ کمک کند. می‌توانید با کلیک بر روی دکمه «راهنمایی» و تماشای یک تبلیغ ویدیویی جایزه‌دار، یک سرنخ اضافی دریافت کنید. پس از تماشای کامل تبلیغ، یک حرف اضافی به عنوان جایزه نمایش داده می‌شود.

8c33687361f83a13.pngb048d6587c10e9df.png

۸. رویدادهای برنامه را اضافه کنید

برای درک عمیق‌تر سفر کاربر در مسابقه طراحی فوق‌العاده، چند رویداد سفارشی تعریف خواهید کرد که رفتار کاربر را در بازی به شرح زیر ردیابی می‌کنند:

نام رویداد

تحریک شده...

پارامترها

شروع_بازی

وقتی کاربر یک بازی جدید را شروع می‌کند

هیچ کدام

سطح_شروع

وقتی کاربر یک مرحله جدید (یک مسابقه نقاشی جدید) را در یک مرحله شروع می‌کند. (در یک مرحله 6 مرحله وجود دارد)

نام_سطح

سطح_پاسخ_اشتباه

وقتی کاربر پاسخ اشتباهی ارسال می‌کند

نام_سطح

ad_reward_prompt

وقتی کاربر دکمه‌ی راهنما را لمس می‌کند و از او خواسته می‌شود یک تبلیغ ویدیویی جایزه‌دار را تماشا کند

شناسه_واحد_تبلیغاتی

نمایش_پاداش_تبلیغات

وقتی کاربر شروع به تماشای یک تبلیغ ویدیویی جایزه‌دار می‌کند

شناسه_واحد_تبلیغاتی

موفقیت_سطحی

وقتی کاربر پاسخ صحیحی ارسال می‌کند (یک مرحله را تمام می‌کند)

نام سطح، تعداد تلاش‌ها، زمان سپری‌شده، نکته‌ی استفاده‌شده

سطح_شکست

وقتی کاربر از یک مرحله رد می‌شود

نام سطح، تعداد تلاش‌ها، زمان سپری‌شده، نکته‌ی استفاده‌شده

بازی_کامل

وقتی بازی تمام شد

تعداد_پاسخ‌های_صحیح

شرح هر پارامتر مرتبط با هر رویداد به شرح زیر است:

نام رویداد

نام پارامتر

توضیحات

سطح_شروع

نام_سطح

نام نقاشی نشان داده شده در مرحله (مثلاً «موز»)

سطح_پاسخ_اشتباه

نام_سطح

نام نقاشی نشان داده شده در مرحله (مثلاً «موز»)

ad_reward_prompt

شناسه_واحد_تبلیغاتی

شناسه واحد تبلیغاتی که برای نمایش یک تبلیغ ویدیویی جایزه‌دار استفاده می‌شود

نمایش_پاداش_تبلیغات

شناسه_واحد_تبلیغاتی

شناسه واحد تبلیغاتی که برای نمایش یک تبلیغ ویدیویی جایزه‌دار استفاده می‌شود

موفقیت_سطحی

نام_سطح

نام نقاشی نشان داده شده در مرحله (مثلاً «موز»)

موفقیت_سطحی

تعداد_تلاش‌ها

تعداد تلاش‌های انجام شده برای عبور از یک مرحله

موفقیت_سطحی

زمان_سپری_شده_ثانیه

زمان سپری شده برای عبور از یک سطح، بر حسب ثانیه

موفقیت_سطحی

hint_used

اینکه آیا کاربر از راهنمایی (تماشا کردن یک تبلیغ ویدیویی جایزه‌دار) برای عبور از یک مرحله استفاده کرده یا نه (۱: از راهنمایی استفاده کرده / ۰: بدون راهنمایی مرحله را عبور داده است)

سطح_شکست

نام_سطح

نام نقاشی نشان داده شده در مرحله (مثلاً «موز»)

سطح_شکست

تعداد_تلاش‌ها

تعداد تلاش‌های انجام شده برای عبور از یک مرحله

سطح_شکست

زمان_سپری_شده_ثانیه

زمان سپری شده برای عبور از یک سطح، بر حسب ثانیه

سطح_شکست

hint_used

اینکه آیا کاربر از راهنمایی (تماشا کردن یک تبلیغ ویدیویی جایزه‌دار) برای عبور از یک مرحله استفاده کرده یا نه (۱: از راهنمایی استفاده کرده / ۰: بدون راهنمایی مرحله را عبور داده است)

بازی_کامل

تعداد_پاسخ‌های_صحیح

تعداد مراحل طی شده در بازی

ایجاد یک کلاس کمکی برای ثبت رویدادهای سفارشی

برای ثبت آسان رویداد تحلیلی، یک کلاس کمکی برای مدیریت رویدادهای سفارشی ایجاد خواهید کرد.

ابتدا، یک پوشه جدید در زیر پوشه Assets/Scripts ایجاد کنید و نام آن را Analytics بگذارید. سپس یک اسکریپت C# جدید ایجاد کنید و نام آن را QuizAnalytics.cs در زیر پوشه Analytics قرار دهید.

کد زیر را به فایل QuizAnalytics.cs اضافه کنید.

تجزیه و تحلیل/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 را به شرح زیر اضافه کنید.

صحنه‌ها/بازی‌ها.cs

using AwesomeDrawingQuiz.Ads;

// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;

...

namespace AwesomeDrawingQuiz.Scene {
   ...
}

سپس، در تابع Start() ، تابع QuizAnalytics.SetScreenName() را برای تغییر نام صفحه فعلی فراخوانی کنید. همچنین، تابع QuizAnalytics.LogGameStart() را برای نشان دادن شروع بازی فراخوانی کنید.

صحنه‌ها/بازی‌ها.cs

void Start () {
    // TODO: Log screen name (101)
    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_GAME);

    ...

    SetHintButtonEnabled(false);

    // TODO: Log game_start event (101)
    QuizAnalytics.LogGameStart();
    
    ...
}

سپس، در توابع فراخوانی، فراخوانی‌هایی را برای ثبت رویدادهای سفارشی به شرح زیر اضافه کنید:

صحنه‌ها/بازی‌ها.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 SDK، باید مطمئن شوید که Firebase آماده است.

صحنه‌ها/فایل اصلی.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
        }

        ...
    }
}   

۹. اشکال‌زدایی رویدادهای تحلیلی

شما می‌توانید از DebugView برای تأیید صحت ثبت رویدادها استفاده کنید. DebugView به شما این امکان را می‌دهد که داده‌های خام رویدادهای ثبت‌شده توسط برنامه خود را در دستگاه‌های توسعه تقریباً به‌صورت بلادرنگ مشاهده کنید.

این برای اهداف اعتبارسنجی در طول مرحله ابزار دقیق توسعه بسیار مفید است و می‌تواند به شما در کشف خطاها و اشتباهات در پیاده‌سازی تحلیلی‌تان کمک کند.

فعال کردن حالت اشکال‌زدایی در اندروید

به‌طورکلی، رویدادهای ثبت‌شده در برنامه شما در طول یک دوره تقریباً یک ساعته دسته‌بندی شده و با هم آپلود می‌شوند. برای اعتبارسنجی پیاده‌سازی تحلیلی خود در لحظه، باید حالت اشکال‌زدایی (Debug mode) را در دستگاه توسعه خود فعال کنید تا رویدادها با حداقل تأخیر آپلود شوند.

ابتدا، ابزار ترمینال (Terminal) را در اندروید استودیو باز کنید. این ابزار در نوار ابزار پایین قرار دارد.

c8dc1b4f08a224b8.png

سپس دستور زیر را اجرا کنید (مطمئن شوید که دستگاه اندروید آزمایشی به رایانه شما متصل است یا شبیه‌ساز اندروید در حال اجرا است):

adb shell setprop debug.firebase.analytics.app com.google.codelab.awesomedrawingquiz

این رفتار تا زمانی که حالت اشکال‌زدایی را با اجرای دستور زیر غیرفعال کنید، ادامه می‌یابد:

adb shell setprop debug.firebase.analytics.app .none.

فعال کردن حالت اشکال‌زدایی در iOS

برای فعال کردن حالت اشکال‌زدایی تحلیلی در دستگاه توسعه خود، آرگومان خط فرمان زیر را در Xcode مشخص کنید:

-FIRDebugEnabled

این رفتار تا زمانی که شما با مشخص کردن آرگومان خط فرمان زیر، حالت اشکال‌زدایی را به‌طور صریح غیرفعال کنید، ادامه می‌یابد:

-FIRDebugDisabled

اشکال‌زدایی رویدادهای تحلیلی با DebugView

پس از فعال کردن حالت اشکال‌زدایی (Debug mode) در دستگاه آزمایشی خود، به کنسول Firebase بروید و DebugView را از منو انتخاب کنید. سپس، در دستگاه آزمایشی خود، بازی خود را اجرا کنید تا رویدادهای ثبت شده و نمایش داده شده در گزارش DebugView را مشاهده کنید.

827059255d09ac00.png

شما می‌توانید با کلیک روی نام هر رویداد، به اطلاعات دقیقی در مورد آن دسترسی پیدا کنید. به عنوان مثال، تصویر زیر جزئیات پارامترهای مرتبط با رویداد level_start را نشان می‌دهد.

۴۷۵db00d05d03ab8.png

برای جزئیات بیشتر، لطفاً به مقاله مرکز راهنمای DebugView مراجعه کنید.

۱۰. گزارش‌دهی پارامترها را فعال کنید

گوگل آنالیتیکس برای فایربیس به طور پیش‌فرض تعداد کل رویدادها را جمع‌آوری می‌کند، اما گزارش‌دهی برای پارامترهای سفارشی باید به طور صریح برای هر پارامتر رویداد مورد نظر شما فعال شود. پس از فعال شدن این گزینه، گوگل آنالیتیکس برای فایربیس کارت‌های اضافی را برای نمایش آمار پارامترهای سفارشی نمایش می‌دهد.

برای ثبت پارامترهای سفارشی برای یک رویداد:

  1. به کنسول فایربیس بروید و پروژه Awesome Drawing Quiz که قبلاً ایجاد کرده‌اید را انتخاب کنید.
  2. از منوی ناوبری روی رویدادها کلیک کنید.
  1. در ردیف مربوط به رویدادی که می‌خواهید تغییر دهید، کلیک کنید 73afe611adf58774.png > ویرایش گزارش پارامترها.

aad40de06ee0c3ad.png

  1. در فیلد «نام پارامتر را وارد کنید» ، نام پارامتری را که می‌خواهید ثبت کنید، وارد کنید.

توجه: اگر هیچ تطابقی پیدا نشد، فقط نام پارامتر را وارد کنید و سپس روی ADD کلیک کنید. e066c761aae4797f.png ۵. به جدول زیر مراجعه کنید و فیلد نوع (Type) را متناسب با آن روی متن (Text) یا عدد (Number) تنظیم کنید. برای پارامترهای عددی، مطمئن شوید که فیلد واحد اندازه‌گیری (Unit of Measurement) را نیز تنظیم کرده‌اید. ۶. برای پایان تنظیمات، روی دکمه ذخیره (SAVE) کلیک کنید.

گزارش پارامتر را برای هر رویداد ذکر شده در زیر فعال کنید.

نام رویداد

نام پارامتر

نوع پارامتر

واحد اندازه‌گیری

سطح_شروع

نام_سطح

متن

ناموجود

سطح_پاسخ_اشتباه

نام_سطح

متن

ناموجود

موفقیت_سطحی

نام_سطح

متن

ناموجود

موفقیت_سطحی

تعداد_تلاش‌ها

شماره

استاندارد

موفقیت_سطحی

زمان_سپری_شده_ثانیه

شماره

ثانیه‌ها

موفقیت_سطحی

hint_used

شماره

استاندارد

سطح_شکست

نام_سطح

متن

ناموجود

سطح_شکست

تعداد_تلاش‌ها

شماره

استاندارد

سطح_شکست

زمان_سپری_شده_ثانیه

شماره

ثانیه‌ها

سطح_شکست

hint_used

شماره

استاندارد

بازی_کامل

تعداد_پاسخ‌های_صحیح

شماره

استاندارد

مثال زیر تنظیمات گزارش پارامتر سفارشی برای رویداد level_success را نشان می‌دهد:

6d569c8c27df2914.png

پس از تکمیل تنظیمات گزارش پارامتر، می‌توانید پارامترهای مرتبط با هر رویدادی که گزارش پارامتر آن روشن است را مشاهده کنید.

d1a37589d54bca6b.png

۱۱. از گزارش رویداد، بینش کسب کنید

همانطور که چند رویداد به بازی اضافه کرده‌اید، باید بتوانید به سوالات مربوط به رفتار کاربر در بازی پاسخ دهید. در اینجا چند بینش وجود دارد که می‌توانید از گزارش رویدادهای Firebase به دست آورید.

کدام سطح بیشترین تعداد پاسخ‌های اشتباه را دارد؟

برای پاسخ به این سوال، باید بدانید که در هر سطح، چند رویداد level_wrong_answer فعال شده است.

روی level_wrong_answer از گزارش رویدادها کلیک کنید. در گزارش رویداد level_wrong_answer ، کارت level_name پیدا کنید. مقادیر مرتبط با پارامتر level_name را روی آن کارت به شرح زیر مشاهده خواهید کرد.

25da426bbc0c612c.png

طبق تصویر بالا، به راحتی می‌توانید متوجه شوید که افق بیشترین تعداد پاسخ‌های اشتباه را دارد، که به این معنی است که در مقایسه با سایر سطوح، برای کاربران دشوارتر است.

با استفاده از بینشی که از اینجا به دست آورده‌اید، می‌توانید تصمیم بگیرید که سطوح دشوار را برای کاربران تازه‌کار ارائه ندهید تا نرخ ماندگاری بالایی داشته باشید.

به طور متوسط ​​چند بار تلاش برای عبور از یک مرحله انجام شده است؟

در مسابقه نقاشی فوق‌العاده ، کاربران می‌توانند پاسخ هر سطح را به هر تعداد که می‌خواهند ارسال کنند.

از آنجایی که گزارش پارامتر را برای پارامتر number_of_attempts در رویداد level_success فعال کرده‌اید، می‌توانید معیارهای دقیق آن پارامتر را مشاهده کنید.

روی رویداد level_success از گزارش رویدادها کلیک کنید. در گزارش رویداد level_success ، کارت number_of_attemps را پیدا کنید. میانگین تعداد تلاش‌ها روی آن کارت را به شرح زیر مشاهده خواهید کرد:

43de290f9f1a0ac9.png

شما می‌توانید از بینش اینجا برای بهینه‌سازی میانگین سختی بازی استفاده کنید. برای مثال، اگر میانگین تعداد تلاش‌ها خیلی نزدیک به ۱ باشد، می‌توانید بازی را کمی چالش‌برانگیزتر کنید.

آیا کاربران سعی کردند با دریافت راهنمایی، سوال را حل کنند، حتی اگر در نهایت نتوانستند از یک مرحله عبور کنند؟

وقتی کاربر تصمیم می‌گیرد از یک مرحله صرف نظر کند، رویداد level_fail فعال می‌شود. دلایل زیادی می‌تواند برای این تصمیم کاربر وجود داشته باشد.

با این حال، از آنجایی که بازی می‌تواند پس از تماشای یک تبلیغ ویدیویی جایزه‌دار به آنها راهنمایی بدهد، مهم است بدانیم که آیا کاربر حداقل با کمک راهنمایی سعی در عبور از مرحله داشته است یا خیر.

روی رویداد level_fail از گزارش رویدادها کلیک کنید. در گزارش رویداد level_fail ، کارت hint_used را پیدا کنید. میانگین تعداد پارامترهای رویداد hint_used را مشاهده خواهید کرد. توجه داشته باشید که وقتی از hint استفاده می‌شود، روی ۱ تنظیم می‌شود در حالی که وقتی از hint استفاده نمی‌شود، روی ۰ تنظیم می‌شود.

۳۱۳۸۱۴۳۷۲cd7c8a4.png

اگر اعداد روی کارت hint_used نزدیک به ۰ باشد، نشان می‌دهد که پاداش (hint) برای کاربران چندان جذاب نیست. همچنین، شما فرصت افزایش درآمد از تبلیغات ویدیویی پاداش‌دار را از دست می‌دهید.

بنابراین، باید در نظر داشته باشید که پاداش را برای کاربران مفیدتر کنید تا کاربران بتوانند عمیق‌تر در بازی درگیر شوند و همچنین درآمد حاصل از تبلیغات ویدیویی پاداش‌دار افزایش یابد.

به طور متوسط ​​در هر بازی چند مرحله طی شد؟

در هر بازی در مسابقه نقاشی فوق‌العاده، در مجموع ۶ مرحله وجود دارد. زمانی که کاربر شش مرحله را تمام کند (فرقی نمی‌کند که هر مرحله را کامل کرده باشد یا رد شده باشد)، رویداد 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 مشاهده خواهید کرد.

d9eeaa019d1bceb4.png

اگر میانگین تعداد مراحل تکمیل‌شده خیلی کم است، باید چیدمان بازی را تغییر دهید تا به افراد کمک کنید یک مرحله را تمام کنند و بتوانند بدون از دست دادن علاقه‌شان به بازی ادامه دهند.

۱۲. همه چیز تمام شد!

شما Codelab مربوط به AdMob+Firebase 101 Unity را تکمیل کرده‌اید. می‌توانید کد تکمیل‌شده برای این Codelab را در اینجا پیدا کنید. پوشه android_studio.png پوشه‌ی پایه‌ی ۱۰۱-complete_and_102 .

در بخش بعدی از آزمایشگاه کد AdMob+Firebase، یاد خواهید گرفت که چگونه از یک قیف برای تجسم جریان رویداد برنامه استفاده کنید. همچنین، نحوه استفاده از Remote Config و تست A/B برای بهینه‌سازی مقدار پارامتر در بازی بدون به‌روزرسانی برنامه را پوشش خواهد داد.