Android 16, daha ayrıntılı ek metrik API'leri içerir. Bu metrikler; düğme tıklama, kaydırma, gösterimler gibi dokunma işlemlerinin yanı sıra widget'ın boyutunu ve konumunu izler.
Ana API, AppWidgetEvent'dir. Günlük, haftalık veya uygulamanız her açıldığında widget etkileşimini yakalayan periyodik bir çalışan oluşturmak için WorkManager kullanın.
Tıklamaları, kaydırmaları ve gösterim uzunluğunu izlemeyle ilgili bir örnek için aşağıdaki snippet'e bakın.
@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") }
Sistem sağlığını korumak için etkinlikler varsayılan olarak saatte bir raporlanır ancak cihaz üreticileri raporlama aralığını değiştirebilir. Örneğin, Pixel cihazlarda bir kullanıcı widget'ınızdaki aynı listeyi bir saat içinde 10 kez kaydırırsa o saat için yalnızca 1 kaydırma etkinliği sayılır.
Test için aşağıdaki özelliği belirli bir zamana ayarlayabilir ve test cihazınızı yeniden başlatabilirsiniz. Aşağıdaki örnekte, rapor penceresi 0 ms olarak ayarlanmıştır ve etkinlikler hemen raporlanır.
adb shell device_config override systemui widget_events_report_interval_ms 0
Tıklamaları ve kaydırmaları bildirmek için özel bir etiket ayarlamak istiyorsanız RemoteViews düzeninizdeki bir görünümde RemoteViews.setAppWidgetEventTag yöntemini kullanabilirsiniz. Bu tam sayı etiketi, bu görünümdeki tıklamaları veya kaydırmaları içeren AppWidgetEvents için sorgu yaptığınızda kullanılır.