اندروید ۱۶ شامل APIهای معیار بیشتری است که جزئیتر هستند. این معیارها اقدامات مربوط به ضربه زدن مانند کلیک روی دکمه، اسکرول، تعداد نمایشها و اندازه و موقعیت ویجت را ردیابی میکنند.
API اصلی AppWidgetEvent
است. از WorkManager
برای ایجاد یک worker دورهای استفاده کنید که هر ساعت یک بار میزان فعالیت ویجت را ثبت میکند.
برای مثالی از ردیابی کلیکها، اسکرولها و طول نمایش، به قطعه کد زیر مراجعه کنید.
@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") }
برای حفظ سلامت سیستم، رویدادها به طور پیشفرض ساعتی یک بار گزارش میشوند، اگرچه تولیدکنندگان دستگاه ممکن است پنجره گزارشدهی را تغییر دهند. به عنوان مثال، در دستگاههای پیکسل اگر کاربری در یک ساعت 10 بار در یک لیست در ویجت شما پیمایش کند، فقط 1 رویداد پیمایش برای آن ساعت شمارش میشود.
برای آزمایش، میتوانید ویژگی زیر را روی یک زمان مشخص تنظیم کنید و دستگاه آزمایشی خود را مجدداً راهاندازی کنید. در مثال زیر، پنجره گزارش روی 0 میلیثانیه تنظیم شده است و رویدادها بلافاصله گزارش میشوند.
adb shell device_config override systemui widget_events_report_interval_ms 0
برای تنظیم یک تگ سفارشی برای گزارش کلیکها و اسکرولها، میتوانید از RemoteViews.setAppWidgetEventTag در یک نما در طرحبندی RemoteViews
خود استفاده کنید. این تگ عدد صحیح هنگام جستجوی AppWidgetEvents
که شامل کلیکها یا اسکرولها در این نما میشود، استفاده میشود.