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