כשקישור שלחצו עליו או בקשה פרוגרמטית מפעילים כוונת URI באינטרנט, מערכת Android מנסה לבצע כל אחת מהפעולות הבאות, בסדר רציף, עד שהבקשה מצליחה:
- פותחים את האפליקציה המועדפת על המשתמש שיכולה לטפל ב-URI, אם הוגדרה אפליקציה כזו.
- פותחים את האפליקציה היחידה שזמינה לטיפול ב-URI.
- מאפשר למשתמש לבחור אפליקציה מתיבת דו-שיח.
כדי ליצור קישורים לתוכן ולבדוק אותם, פועלים לפי השלבים הבאים. אפשר גם להשתמש בכלי App Links Assistant ב-Android Studio כדי להוסיף קישורים לאפליקציות ל-Android.
הערה: החל מ-Android 12 (רמת API 31), כוונת אינטרנט כללית מופנית לפעילות באפליקציה רק אם האפליקציה אושרה לדומיין הספציפי שכלול בכוונת האינטרנט הזו. אם האפליקציה לא אושרה לדומיין, כוונת האינטרנט תופנה לאפליקציית ברירת המחדל של המשתמש בדפדפן.
הוספת מסנני Intent לקישורים נכנסים
כדי ליצור קישור לתוכן באפליקציה, מוסיפים למניפסט מסנן Intent שמכיל את הרכיבים וערכי המאפיינים הבאים:
<action>
- מציינים את פעולת ה-Intent
ACTION_VIEW
כדי שאפשר יהיה להגיע למסנן ה-Intent מחיפוש Google. <data>
- מוסיפים תג
<data>
אחד או יותר, שכל אחד מהם מייצג פורמט URI שמוביל לפעילות. לפחות, התג<data>
חייב לכלול את המאפייןandroid:scheme
.אפשר להוסיף עוד מאפיינים כדי לדייק את סוג ה-URI שהפעילות מקבלת. לדוגמה, יכול להיות שיש לכם כמה פעילויות שמקבלות כתובות URI דומות, אבל ההבדל ביניהן הוא רק בשם הנתיב. במקרה כזה, צריך להשתמש במאפיין
android:path
או בגרסאות שלוpathPattern
אוpathPrefix
כדי להבדיל בין הפעילויות שהמערכת צריכה לפתוח עבור נתיבי URI שונים. <category>
- כוללים את הקטגוריה.
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
.
שימו לב: אם כמה פעילויות מכילות מסנני Intent שמובילים לאותו קישור מאומת לאפליקציית Android, אין ערובה לכך שהפעילות תטפל בקישור.
אחרי שמוסיפים למניפסט של האפליקציה מסנני כוונות עם מזהי 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 Debug Bridge עם הכלי activity manager (am) כדי לבדוק שכתובות ה-URI של מסנן הכוונות שציינתם לקישורי עומק מפנות לפעילות הנכונה באפליקציה. אפשר להריץ את פקודת adb במכשיר או באמולטור.
התחביר הכללי לבדיקת URI של מסנן כוונות באמצעות 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
ההצהרה בקובץ המניפסט ומטפל הכוונות שהגדרתם למעלה מגדירים את הקשר בין האפליקציה לבין אתר אינטרנט, ומה לעשות עם קישורים נכנסים. עם זאת, כדי שהמערכת תתייחס לאפליקציה שלכם כמטפל ברירת המחדל בקבוצה של כתובות URI, אתם צריכים גם לבקש מהמערכת לאמת את הקישור הזה. בשיעור הבא מוסבר איך להטמיע את האימות הזה.
מידע נוסף על כוונות וקישורים לאפליקציות זמין במקורות המידע הבאים:
- כוונות ומסנני כוונות
- מתן אפשרות לאפליקציות אחרות להתחיל את הפעילות שלכם
- הוספת קישורים לאפליקציות ל-Android באמצעות Android Studio