קישורי עומק מאפשרים להפנות משתמשים ישירות לאפליקציה מדפדפני אינטרנט, מהתראות, מהרשתות החברתיות, ממודעות וממקורות אחרים. קישורי עומק מספקים מעברים ישירים מאפליקציה לאפליקציה ומאתר לאפליקציה, ויכולים לעזור לכם להגביר את המעורבות באמצעות תוכן ממוקד ורלוונטי להקשר.
במדריך הזה מוסבר איך קישורי עומק עובדים ואיך ליצור ולבדוק קישורי עומק לתוכן שלכם.
לקישורי עומק שמפנים לאתרים או לדומיינים שלכם, מומלץ להשתמש בקישורי אפליקציה, שמספקים למשתמשים חוויה חלקה ומהימנה.
איך פועלים קישורי עומק
קישור עמוק הוא יכולת כללית של מערכת Android, והוא נתמך בכל הגרסאות ובכל המכשירים. הוא מנצל את מערכת הכוונות של Android כדי להפנות קישורי עומק לאפליקציות שמתעניינות בהם. אפליקציות שרוצות לטפל ב-URI ספציפי של קישור עומק מצהירות על מסנן Intent תואם בקובצי המניפסט של האפליקציה.
בזמן הריצה, כשהמשתמש מקיש על קישור, מערכת Android מפעילה intent ומנסה לנתב אותו לאפליקציה. מכיוון שכמה אפליקציות יכולות להצהיר על מסנני intent שתואמים ל-URI נתון, מערכת Android מבצעת את הפעולות הבאות, בסדר הזה, כדי לנתב את ה-intent:
- אם הוגדרה אפליקציית ברירת מחדל למשתמש שיכולה לטפל ב-URI, היא תיפתח.
- פותחים את האפליקציה היחידה שזמינה לטיפול ב-URI.
- המשתמש יכול לבחור אפליקציה מתיבת דו-שיח להסרת דו-משמעות.
המשמעות היא שגם אם מסנני ה-Intent תואמים ל-URI מסוים, אין ערובה לכך שהמערכת תנתב את ה-Intent של קישור העומק לאפליקציה שלכם. למשתמש יש תפקיד מרכזי בניהול האפליקציה שמטפלת ב-Intent, ולכן הוא יכול לשלוט ולבחור. כדי לקבל שליטה רבה יותר בקישורי עומק לאתרים ולדומיינים שלכם, כדאי לנסות להשתמש בקישורי אפליקציות.
בתיבת הדו-שיח לביטול דו-משמעות ב-Android, המשתמש יכול לראות את כל האפליקציות המותקנות שנרשמו לטיפול ב-Intent של קישור עומק. המשתמש יכול גם לבחור אפליקציה כברירת מחדל לסוג הקישור הזה. אחרי שהמשתמש מגדיר ברירת מחדל, המערכת לא מציגה יותר את תיבת הדו-שיח עבור הכוונה הספציפית הזו, והאפליקציה שנבחרה תיפתח באופן אוטומטי.

