Bu kılavuzda, Chrome Özel sekmeleri için etkileşim sinyallerinin nasıl ölçüleceği açıklanmaktadır. Uygulamanız kullanıcılarına düzenli olarak web içeriğine yönlendiren bağlantılar sunuyorsa (ör. bir haber feed'inde) kullanıcıların hangi bağlantıları değerli bulup hangilerinin olmadığını bilmek önemli olabilir. Özel Sekmelerde gezinme sayısı, kaydırma yönü değişiklikleri ve kaydırma derinliği aracılığıyla oturuma özel kullanıcı etkileşimini ölçebilirsiniz. Etkileşim sinyallerini çalışırken görmek için GitHub'daki Özel Sekmeler demo uygulamasına göz atın.
Özel Sekmeler, kullanıcı etkileşimini ölçmek için iki farklı geri çağırma sağlar:
"NAVIGATION_STARTED"
veya"NAVIGATION_FINISHED"
gibi temel gezinme etkinliklerini izlemek içinCustomTabsCallback
.- Kaydırma yönü veya kaydırma yüzdesi gibi sayfaya özel kullanıcı etkileşimini izlemek için
EngagementSignalsCallback
.
Her ikisi için de etkin bir CustomTabsServiceConnection
gerekir. Bir CustomTabsService
cihazına nasıl bağlanacağınızla ilgili ayrıntılar için önceki CustomTabsService
kılavuzuna bakın.
Kullanıcı etkileşimini ölçmek için önce CustomTabsCallback
ve EngagementSignalsCallback
örneği oluşturun. CustomTabsCallback
, ne tür gezinme olduğunu açıklayan navigationEvent
sabit değeri alır:
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
, üç farklı geri çağırmayı destekler:
onVerticalScrollEvent()
- Kullanıcı kaydırma yönünü her değiştirdiğinde çağrılır. Burada
isDirectionUp
(ilk bağımsız değişken) yönü belirtir.
onGreatestScrollPercentageIncreased
: Kullanıcı sayfanın en altına ulaştığında Özel Sekme, %5'lik aralıklarda en fazla% 100 olacak şekilde kaydırma derinliğini gösterir. Geri çağırma yalnızca kullanıcı kaydırmayı durdurduktan sonra çağrılır. Değer, her yeni gezinmede% 0'a sıfırlanır.onSessionEnded
: Özel Sekme, etkileşim sinyalleri göndermeyi durdurduğunda (örneğin, kullanıcı Özel Sekmeyi kapattıktan sonra) bu etkinliği tetikler. Kullanıcı sayfayla herhangi bir şekilde (kaydırma, düğmeyi tıklama vb.) etkileşimde bulunursadidUserInteract
doğru olacaktır.
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");
}
};
Hem CustomTabsCallback
hem de EngagementSignalsCallback
için etkin bir Özel Sekme hizmeti bağlantısı gerekir. Hizmet bağlandıktan sonra CustomTabsClient.newSession()
yöntemini çağırıp CustomTabsCallback
öğesini ileterek yeni bir CustomTabsSession
oluşturabilirsiniz.
Ardından, etkileşim sinyallerinin mevcut tarayıcı tarafından desteklenip desteklenmediğini kontrol etmek için isEngagementSignalsApiAvailable()
numaralı telefonu aramalısınız. Destekleniyorsa EngagementSignalsCallback
cihazınızı CustomTabsSession.setEngagementSignalsCallback()
üzerinden kaydedebilirsiniz.
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;
}
};
Tek yapmanız gereken CustomTabsService
öğesini bağlamaktır:
@Override
protected void onStart() {
super.onStart();
bindCustomTabsService();
}
private void bindCustomTabsService() {
String packageName = CustomTabsHelper.getPackageNameToUse(this);
if (packageName == null) return;
CustomTabsClient.bindCustomTabsService(this, packageName, mConnection);
}