החלק השלישי של המדריך מתמקד בהאצת הפעלת הדפדפן באמצעות warmup()
ובשליפה מראש (prefetch) של דפי אינטרנט דרך mayLaunchUrl
(). חימום תהליך הדפדפן עשוי לחסוך עד 700 אלפיות השנייה בעת פתיחת קישור. כשמעבדים מראש תוכן דרך mayLaunchUrl
, נוצר באופן מיידי תוכן חיצוני. השילוב של שני ממשקי ה-API יכול לשפר משמעותית את חוויית המשתמש בשילוב עם כרטיסיות מותאמות אישית, והם מומלצים מאוד.
השלבים הנדרשים הם:
- בודקים דרך
CustomTabsClient.getPackageName(...)
אם דפדפן ברירת המחדל תומך בכרטיסיות מותאמות. אם כן, צריך לחייב את CustomTabsService דרךCustomTabsClient.bindCustomTabsService()
. אחרי שמתחברים ל-CustomTabsService, בקריאה החוזרת
CustomTabsServiceConnection.onCustomTabsServiceConnected()
מבצעים את הפעולות הבאות:a. אפשר להפעיל חימום של תהליך הדפדפן באמצעות
CustomTabsClient.warmup()
. b. אפשר ליצורCustomTabsSession
חדש דרךCustomTabsClient.newSession()
.אפשר גם לבצע שליפה מראש (prefetch) של דפי אינטרנט שהמשתמש עשוי לבקר בהם דרך
CustomTabsSession.mayLaunchUrl()
.כשמשיקים כרטיסייה חדשה בהתאמה אישית, מעבירים את
CustomTabsSession
אל CustomTabsIntent.Builder דרך הבונהnew CustomTabsIntent.Builder(session)
.
אם האפליקציה מטרגטת רמת API של Android 30, CustomTabsClient.getPackageName(...)
צריך להוסיף קטע שאילתות למניפסט של Android, עם הצהרה על מסנן Intent שתואם לדפדפנים עם תמיכה בכרטיסיות מותאמות אישית.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
…
<queries>
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
</manifest>
הנה דוגמה מלאה של אופן ההתחברות לשירות 'כרטיסיות מותאמות אישית':
private CustomTabsClient mClient;
private CustomTabsSession mSession;
private CustomTabsServiceConnection mConnection = new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(
@NonNull ComponentName name,
@NonNull CustomTabsClient client
) {
mClient = client;
// Warm up the browser process
mClient.warmup(0 /* placeholder for future use */);
// Create a new browser session
mSession = mClient.newSession(new CustomTabsCallback());
// Pre-render pages the user is likely to visit
// you can do this any time while the service is connected
mSession.mayLaunchUrl(Uri.parse("https://developers.android.com"), null, null);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mClient = null;
mSession = null;
}
};
private void bindCustomTabService(Context context) {
// Check for an existing connection
if (mClient != null) {
// Do nothing if there is an existing service connection
return;
}
// Get the default browser package name, this will be null if
// the default browser does not provide a CustomTabsService
String packageName = CustomTabsClient.getPackageName(context, null);
if (packageName == null) {
// Do nothing as service connection is not supported
return;
}
CustomTabsClient.bindCustomTabsService(context, packageName, mConnection);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
…
bindCustomTabService(this);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String url = "https://developers.android.com";
CustomTabsIntent intent = new CustomTabsIntent.Builder(mSession)
.build();
intent.launchUrl(MainActivity.this, Uri.parse(url));
}
});
}
פתיחת דפי אינטרנט באפליקציות מקוריות
ב-Android, ניתן לטפל בכתובות URL באמצעות אפליקציות מקוריות. לדוגמה, אם המשתמש התקין את אפליקציית Facebook ולוחץ על קישור לפוסט ב-Facebook, בדרך כלל הוא מעדיף לפתוח את הקישור באפליקציית Facebook במקום בדפדפן.
כברירת מחדל, הקטע 'כרטיסיות מותאמות אישית' פותח קישורים באפליקציה המקורית המתאימה, אם היא מותקנת. עם זאת, אחרי יצירת CustomTabsServiceConnection
, ההתנהגות הזו מפסיקה לפעול ובמקום זאת כל כתובות ה-URL נפתחות בכרטיסיות בהתאמה אישית. לשיפור חוויית המשתמש, מומלץ להפעיל מחדש את ההתנהגות הזאת באמצעות הקוד הבא:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setSendToExternalDefaultHandlerEnabled(true)
.build();
השלב הבא: כך משנים את הגודל של חלונית הכרטיסיות בהתאמה אישית.