Android 16 menyertakan API metrik tambahan yang lebih terperinci. Metrik ini melacak tindakan ketuk seperti klik tombol, scroll, tayangan, serta ukuran dan posisi widget.
API utama adalah AppWidgetEvent
. Gunakan WorkManager
untuk membuat pekerja
berkala yang merekam interaksi widget setiap jam.
Lihat cuplikan berikut untuk mengetahui contoh pelacakan klik, scroll, dan durasi tayangan.
@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") }
Untuk menjaga kesehatan sistem, peristiwa dilaporkan sekali per jam secara default, meskipun produsen perangkat dapat mengubah periode pelaporan. Misalnya, di perangkat Pixel, jika pengguna men-scroll daftar yang sama di widget Anda 10 kali dalam satu jam, hanya 1 peristiwa scroll yang akan dihitung untuk jam tersebut.
Untuk pengujian, Anda dapat menyetel atribut berikut ke waktu tertentu dan memulai ulang perangkat pengujian. Dalam contoh berikut, jendela laporan ditetapkan ke 0 md dan peristiwa dilaporkan dengan segera.
adb shell device_config override systemui widget_events_report_interval_ms 0
Untuk menetapkan tag kustom untuk melaporkan klik dan scroll, Anda dapat menggunakan
RemoteViews.setAppWidgetEventTag pada tampilan dalam tata letak RemoteViews
Anda. Tag bilangan bulat ini digunakan saat Anda membuat kueri untuk AppWidgetEvents
yang
mencakup klik atau scroll pada tampilan ini.