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