میزان مشارکت کاربر را اندازه گیری کنید

این راهنما نحوه اندازه‌گیری سیگنال‌های تعامل را برای برگه‌های سفارشی Chrome توضیح می‌دهد. اگر برنامه شما به طور منظم پیوندهایی به محتوای وب را برای کاربران خود نشان می دهد، به عنوان مثال در یک فید خبری، می تواند مهم باشد که بدانید کاربران کدام پیوندها را ارزشمند می دانند و کدام را نه. در برگه‌های سفارشی، می‌توانید تعامل کاربر خاص جلسه را از طریق تعداد پیمایش‌ها، تغییر جهت پیمایش و عمق پیمایش اندازه‌گیری کنید. برای مشاهده سیگنال‌های تعامل در عمل، برنامه نمایشی Custom Tabs را در GitHub بررسی کنید.

نمایشی سیگنال های تعامل برگه سفارشی.

تب های سفارشی دو تماس مختلف برای اندازه گیری تعامل کاربر ارائه می دهند:

  • CustomTabsCallback برای ردیابی رویدادهای ناوبری اساسی، مانند "NAVIGATION_STARTED" یا "NAVIGATION_FINISHED" .
  • EngagementSignalsCallback برای ردیابی تعامل کاربر خاص صفحه، مانند جهت پیمایش یا درصد پیمایش.

هر دو به یک CustomTabsServiceConnection فعال نیاز دارند. برای جزئیات نحوه اتصال به CustomTabsService راهنمای قبلی CustomTabsService را ببینید.

برای اندازه گیری تعامل کاربر، ابتدا یک CustomTabsCallback و یک نمونه EngagementSignalsCallback ایجاد کنید. CustomTabsCallback یک ثابت navigationEvent را دریافت می کند که نوع ناوبری را توصیف می کند:

private CustomTabsCallback mCustomTabsCallback = new CustomTabsCallback() {
    @Override
    public void onNavigationEvent(int navigationEvent, @Nullable Bundle extras) {
        String event;
        switch (navigationEvent) {
            case CustomTabsCallback.NAVIGATION_ABORTED:
                event = "NAVIGATION_ABORTED";
                break;
            case CustomTabsCallback.NAVIGATION_FAILED:
                event = "NAVIGATION_FAILED";
                break;
            case CustomTabsCallback.NAVIGATION_FINISHED:
                event = "NAVIGATION_FINISHED";
                break;
            case CustomTabsCallback.NAVIGATION_STARTED:
                event = "NAVIGATION_STARTED";
                break;
            case CustomTabsCallback.TAB_SHOWN:
                event = "TAB_SHOWN";
                break;
            case CustomTabsCallback.TAB_HIDDEN:
                event = "TAB_HIDDEN";
                break;
            default:
                event = String.valueOf(navigationEvent);
        }
        Log.d(TAG, "onNavigationEvent (navigationEvent=" + event + ')');
        mTextNavigation.setText("onNavigationEvent " + event);
    }
};

EngagementSignalsCallback از سه تماس مختلف پشتیبانی می کند:

onVerticalScrollEvent()
هر بار که کاربر جهت پیمایش را تغییر می‌دهد فراخوانی می‌شود، جایی که isDirectionUp (نخستین آرگومان) جهت را نشان می‌دهد.
  1. onGreatestScrollPercentageIncreased : وقتی کاربر به انتهای صفحه رسید، برگه سفارشی عمق پیمایش را در فواصل 5% تا 100% سیگنال می دهد. تماس پاسخ تنها زمانی فراخوانی می شود که کاربر پیمایش را متوقف کند. با هر پیمایش جدید، مقدار به 0٪ بازنشانی می شود.
  2. onSessionEnded : برگه سفارشی زمانی که ارسال سیگنال‌های تعامل را متوقف می‌کند (به عنوان مثال، پس از بستن برگه سفارشی توسط کاربر) این رویداد را فعال می‌کند. اگر کاربر به هر نحوی با صفحه تعامل داشته باشد (پیمایش، کلیک دکمه و غیره) didUserInteract درست خواهد بود.
private EngagementSignalsCallback mEngagementSignalsCallback = new EngagementSignalsCallback() {
    @Override
    public void onVerticalScrollEvent(boolean isDirectionUp, @NonNull Bundle extras) {
        Log.d(TAG, "onVerticalScrollEvent (isDirectionUp=" + isDirectionUp + ')');
        mTextVerticalScroll.setText("vertical scroll " + (isDirectionUp ? "UP" : "DOWN"));
    }

    @Override
    public void onGreatestScrollPercentageIncreased(int scrollPercentage, @NonNull Bundle extras) {
        Log.d(TAG, "scroll percentage: " + scrollPercentage + "%");
        mTextGreatestPercentage.setText("scroll percentage: " + scrollPercentage + "%");
    }

    @Override
    public void onSessionEnded(boolean didUserInteract, @NonNull Bundle extras) {
        Log.d(TAG, "onSessionEnded (didUserInteract=" + didUserInteract + ')');
        mTextSessionEnd.setText(didUserInteract ? "session ended with user interaction" : "session ended without user interaction");
    }
};

هر دو CustomTabsCallback و EngagementSignalsCallback به یک اتصال سرویس Custom Tab فعال نیاز دارند. پس از اتصال سرویس، می توانید با فراخوانی CustomTabsClient.newSession() و ارسال CustomTabsCallback یک CustomTabsSession جدید ایجاد کنید.

پس از آن، باید isEngagementSignalsApiAvailable() را فراخوانی کنید تا بررسی کنید که آیا سیگنال های تعامل توسط مرورگر فعلی پشتیبانی می شوند یا خیر. اگر آنها پشتیبانی می شوند، می توانید EngagementSignalsCallback خود را از طریق CustomTabsSession.setEngagementSignalsCallback() ثبت کنید.

private CustomTabsClient mCustomTabsClient;
private CustomTabsSession mCustomTabsSession;

private final CustomTabsServiceConnection mServiceConnectionCallback = new CustomTabsServiceConnection() {

    @Override
    public void onCustomTabsServiceConnected(@NonNull ComponentName name, @NonNull CustomTabsClient client) {
        mCustomTabsClient = client;
        mCustomTabsSession = mCustomTabsClient.newSession(mCustomTabsCallback);
        try {
            boolean engagementSignalsApiAvailable = mCustomTabsSession.isEngagementSignalsApiAvailable(Bundle.EMPTY);
            if (!engagementSignalsApiAvailable) {
                Log.d(TAG, "CustomTab Engagement signals not available, make sure to use the " +
                        "latest Chrome version and enable via chrome://flags/#cct-real-time-engagement-signals");
                return;
            }
            mCustomTabsSession.setEngagementSignalsCallback(mEngagementSignalsCallback, Bundle.EMPTY);
        } catch (RemoteException e) {
            Log.w(TAG, "The Service died while responding to the request.", e);
        } catch (UnsupportedOperationException e) {
            Log.w(TAG, "Engagement Signals API isn't supported by the browser.", e);
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        mCustomTabsClient = null;
        mConnection = null;
        mCustomTabsSession = null;
    }
};

تنها کاری که باید انجام دهید اتصال CustomTabsService است:

@Override
protected void onStart() {
    super.onStart();
    bindCustomTabsService();
}

private void bindCustomTabsService() {
    String packageName = CustomTabsHelper.getPackageNameToUse(this);
    if (packageName == null) return;
    CustomTabsClient.bindCustomTabsService(this, packageName, mConnection);
}