קישורי עומק מאפשרים לכם להעביר משתמשים ישירות לאפליקציה שלכם מדפדפני אינטרנט, מהתראות, מרשתות חברתיות, ממודעות וממקורות אחרים. קישורי עומק מספקים מעברים ישירים מאפליקציה לאפליקציה ומאתר לאפליקציה, שיכולים לעזור לכם להגביר את המעורבות באמצעות תוכן מטורגט לפי הקשר.
במדריך הזה מוסבר איך קישורי עומק פועלים ואיך ליצור ולבדוק קישורי עומק לתוכן שלכם.
בקישורי עומק שמפנים לאתר או לדומיינים שלכם, מומלץ להשתמש ב-App Links, שמספקים למשתמשים חוויה חלקה ואמינה.
איך פועלים קישורי עומק
קישורי עומק הם יכולת מערכת כללית של Android, שנתמכת בכל הגרסאות ובכל המכשירים. הוא משתמש במערכת ה-Intent של Android כדי לנתב קישורי עומק לאפליקציות הרלוונטיות. אפליקציות שרוצות לטפל ב-URI ספציפי של קישור עומק מצהירות על מסנן Intent תואם בקובצי המניפסט של האפליקציה שלהן.
בזמן הריצה, כשהמשתמש לוחץ על קישור, Android מפעילה Intent ומנסה לנתב אותו לאפליקציה. מכיוון שכמה אפליקציות יכולות להצהיר על מסנני Intent שתואמים ל-URI נתון, Android מבצעת את הפעולות הבאות, בסדר הזה, כדי לנתב את ה-Intent:
- לפתוח את אפליקציית ברירת המחדל של המשתמש שיכולה לטפל ב-URI, אם הוגדרה אפליקציה כזו.
- פתיחת האפליקציה היחידה שיכולה לטפל ב-URI.
- לאפשר למשתמש לבחור אפליקציה מתוך תיבת דו-שיח להפגת עמימות.
כלומר, גם אם מסנני ה-Intent שלכם תואמים ל-URI מסוים, אין ערובה לכך שהמערכת תנתב את ה-Intent של קישור העומק לאפליקציה שלכם. המשתמשים הם אלה שקובעים איזו אפליקציה תטפל ב-Intent, מה שנותן להם שליטה ומאפשר להם לבחור. כדי לקבל יותר שליטה על קישורי עומק לאתר ולדומיינים שלכם, נסו להשתמש בקישורים לאפליקציה.
תיבת הדו-שיח להפגת עמימות ב-Android מאפשרת למשתמש לראות את כל האפליקציות המותקנות שנרשמו לטיפול ב-Intent של קישור עומק. המשתמש יכול גם לבחור אפליקציה כברירת מחדל לסוג הקישור הזה. אחרי שהמשתמש מגדיר ברירת מחדל, המערכת לא מציגה יותר את תיבת הדו-שיח של ה-Intent הספציפי הזה, והאפליקציה שנבחרה נפתחת באופן אוטומטי.
ההתנהגות של תיבת הדו-שיח להפגת עמימות השתנתה בגרסאות השונות של Android. לדוגמה, ב-Android מגרסה 12 ואילך, קישורים לדפי אינטרנט אחרים שהם לא קישורים מאומתים לאפליקציות ייפתחו בדרך כלל בדפדפן אינטרנט כברירת מחדל. לעומת זאת, בגרסאות קודמות, יכול להיות שתוצג תיבת דו-שיח להפגת עמימות אם אפליקציה יכולה לטפל בקישור לדף אינטרנט אחר.
סוגים של קישורי עומק
יש שלושה סוגים של קישורי עומק שאפשר לתמוך בהם ב-Android:
- קישורי עומק בהתאמה אישית: אלה קישורי עומק שמשתמשים בסכימת URI בהתאמה אישית (כמו
example://products/123) כדי להעביר את המשתמש ישירות לתוכן ספציפי באפליקציה. הם יעילים לניווט פנימי או לקישורים ממקורות שבשליטתכם, אבל הם לא קישורים לדפי אינטרנט אחרים ועדיין יכולים להפעיל את תיבת הדו-שיח להפגת עמימות אם אפליקציה אחרת רושמת את אותה סכימה בהתאמה אישית. - קישורים לדפי אינטרנט אחרים: אלה קישורי עומק שמשתמשים בסכמות הרגילות
httpו-https. הם יותר גמישים כי הם כתובות URL רגילות, אבל ב-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. הוא נדרש כדי שיהיה אפשר לגשת למסנן ה-Intent מדפדפן אינטרנט. בלעדיו, לחיצה על קישור בדפדפן לא תפתח את האפליקציה.
צריך לכלול גם את הקטגוריה DEFAULT. כך האפליקציה יכולה להגיב ל-Intent משתמע. בלי זה, אפשר להתחיל את הפעילות רק אם כוונת המשתמש מציינת את שם רכיב האפליקציה.
קטע ה-XML הבא מדגים איך אפשר לציין מסנן Intent בקובץ המניפסט לצורך קישורי עומק. מזהי ה-URI "example://gizmos" ו-"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>
שימו לב שההבדל היחיד בין שני מסנני ה-Intent הוא הרכיב <data>. אפשר לכלול כמה רכיבי <data> באותו מסנן, אבל חשוב ליצור מסננים נפרדים כשרוצים להצהיר על כתובות URL ייחודיות (כמו שילוב ספציפי של scheme ו-host), כי כמה רכיבי <data> באותו מסנן Intent למעשה מתמזגים יחד כדי להביא בחשבון את כל הווריאציות של המאפיינים המשולבים שלהם. לדוגמה:
<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.
אחרי שמוסיפים לקובץ המניפסט של האפליקציה מסנני Intent עם מזהי URI לתוכן של פעילות, מערכת Android יכולה לנתב לאפליקציה בזמן הריצה כל Intent עם מזהי URI תואמים.
מידע נוסף על הגדרת מסנני Intent זמין במאמר איך מאפשרים לאפליקציות אחרות להתחיל את ה-Activity.
קריאת נתונים מ-Intent נכנסים
אחרי שהמערכת מפעילה את הפעילות באמצעות מסנן Intent, אפשר להשתמש בנתונים שסופקו על ידי Intent כדי לקבוע מה צריך לעבד. מפעילים את השיטות getData() ו-getAction() כדי לאחזר את הנתונים והפעולה שמשויכים ל-Intent הנכנס. אפשר להפעיל את השיטות האלה בכל שלב במחזור החיים של הפעילות, אבל בדרך כלל כדאי לעשות את זה במהלך קריאות חוזרות (callbacks) מוקדמות כמו 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 Debug Bridge עם הכלי 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
החל מ-Android 17, אפשר גם להשתמש בדגל --debug-link עם am start כדי לאבחן איך המערכת פותרת כתובת URL ולבדוק מסנני Intent תואמים או כללים של קישורים דינמיים לאפליקציה. מידע נוסף זמין במאמר אבחון של פתרון קישורים באמצעות הדגל debug-link.
הצהרת המניפסט ומטפל ה-Intent שהגדרתם קובעים את החיבור בין האפליקציה לאתר, ומה לעשות עם קישורים נכנסים. עם זאת, כדי שהמערכת תתייחס לאפליקציה שלכם ככלי הטיפול שמוגדר כברירת מחדל לקבוצה של מזהי URI, אתם צריכים גם לבקש מהמערכת לאמת את החיבור הזה. במאמר אימות קישורי עומק לאפליקציה מוסבר איך להטמיע את האימות הזה.
מידע נוסף על כוונות וקישורים לאפליקציות זמין במקורות המידע הבאים:
- Intents ומסנני Intent
- מאפשרים לאפליקציות אחרות להתחיל את ה-Activity
- הוספה של קישורי עומק לאפליקציות ב-Android באמצעות Android Studio