يتضمّن نظام التشغيل Android 16 واجهات برمجة تطبيقات إضافية للمقاييس أكثر تفصيلاً. تتتبّع هذه المقاييس إجراءات النقر، مثل النقر على زر والتمرير ومرات الظهور وحجم الأداة وموضعها.
واجهة برمجة التطبيقات الرئيسية هي 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") }
للحفاظ على سلامة النظام، يتم إعداد التقارير عن الأحداث مرة واحدة في الساعة تلقائيًا، ولكن قد يغيّر مصنّعو الأجهزة فترة إعداد التقارير. على سبيل المثال، إذا كان أحد المستخدمين يتصفّح القائمة نفسها في تطبيقك المصغّر 10 مرات في الساعة على أجهزة Pixel، سيتم احتساب حدث تصفّح واحد فقط لهذه الساعة.
لإجراء الاختبار، يمكنك ضبط السمة التالية على وقت محدّد وإعادة تشغيل جهاز الاختبار. في المثال التالي، تم ضبط فترة إعداد التقارير على 0 ملي ثانية، ويتم إعداد التقارير عن الأحداث على الفور.
adb shell device_config override systemui widget_events_report_interval_ms 0
لضبط علامة مخصّصة لتسجيل النقرات وعمليات التمرير، يمكنك استخدام
RemoteViews.setAppWidgetEventTag في عرض ضمن RemoteViews
التصميم. يتم استخدام علامة العدد الصحيح هذه عند طلب بيانات AppWidgetEvents
تتضمّن نقرات أو تمريرات سريعة على طريقة العرض هذه.