مسئلهای که باید حل میکردم
اگر هر دکمه نام اتفاق خودش را حدس بزند، تحلیل منو پر از برچسب ناسازگار میشود. من برای بخشهای تکراری یک resolver گذاشتم، ولی محدودیت حدس از hierarchy را هم نگه داشتم.
پیادهسازی در نسخهٔ فعلی
AnalyticsButtonNameResolver.Resolve نام دکمه و مسیر والدها را normalize میکنه. مسیر navigation، shop، reward یا customize روی انتخاب نام رویداد اثر میگذارد و مورد ناشناخته رشتهٔ خالی میدهد.
تصمیم و هزینهٔ طراحی
BuildPath زمینهٔ دکمه را اضافه میکنه؛ یک نام skin در فروشگاه با skin در شخصیسازی یک معنی نداره. این تصمیم از ترجمهٔ متن قابل مشاهده مستقل هست.
مرزهای فعلی
matching با Contains انجام میشود و میتواند نامهای نامنتظر را اشتباه دستهبندی کنه. تغییر hierarchy یا قرارداد اسمگذاری باید همراه بازبینی رویدادها باشد؛ خودکاربودن جای ثبات قرارداد را نمیگیرد.
سناریوهای بررسی و معنای قرارداد
مرور مسیر کامل نشان میدهد resolver تنها بخش نامگذاری هست. AnalyticsButtonNameResolver میتواند از نام و مسیر دکمه معنای پیشنهادی بسازد، اما wrapper فعلی کارتگیم فقط رویدادهای ضروری فهرست بسته را عبور میدهد و کلیکهای منو را کنار میگذارد. پس از وجود نامهای nav یا shop در کد، ترافیک واقعی کلیک نتیجه نمیگیرم. این سیاست حجم داده را محدود میکنه و با خواندن گزارش کلیک باید همزمان توضیح داده بشه. همچنین نامگذاری بر اساس Contains به ساختار صحنه وابسته هست؛ تغییر نام والد میتواند طبقهبندی را عوض کنه حتی اگر متن روی دکمه ثابت مانده باشد.
در PHP تعریف تبها و گزارشها برای هر بازی مستقل هست. افزودن یک رویداد تازه به schema، تغییر سیاست پذیرش رویداد ناشناخته و ساخت گزارش Count سه کار متفاوت هستند؛ هیچکدام listener داخل Unity را ایجاد نمیکنه. ذخیرهٔ تعریف با revision مورد انتظار کنترل میشود تا پنجرهٔ قدیمی تنظیم پنجرهٔ جدید را بیصدا بازنویسی نکند. تغییر عنوان نمایشی تب نیز با تغییر شناسهٔ داده فرق داره. اگر بعداً رویداد کلیک لازم شد، باید نام پایدار، معنای عمل و مسیر ارسال واقعی مشخص باشند. برای من مسئله جمع کردن بیشترین لمس نیست؛ داده باید بتواند یک پرسش محصول را پاسخ بدهد و محدودیت سیاست نسخهٔ فعلی آشکار بماند.
شناسهٔ رویداد باید با تغییر زبان رابط ثابت بماند؛ عنوان فارسی و انگلیسی دکمه برای خوانندهاند و نام تحلیلی برای قرارداد داده. resolver به زمینه کمک میکنه ولی تأیید نام همچنان ارزش داره. در طراحی گزارش، گروهبندی بر اساس نام ناپایدار میتواند یک رفتار را چند گروه نشان بدهد. این مشکل با افزایش تعداد رویداد حل نمیشود و باید در همان نقطهٔ نامگذاری روشن بشه.
چیزی که از این مرحله یاد گرفتم
برای من، رویداد خوب فقط ثبت لمس نیست، بلکه معنای لمس هست. resolver برای نصب اولیه کمک میکنه، ولی نام صریح رویداد در نقطهٔ حساس همچنان میتواند انتخاب دقیقتری باشد.
سورس و گفتگو دربارهٔ پروژه: GitHub · Telegram
مثال عملی آنالیتیکس دکمه
اگر بخواهی آنالیتیکس دکمه را در یک پروژهٔ کوچک بررسی کنی، بهتر است از یک موقعیت محدود شروع کنی. بازیکن روی خرید میزند، ولی موجودی کافی ندارد و خرید ثبت نمیشود. ورودی را ثابت نگه دار و نتیجهٔ مورد انتظار را پیش از اجرای نسخه بنویس. این کار کمک میکند تفاوت میان رفتار منطقی و چیزی که صرفاً روی صفحه دیده میشود روشن بماند. سناریوی این بخش آموزشی است و ادعای نتیجهٔ واقعی یک آزمایش روی کاربران دلو ندارد.
خطای رایج و علت آن
شمارش کلیک به عنوان خرید موفق، نرخ تبدیل را به شکل کاذب بالا میبرد. این خطا معمولاً وقتی پنهان میماند که فقط مسیر موفق و ظاهر نهایی را ببینیم. برای پیدا کردن علت، آخرین وضعیت درست را از نخستین وضعیت نادرست جدا کن و ببین تغییر دقیقاً در کدام مرز رخ داده است. ثبت رفتار رابط با تأیید تغییر موجودی و مالکیت فرق دارد. اگر این تفاوت در قرارداد مشخص نباشد، اصلاح یک نشانه ممکن است همان مسئله را در بخش دیگری دوباره ایجاد کند.
چطور نتیجه را بررسی کنیم؟
رویداد تلاش، نتیجهٔ موفق و خطا را با نامهای متفاوت ثبت کن. اجرای یکباره برای نتیجهگیری کافی نیست؛ یک بار مسیر معمول و بار دیگر همان موقعیت را با ورودی مرزی یا تکرار اقدام بررسی کن. اگر نتیجه فرق دارد، ورودی و شرایط اجرا را همراه خروجی نگه دار تا مقایسه قابل بازسازی باشد. جدول زیر خلاصهٔ مشخصات همین سناریو است و برای ثبت نتیجهٔ بررسی به کار میآید.
| بخش بررسی | آنچه باید ثبت شود |
|---|---|
| موقعیت آزمایشی | بازیکن روی خرید میزند، ولی موجودی کافی ندارد و خرید ثبت نمیشود. |
| ریسک اصلی | شمارش کلیک به عنوان خرید موفق، نرخ تبدیل را به شکل کاذب بالا میبرد. |
| روش بررسی | رویداد تلاش، نتیجهٔ موفق و خطا را با نامهای متفاوت ثبت کن. |
| مرز نتیجهگیری | ثبت رفتار رابط با تأیید تغییر موجودی و مالکیت فرق دارد. |
پرسشهای کاربردی دربارهٔ آنالیتیکس دکمه
از کجا شروع کنم؟
از همان موقعیت محدود این مطلب شروع کن: بازیکن روی خرید میزند، ولی موجودی کافی ندارد و خرید ثبت نمیشود. ابتدا نتیجهٔ مورد انتظار را مشخص کن و بعد سراغ پیادهسازی یا ابزار برو. وقتی مسیر پایه قابل توضیح و بررسی شد، میتوان حالتهای بیشتری اضافه کرد. ساخت همهٔ حالتها از ابتدا، فهم علت خطا را سختتر میکند.
چه زمانی میتوانم بگویم این بخش درست کار میکند؟
زمانی که رفتار در موقعیت تعریفشده با قرارداد سازگار باشد و محدودیتهای آن روشن بمانند. رویداد تلاش، نتیجهٔ موفق و خطا را با نامهای متفاوت ثبت کن. موفقیت در این آزمون دربارهٔ همان سناریو شاهد میدهد؛ از آن نمیتوان بدون بررسی دربارهٔ همهٔ دستگاهها، همهٔ قوانین محلی یا همهٔ حجمهای داده نتیجه گرفت. ثبت رفتار رابط با تأیید تغییر موجودی و مالکیت فرق دارد.
برای ادامهٔ همین موضوع، آنالیتیکس چیست؟ از شمارش رویداد تا فهم مسیر بازیکن و Bunny Circus Analytics را ببین. زمینهٔ ساخت این پروژهها و معرفی سازنده در صفحهٔ کیان پاک نعمت آمده است.




