Meet de betrokkenheid van gebruikers

In deze handleiding wordt uitgelegd hoe u betrokkenheidssignalen voor aangepaste Chrome-tabbladen kunt meten. Als uw app regelmatig links naar webinhoud aan gebruikers laat zien, bijvoorbeeld in een nieuwsfeed, kan het belangrijk zijn om te weten welke links gebruikers waardevol vinden en welke niet. In aangepaste tabbladen kunt u sessiespecifieke gebruikersbetrokkenheid meten via het aantal navigaties, veranderingen in de scrollrichting en scrolldiepte. Om betrokkenheidssignalen in actie te zien, kun je de demo-app Custom Tabs op GitHub bekijken.

Demo voor betrokkenheidssignalen op aangepaste tabbladen.

Aangepaste tabbladen bieden twee verschillende callbacks voor het meten van gebruikersbetrokkenheid:

  • CustomTabsCallback voor het bijhouden van basisnavigatiegebeurtenissen, zoals "NAVIGATION_STARTED" of "NAVIGATION_FINISHED" .
  • EngagementSignalsCallback voor het bijhouden van paginaspecifieke gebruikersbetrokkenheid, zoals scrollrichting of scrollpercentage.

Beide vereisen een actieve CustomTabsServiceConnection . Zie de vorige CustomTabsService handleiding voor meer informatie over hoe u verbinding maakt met een CustomTabsService .

Om de gebruikersbetrokkenheid te meten, maakt u eerst een CustomTabsCallback en een EngagementSignalsCallback instantie. De CustomTabsCallback ontvangt een navigationEvent constante die beschrijft welk soort navigatie heeft plaatsgevonden:

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);
    }
};

De EngagementSignalsCallback ondersteunt drie verschillende callbacks:

onVerticalScrollEvent()
Wordt elke keer aangeroepen wanneer de gebruiker de schuifrichting verandert, waarbij isDirectionUp (het eerste argument) de richting aangeeft.
  1. onGreatestScrollPercentageIncreased : het aangepaste tabblad geeft de scrolldiepte aan in intervallen van 5% tot 100% wanneer de gebruiker de onderkant van de pagina heeft bereikt. Het terugbellen wordt pas uitgevoerd zodra de gebruiker stopt met scrollen. Bij elke nieuwe navigatie wordt de waarde teruggezet op 0%.
  2. onSessionEnded : het aangepaste tabblad activeert deze gebeurtenis wanneer er geen betrokkenheidssignalen meer worden verzonden (bijvoorbeeld nadat de gebruiker het aangepaste tabblad heeft gesloten). didUserInteract is waar als de gebruiker op welke manier dan ook interactie heeft gehad met de pagina (scrollen, klikken op een knop, enz.).
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");
    }
};

Zowel CustomTabsCallback als EngagementSignalsCallback vereisen een actieve Custom Tab-serviceverbinding. Zodra de service is verbonden, kunt u een nieuwe CustomTabsSession maken door CustomTabsClient.newSession() aan te roepen en de CustomTabsCallback door te geven.

Daarna moet u isEngagementSignalsApiAvailable() aanroepen om te controleren of betrokkenheidssignalen worden ondersteund door de huidige browser. Als ze worden ondersteund, kunt u uw EngagementSignalsCallback registreren via 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;
    }
};

Het enige dat u nog hoeft te doen, is de CustomTabsService binden:

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

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