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ği bağlantıları sunuyorsa (ör. bir haber feed'inde) kullanıcıların hangi bağlantıları değerli bulduğunu ve hangilerini bulmadığını bilmek önemli olabilir. Özel Sekmeler'de, gezinme sayısı, kaydırma yönü değişiklikleri ve kaydırma derinliği aracılığıyla oturuma özgü 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
.- Sayfaya özgü kullanıcı etkileşimini (ör. kaydırma yönü veya kaydırma yüzdesi) izlemek için
EngagementSignalsCallback
.
Her ikisi için de etkin bir CustomTabsServiceConnection
gerekir. 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 bir CustomTabsCallback
ve bir EngagementSignalsCallback
örneği oluşturun. CustomTabsCallback
, hangi tür bir gezinmenin gerçekleştiğini açıklayan bir 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.
isDirectionUp
(ilk bağımsız değişken), yönü belirtir.
onGreatestScrollPercentageIncreased
: Kullanıcı, sayfanın en altına ulaştığında Özel Sekme, %100'e kadar olan aralıklarla% 5'lik aralıklarda kaydırma derinliğini gösterir. Geri çağırma yalnızca kullanıcı kaydırmayı durdurduğunda çağrılır. Değer, her yeni gezinmeyle birlikte% 0 olarak sıfırlanır.onSessionEnded
: Özel Sekme, etkileşim sinyalleri göndermeyi durdurduğunda (örneğin, kullanıcı Özel Sekme'yi kapattıktan sonra) bu etkinliği tetikler. Kullanıcı sayfayla herhangi bir şekilde etkileşime geçtiyse (kaydırma, düğme tıklama vb.)didUserInteract
doğru olur.
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 hizmet bağlantısı gerekir. Hizmet bağlandıktan sonra CustomTabsClient.newSession()
çağrısını yaparak ve CustomTabsCallback
değerini ileterek yeni bir CustomTabsSession
oluşturabilirsiniz.
Ardından, etkileşim sinyallerinin geçerli tarayıcı tarafından desteklenip desteklenmediğini kontrol etmek için isEngagementSignalsApiAvailable()
işlevini çağırmanız gerekir. Destekleniyorsa EngagementSignalsCallback
'nizi 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);
}