איור 1. תיבת הדו-שיח לביטול דו-משמעות
ההתנהגות של תיבת הדו-שיח לביטול דו-משמעות השתנתה בגרסאות שונות של Android. לדוגמה, ב-Android 12 ואילך, קישורי אינטרנט שהם לא קישורים מאומתים לאפליקציה ייפתחו בדרך כלל בדפדפן אינטרנט כברירת מחדל, בעוד שבגרסאות קודמות, יכול להיות שתופיע תיבת דו-שיח לבחירת אתר אם אפליקציה יכולה לטפל בקישור האינטרנט.
הערה: החל מ-Android 12 (רמת API 31), כוונת אינטרנט כללית מופנית לפעילות באפליקציה רק אם האפליקציה אושרה לדומיין הספציפי שכלול בכוונת האינטרנט הזו. אם האפליקציה לא אושרה לדומיין, כוונת האינטרנט מופנית לאפליקציית ברירת המחדל של הדפדפן של המשתמש.
סוגים של קישורי עומק
יש שלושה סוגים של קישורי עומק שבהם אפשר לתמוך ב-Android:
- קישורי עומק בהתאמה אישית: אלה קישורי עומק שמשתמשים בסכימת URI בהתאמה אישית (למשל
example://products/123) כדי להעביר משתמש ישירות לחלק ספציפי של תוכן באפליקציה. הם שימושיים לניווט פנימי או לקישורים ממקורות שאתם שולטים בהם, אבל הם לא קישורי אינטרנט רגילים, והם עדיין יכולים להפעיל את תיבת הדו-שיח לבחירת אפליקציה אם אפליקציה אחרת רושמת את אותה סכימה בהתאמה אישית. - קישורים לאתרים: אלה קישורי עומק שמשתמשים בסכמות הרגילות
httpו-https. הם יותר מגוונים כי הם כתובות אתרים רגילות, אבל ב-Android 12 ואילך הם כמעט תמיד יפעילו את תיבת הדו-שיח לבחירת אפליקציה, כלומר סביר להניח שהם יטופלו על ידי דפדפן האינטרנט של המשתמש כברירת מחדל, ולא ינותבו לאפליקציה שלכם. - קישורי עומק לאפליקציה: זמינים מגרסה Android 6.0 (רמת API 23). אלה קישורי אינטרנט מאומתים. באמצעות תהליך שיוך אתרים, אתם יכולים להוכיח למערכת Android שאתם הבעלים של הדומיין. אחרי האימות, המערכת מנתבת אוטומטית קישורים לדומיין הזה ישירות לאפליקציה, בלי להציג את תיבת הדו-שיח לבחירת אתר. כך נוצרת חוויה חלקה ואמינה למשתמשים.
הוספת מסנני Intent לקישורים נכנסים
כדי ליצור קישור לתוכן באפליקציה, מוסיפים למניפסט מסנן Intent שמכיל את הרכיבים וערכי המאפיינים הבאים:
מציינים את פעולת ה-Intent ACTION_VIEW כדי שאפשר יהיה להגיע למסנן ה-Intent מחיפוש Google.
מוסיפים תג אחד או יותר של <data>, שכל אחד מהם מייצג פורמט URI שמפנה לפעילות. לכל הפחות, התג <data> צריך לכלול את המאפיין android:scheme.
אפשר להוסיף עוד מאפיינים כדי לדייק את סוג ה-URI שהפעילות מקבלת. לדוגמה, יכול להיות שיש לכם כמה פעילויות שמקבלות כתובות URI דומות, אבל ההבדל ביניהן הוא רק בשם הנתיב. במקרה כזה, צריך להשתמש במאפיין android:path או בוריאציות שלו pathPattern או pathPrefix כדי להבחין בין הפעילויות שהמערכת צריכה לפתוח עבור נתיבי URI שונים.
צריך לכלול את הקטגוריה BROWSABLE. היא נדרשת כדי שיהיה אפשר לגשת למסנן הכוונות מדפדפן אינטרנט. בלי זה, לחיצה על קישור בדפדפן לא תוביל לאפליקציה שלכם.
צריך לכלול גם את הקטגוריה DEFAULT. כך האפליקציה יכולה להגיב לכוונות משתמעות. בלי זה, אפשר להתחיל את הפעילות רק אם הכוונה מציינת את שם רכיב האפליקציה.
קטע ה-XML הבא מראה איך אפשר לציין מסנן Intent במניפסט לקישור עמוק. ה-URI "example://gizmos" וה-URI "http://www.example.com/gizmos" מובילים לפעילות הזו.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
שימו לב שההבדל בין שני מסנני הכוונות הוא רק ברכיב <data>. אפשר לכלול כמה אלמנטים של <data> באותו מסנן, אבל חשוב ליצור מסננים נפרדים כשרוצים להצהיר על כתובות URL ייחודיות (למשל שילוב ספציפי של scheme ו-host), כי כמה אלמנטים של <data> באותו מסנן כוונות למעשה מתמזגים כדי להביא בחשבון את כל הווריאציות של המאפיינים המשולבים שלהם. לדוגמה:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
יכול להיות שנדמה שהשיטה הזו תומכת רק ב-https://www.example.com וב-app://open.my.app. אבל בפועל הוא תומך בשני הפלייסהולדרים האלה, בנוסף לפלייסהולדרים הבאים:
app://www.example.com ו-https://open.my.app.
זהירות: אם כמה פעילויות מכילות מסנני כוונות שמפנים לאותו קישור מאומת לאפליקציית Android, אין ערובה לכך שהקישור יטופל על ידי פעילות מסוימת.
אחרי שמוסיפים מסנני Intent עם מזהי URI לתוכן פעילות למניפסט של האפליקציה, מערכת Android יכולה לנתב כל Intent עם מזהי URI תואמים לאפליקציה בזמן הריצה.
מידע נוסף על הגדרת מסנני כוונות מופיע במאמר איך מאפשרים לאפליקציות אחרות להפעיל את הפעילות שלכם.
קריאת נתונים מכוונות נכנסות
אחרי שהמערכת מתחילה את הפעילות באמצעות מסנן כוונות, אפשר להשתמש בנתונים שסופקו על ידי Intent כדי לקבוע מה צריך להציג. קוראים לשיטות getData() ו-getAction() כדי לאחזר את הנתונים ואת הפעולה שמשויכים ל-Intent הנכנס. אפשר לקרוא לשיטות האלה בכל שלב במהלך מחזור החיים של הפעילות, אבל בדרך כלל כדאי לעשות את זה במהלך קריאות חוזרות מוקדמות כמו onCreate() או onStart.
בדוגמה הבאה אפשר לראות איך מאחזרים נתונים מ-Intent:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
Java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
כדי לשפר את חוויית המשתמש, כדאי לפעול לפי השיטות המומלצות הבאות:
- קישור העומק צריך להפנות את המשתמשים ישירות לתוכן, בלי הנחיות, דפים בין-דפוסים או התחברויות. חשוב לוודא שהמשתמשים יכולים לראות את התוכן של האפליקציה, גם אם הם אף פעם לא פתחו את האפליקציה בעבר. אפשר להציג למשתמשים הנחיות באינטראקציות הבאות או כשהם פותחים את האפליקציה ממרכז האפליקציות.
- כדי שהאפליקציה תעמוד בציפיות של המשתמשים לגבי ניווט אחורה אחרי שהם נכנסים לאפליקציה דרך קישור עומק, צריך לפעול לפי הנחיות העיצוב שמתוארות במאמר ניווט באמצעות הכפתורים 'הקודם' ו'למעלה'.
בדיקה של קישורי העומק
אתם יכולים להשתמש בממשק הגישור של Android עם הכלי activity manager (am) כדי לבדוק שכתובות ה-URI של מסנן ה-Intent שציינתם לקישורי עומק מפנות לפעילות הנכונה באפליקציה. אפשר להריץ את פקודת adb במכשיר או באמולטור.
התחביר הכללי לבדיקת URI של מסנן Intent באמצעות adb הוא:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
לדוגמה, הפקודה הבאה מנסה להציג פעילות של אפליקציית יעד שמשויכת ל-URI שצוין.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
הערה: כשמגדירים אוסף של טיפוסים פרימיטיביים במסלול, כמו **@Serializable data class Product(val colors: List)**, הפורמט של כתובת ה-URL של קישור העומק שנוצר באופן אוטומטי הוא **basePath?colors={value**}. אם מנסים לציין URI עם כמה פרמטרים של שאילתה (לדוגמה, **basepath?colors=red&colors=blue**), צריך להוסיף תו בריחה לאמפרסנד (לדוגמה, **basepath?colors=red\&colors=blue**).
ההצהרה במניפסט ומטפל ה-Intent שהגדרתם מגדירים את הקשר בין האפליקציה לבין אתר, ואת הפעולות שיש לבצע לגבי קישורים נכנסים. עם זאת, כדי שהמערכת תתייחס לאפליקציה שלכם כמטפל ברירת המחדל בקבוצה של כתובות URI, אתם צריכים גם לבקש מהמערכת לאמת את החיבור הזה. במאמר אימות קישורים לאפליקציות מוסבר איך מטמיעים את האימות הזה.
מידע נוסף על כוונות וקישורי אפליקציות זמין במקורות המידע הבאים:
- כוונות ומסנני כוונות
- איך מאפשרים לאפליקציות אחרות להתחיל את הפעילות
- הוספת קישורי עומק לאפליקציות ב-Android באמצעות Android Studio