Android 16-এ অতিরিক্ত মেট্রিক API অন্তর্ভুক্ত আছে যা আরও গ্র্যানুলার। এইসব মেট্রিক ট্যাপ অ্যাকশন ট্র্যাক করে, যেমন বোতামে ক্লিক করা, স্ক্রল করা, ইম্প্রেশন এবং উইজেটের সাইজ ও পজিশন।
প্রধান API হল AppWidgetEvent। WorkManager ব্যবহার করে একটি পিরিয়ডিক
ওয়ার্কার তৈরি করুন যা উইজেট এনগেজমেন্ট ক্যাপচার করে, তা দৈনিক, সাপ্তাহিক বা যখনই
আপনার অ্যাপ খোলা হোক না কেন।
ক্লিক, স্ক্রল ও ইম্প্রেশন দৈর্ঘ্য ট্র্যাক করার উদাহরণ হিসেবে নিম্নলিখিত স্নিপেট দেখুন।
@RequiresApi(Build.VERSION_CODES_FULL.BAKLAVA_1) fun getWidgetEngagementMetrics(context: Context) { val manager = AppWidgetManager.getInstance(context) val endTime = System.currentTimeMillis() val startTime = endTime - (24 * 60 * 60 * 1000) // a day ago val events = manager.queryAppWidgetEvents(startTime, endTime) if (events.isEmpty()) { Log.d(TAG, "No events found for the given time range.") } val metrics = hashMapOf( "clicks" to 0L, "scrolls" to 0L, "totalImpressionLength" to 0L ) for (event in events) { Log.d(TAG, "Event Start: ${event.start}") Log.d(TAG, "Event End: ${event.end}") val widgetId = event.appWidgetId // Tap actions val clickedIds = event.clickedIds if (clickedIds?.isNotEmpty() == true) { metrics["clicks"] = metrics.getValue("clicks") + clickedIds.size // Log or analyze which components were clicked. for (id in clickedIds) { Log.d(TAG, "Widget $widgetId: Tap event on component with ID $id") } } // Scroll events val scrolledIds = event.scrolledIds if (scrolledIds?.isNotEmpty() == true) { metrics["scrolls"] = metrics.getValue("scrolls") + scrolledIds.size // Log or analyze which lists were scrolled. for (id in scrolledIds) { Log.d(TAG, "Widget $widgetId: Scroll event in list with ID/tag $id") } } // Impressions metrics["totalImpressionLength"] = metrics.getValue("totalImpressionLength") + event.visibleDuration.toMillis() Log.d( TAG, "Widget $widgetId: Impression event with duration " + event.visibleDuration.toMillis() + "ms" ) // Position val position = event.position if (position != null) { Log.d( TAG, "Widget $widgetId: left=${position.left}, right=${position.right}, top=${position.top}, bottom=${position.bottom}" ) } } Log.d("WidgetMetrics", "Metrics: $metrics") }
সিস্টেমের স্বাস্থ্য বজায় রাখতে, ডিফল্ট হিসেবে প্রতি ঘণ্টায় একবার ইভেন্ট রিপোর্ট করা হয়, যদিও ডিভাইস প্রস্তুতকারক রিপোর্টিং উইন্ডো পরিবর্তন করতে পারে। যেমন, Pixel ডিভাইসে কোনও ব্যবহারকারী এক ঘণ্টায় আপনার উইজেটে একই তালিকা ১০ বার স্ক্রল করলে, সেই ঘণ্টার জন্য শুধুমাত্র ১টি স্ক্রল ইভেন্ট গণনা করা হবে।
পরীক্ষা করার জন্য, আপনি নিম্নলিখিত অ্যাট্রিবিউট নির্দিষ্ট সময়ে সেট করতে এবং আপনার টেস্ট ডিভাইস রিস্টার্ট করতে পারবেন। নিম্নলিখিত উদাহরণে, রিপোর্ট উইন্ডো 0 ms-এ সেট করা আছে এবং ইভেন্টগুলি অবিলম্বে রিপোর্ট করা হয়।
adb shell device_config override systemui widget_events_report_interval_ms 0
ক্লিক ও স্ক্রল রিপোর্ট করার জন্য কাস্টম ট্যাগ সেট করতে, আপনার RemoteViews
লেআউটের মধ্যে কোনও ভিউতে RemoteViews.setAppWidgetEventTag ব্যবহার করতে পারবেন। এই ভিউতে ক্লিক বা স্ক্রল অন্তর্ভুক্ত আছে এমন AppWidgetEvents-এর জন্য কোয়েরি করলে,
এই ইন্টিজার ট্যাগ ব্যবহার করা হয়।