این راهنما نحوه اندازهگیری سیگنالهای تعامل را برای برگههای سفارشی Chrome توضیح میدهد. اگر برنامه شما به طور منظم پیوندهایی به محتوای وب را برای کاربران خود نشان می دهد، به عنوان مثال در یک فید خبری، می تواند مهم باشد که بدانید کاربران کدام پیوندها را ارزشمند می دانند و کدام را نه. در برگههای سفارشی، میتوانید تعامل کاربر خاص جلسه را از طریق تعداد پیمایشها، تغییر جهت پیمایش و عمق پیمایش اندازهگیری کنید. برای مشاهده سیگنالهای تعامل در عمل، برنامه نمایشی Custom Tabs را در GitHub بررسی کنید.
تب های سفارشی دو تماس مختلف برای اندازه گیری تعامل کاربر ارائه می دهند:
-
CustomTabsCallback
برای ردیابی رویدادهای ناوبری اساسی، مانند"NAVIGATION_STARTED"
یا"NAVIGATION_FINISHED"
. -
EngagementSignalsCallback
برای ردیابی تعامل کاربر خاص صفحه، مانند جهت پیمایش یا درصد پیمایش.
هر دو به یک CustomTabsServiceConnection
فعال نیاز دارند. برای جزئیات نحوه اتصال به CustomTabsService
راهنمای قبلی CustomTabsService
را ببینید.
برای اندازه گیری تعامل کاربر، ابتدا یک CustomTabsCallback
و یک نمونه EngagementSignalsCallback
ایجاد کنید. CustomTabsCallback
یک ثابت navigationEvent
را دریافت می کند که نوع ناوبری را توصیف می کند:
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
از سه تماس مختلف پشتیبانی می کند:
-
onVerticalScrollEvent()
- هر بار که کاربر جهت پیمایش را تغییر میدهد فراخوانی میشود، جایی که
isDirectionUp
(نخستین آرگومان) جهت را نشان میدهد.
-
onGreatestScrollPercentageIncreased
: وقتی کاربر به انتهای صفحه رسید، برگه سفارشی عمق پیمایش را در فواصل 5% تا 100% سیگنال می دهد. تماس پاسخ تنها زمانی فراخوانی می شود که کاربر پیمایش را متوقف کند. با هر پیمایش جدید، مقدار به 0٪ بازنشانی می شود. -
onSessionEnded
: برگه سفارشی زمانی که ارسال سیگنالهای تعامل را متوقف میکند (به عنوان مثال، پس از بستن برگه سفارشی توسط کاربر) این رویداد را فعال میکند. اگر کاربر به هر نحوی با صفحه تعامل داشته باشد (پیمایش، کلیک دکمه و غیره)didUserInteract
درست خواهد بود.
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");
}
};
هر دو CustomTabsCallback
و EngagementSignalsCallback
به یک اتصال سرویس Custom Tab فعال نیاز دارند. پس از اتصال سرویس، می توانید با فراخوانی CustomTabsClient.newSession()
و ارسال CustomTabsCallback
یک CustomTabsSession
جدید ایجاد کنید.
پس از آن، باید isEngagementSignalsApiAvailable()
را فراخوانی کنید تا بررسی کنید که آیا سیگنال های تعامل توسط مرورگر فعلی پشتیبانی می شوند یا خیر. اگر آنها پشتیبانی می شوند، می توانید EngagementSignalsCallback
خود را از طریق 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;
}
};
تنها کاری که باید انجام دهید اتصال CustomTabsService
است:
@Override
protected void onStart() {
super.onStart();
bindCustomTabsService();
}
private void bindCustomTabsService() {
String packageName = CustomTabsHelper.getPackageNameToUse(this);
if (packageName == null) return;
CustomTabsClient.bindCustomTabsService(this, packageName, mConnection);
}