In diesem Leitfaden erfahren Sie, wie Sie Engagement-Signale für benutzerdefinierte Tabs in Chrome messen. Wenn Ihre App Nutzern regelmäßig Links zu Webinhalten anzeigt, z. B. in einem Nachrichtenfeed, ist es wichtig zu wissen, welche Links für Nutzer relevant sind und welche nicht. Auf benutzerdefinierten Tabs können Sie sitzungsspezifische Nutzerinteraktionen über die Anzahl der Navigationen, Änderungen der Scrollrichtung und die Scrolltiefe messen. In der Demo-App für benutzerdefinierte Tabs auf GitHub können Sie die Engagement-Signale in Aktion sehen.
<ph type="x-smartling-placeholder">Benutzerdefinierte Tabs bieten zwei verschiedene Callbacks zum Messen der Nutzerinteraktion:
CustomTabsCallback
zum Erfassen grundlegender Navigationsereignisse wie"NAVIGATION_STARTED"
oder"NAVIGATION_FINISHED"
EngagementSignalsCallback
zum Erfassen seitenspezifischer Nutzerinteraktionen, z. B. Scrollrichtung oder Scrollprozentsatz
Für beide ist ein aktives CustomTabsServiceConnection
erforderlich. Weitere Informationen zum Verbinden mit einem CustomTabsService
findest du im vorherigen CustomTabsService
-Leitfaden.
Wenn Sie das Nutzer-Engagement messen möchten, erstellen Sie zuerst eine CustomTabsCallback
- und eine EngagementSignalsCallback
-Instanz. CustomTabsCallback
erhält eine navigationEvent
-Konstante, die beschreibt, welche Art der Navigation stattgefunden hat:
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
unterstützt drei verschiedene Callbacks:
onVerticalScrollEvent()
- Wird jedes Mal aufgerufen, wenn der Nutzer die Scrollrichtung ändert, wobei
isDirectionUp
(das erste Argument) die Richtung angibt.
onGreatestScrollPercentageIncreased
: Auf dem benutzerdefinierten Tab wird die Scrolltiefe in 5-%-Intervallen bis zu 100% signalisiert, wenn der Nutzer das Ende der Seite erreicht hat. Der Callback wird erst aufgerufen, wenn der Nutzer das Scrollen beendet. Der Wert wird bei jeder neuen Navigation auf 0% zurückgesetzt.onSessionEnded
: Auf dem benutzerdefinierten Tab wird dieses Ereignis ausgelöst, wenn keine Interaktionssignale mehr gesendet werden, z. B. nachdem der Nutzer den benutzerdefinierten Tab geschlossen hat.didUserInteract
ist „true“, wenn der Nutzer mit der Seite interagiert hat (Scrollen, Klicken auf eine Schaltfläche usw.).
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");
}
};
Sowohl für CustomTabsCallback
als auch für EngagementSignalsCallback
ist eine aktive Verbindung zum Dienst des benutzerdefinierten Tabs erforderlich. Sobald der Dienst verbunden ist, können Sie eine neue CustomTabsSession
erstellen, indem Sie CustomTabsClient.newSession()
aufrufen und CustomTabsCallback
übergeben.
Anschließend sollten Sie isEngagementSignalsApiAvailable()
aufrufen, um zu prüfen, ob vom aktuellen Browser Engagement-Signale unterstützt werden. Wenn diese unterstützt werden, kannst du EngagementSignalsCallback
über CustomTabsSession.setEngagementSignalsCallback()
registrieren.
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;
}
};
Jetzt müssen Sie nur noch 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);
}