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 기기에서 사용자가 위젯의 동일한 목록을 한 시간 동안 10번 스크롤하면 해당 시간 동안 스크롤 이벤트가 1번만 집계됩니다.
테스트를 위해 다음 속성을 지정된 시간으로 설정하고 테스트 기기를 다시 시작할 수 있습니다. 다음 예에서는 보고 창이 0ms로 설정되어 이벤트가 즉시 보고됩니다.
adb shell device_config override systemui widget_events_report_interval_ms 0
클릭 및 스크롤을 보고하기 위한 맞춤 태그를 설정하려면 RemoteViews
레이아웃 내의 뷰에서 RemoteViews.setAppWidgetEventTag를 사용하면 됩니다. 이 정수 태그는 이 뷰의 클릭 또는 스크롤이 포함된 AppWidgetEvents
를 쿼리할 때 사용됩니다.