আপনার উইজেটের জন্য মেট্রিক্স ট্র্যাক করুন

অ্যান্ড্রয়েড ১৬-এ আরও সূক্ষ্ম মেট্রিক্স এপিআই অন্তর্ভুক্ত করা হয়েছে। এই মেট্রিক্সগুলো বাটন ক্লিক, স্ক্রল, ইম্প্রেশন এবং উইজেটের আকার ও অবস্থানের মতো ট্যাপ অ্যাকশনগুলো ট্র্যাক করে।

প্রধান এপিআইটি হলো 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")
}

সিস্টেমের স্বাস্থ্য রক্ষার জন্য, ডিফল্টরূপে প্রতি ঘন্টায় একবার ইভেন্ট রিপোর্ট করা হয়, যদিও ডিভাইস নির্মাতারা রিপোর্টিং উইন্ডো পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, পিক্সেল ডিভাইসে যদি কোনো ব্যবহারকারী এক ঘন্টায় আপনার উইজেটের একই তালিকা ১০ বার স্ক্রল করেন, তবে সেই ঘন্টার জন্য শুধুমাত্র ১টি স্ক্রল ইভেন্ট গণনা করা হবে।

পরীক্ষার জন্য, আপনি নিম্নলিখিত অ্যাট্রিবিউটটিকে একটি নির্দিষ্ট সময়ে সেট করতে পারেন এবং আপনার টেস্ট ডিভাইসটি রিস্টার্ট করতে পারেন। নিম্নলিখিত উদাহরণে, রিপোর্ট উইন্ডোটি ০ মিলিসেকেন্ডে সেট করা হয়েছে এবং ইভেন্টগুলি তাৎক্ষণিকভাবে রিপোর্ট করা হয়।

adb shell device_config override systemui widget_events_report_interval_ms 0

ক্লিক এবং স্ক্রল রিপোর্ট করার জন্য একটি কাস্টম ট্যাগ সেট করতে, আপনি আপনার RemoteViews লেআউটের মধ্যে থাকা কোনো ভিউতে RemoteViews.setAppWidgetEventTag ব্যবহার করতে পারেন। এই ইন্টিজার ট্যাগটি তখন ব্যবহৃত হয় যখন আপনি এমন AppWidgetEvents জন্য কোয়েরি করেন যেগুলিতে এই ভিউয়ের ক্লিক বা স্ক্রল অন্তর্ভুক্ত থাকে।