יצירת קישורי עומק לתוכן האפליקציה

כאשר קישור שלחצו עליו או בקשה פרוגרמטית מפעילים Intent URI של אינטרנט, מערכת Android מנסה כל אחת מהפעולות הבאות, בסדר רציף, עד שהבקשה מצליחה:

  1. פותחים את האפליקציה המועדפת של המשתמש שיכולה לטפל ב-URI, אם יש כזו.
  2. פותחים את האפליקציה היחידה שזמינה ויכולה לטפל ב-URI.
  3. מאפשרים למשתמש לבחור אפליקציה מתיבת דו-שיח.

כדי ליצור ולבדוק קישורים לתוכן שלכם, פועלים לפי השלבים הבאים. אפשר גם להשתמש להוספה של App Links ל-Assistant ב-Android Studio קישורים לאפליקציות ל-Android.

הערה: החל מ-Android 12 (רמת API 31), כוונה כלליות לאינטרנט מנותבות לפעילות באפליקציה רק אם האפליקציה אושרה לדומיין הספציפי שמכיל את הכוונה הזו לאינטרנט. אם האפליקציה לא אושרה עבור הדומיין, ה-Intent באינטרנט מפנה לאפליקציית הדפדפן שהוגדרה כברירת מחדל של המשתמש במקום זאת.

הוספת מסנני Intent לקישורים נכנסים

כדי ליצור קישור לתוכן של האפליקציה, צריך להוסיף מסנן Intent מכיל את הרכיבים וערכי המאפיינים הבאים במניפסט:

<action>
יש לציין את פעולת ה-Intent ACTION_VIEW שניתן להגיע למסנן Intent מחיפוש Google.
<data>
מוסיפים תג <data> אחד או יותר, שכל אחד מהם מייצג פורמט URI שמפנה לפעילות. לכל הפחות, התג <data> חייב לכלול android:scheme .

אפשר להוסיף עוד מאפיינים כדי לצמצם עוד יותר את סוג ה-URI שהפעילות מקבלת. לדוגמה, יכול להיות שיש לכם כמה פעילויות שמקבלות כתובות URI דומות, אבל שונות רק על סמך שם הנתיב. במקרה כזה, משתמשים מאפיין android:path או את וריאציות pathPattern או pathPrefix שלו, כדי להבדיל הפעילות שהמערכת צריכה לפתוח עבור נתיבי URI שונים.

<category>
כוללים את הקטגוריה BROWSABLE. השדה הזה נדרש כדי שמסנן ה-Intent יהיה נגיש מהאינטרנט בדפדפן. בלי הקוד הזה, לחיצה על קישור בדפדפן לא תוכל להוביל לאפליקציה שלכם.

צריך לכלול גם את הקטגוריה DEFAULT. התכונה הזו מאפשרת לאפליקציה להגיב לכוונות מרומזות. בלי זה, אפשר להתחיל את הפעילות רק אם ה-Intent מציין את השם של רכיב האפליקציה.

קטע ה-XML הבא מראה איך אפשר לציין מסנן כוונה במניפסט לקישור עומק. מזהי ה-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>

שימו לב שההבדל בין שני מסנני הכוונה הוא רק ברכיב <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 זמין מתן הרשאה לאפליקציות אחרות להתחיל את הפעילות שלכם

קריאת נתונים מ-Intents נכנסים

אחרי שהמערכת מפעילה את הפעילות דרך מסנן כוונה, תוכלו להשתמש בנתונים שסופקו על ידי 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 של מסנן 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

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

למידע נוסף על כוונות מודעה וקישורים לאפליקציות, אפשר להיעזר במקורות המידע הבאים: