הוספת מסנני Intent לקישורי אפליקציות

קישורי עומק לאפליקציות הם קישורים שמשתמשים בסכימת HTTP או HTTPS ומאומתים על ידי Android כקישורים שמשויכים לאתר שלכם. כדי להירשם לטיפול בקישורי אפליקציות, פועלים לפי השלבים הבאים:

  1. מוסיפים לקובץ המניפסט של האפליקציה מסנן Intent אחד או יותר שמציין את הדומיין או כתובות ה-URL של האתר.
  2. מוסיפים את autoVerify="true"attribute לרכיבי מסנן ה-Intent. הפעולה הזו מסמנת למערכת שהיא צריכה לנסות לאמת את הסכימה ואת דומיין המארח מול ההגדרה של assetlinks.json באתר שלכם.
  3. הצהרה על שיוכים לאתרים.

הדוגמה הבאה מציגה הצהרה של קישור לאפליקציה עם סכימות ומארחים, וגם autoVerify="true:

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- Make sure you explicitly set android:autoVerify to "true". -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- If a user clicks on a link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

נקודות חשובות לגבי הקוד

  • AutoVerify: חובה להוסיף את המאפיין android:autoVerify="true" לקישורי עומק לאפליקציה. הוא מסמן למערכת שהיא צריכה לנסות לאמת את השיוך בין האפליקציה לבין הסכמות והדומיינים שצוינו בתגי <data>. מומלץ להוסיף autoVerify="true" לכל מסנן Intent שרוצים לאמת.
  • רכיבי נתונים: כל מסנן Intent של App Links חייב לכלול רכיב <data> אחד או יותר שמציינים את הסכימות ואת פורמטים המארחים שתואמים לדומיין האתר שניתן לאימות.
  • סכמות: מסנן ה-Intent חייב לכלול רכיבי <data> גם לסכמות http וגם לסכמות https.
  • מארחים: אפשר להוסיף רכיבי <data> כדי להתאים למארח אחד או יותר. אפשר להשתמש בתו כללי לחיפוש (*) כדי להתאים לכמה תת-דומיינים (למשל *.example.com). המערכת תנסה לאמת כל מארח מול קובץ assetlinks.json באתר שלכם. חשוב לזכור שניתוב ברמת הנתיב צריך להתבצע באמצעות הקובץ assetlinks.json (ראו את קטע השיטות המומלצות בהמשך).

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

  • מסנני Intent מרובים: חשוב ליצור מסננים נפרדים כשרוצים להצהיר על כתובות URL ייחודיות (למשל שילוב ספציפי של סכימה ומארח), כי כמה אלמנטים של <data> באותו מסנן Intent משולבים יחד כדי להתייחס לכל הווריאציות של המאפיינים המשולבים שלהם.

שיקולים לגבי כללי סינון של קובץ מניפסט

אם אתם מגדירים מסננים לשימוש בקישורי עומק דינמיים לאפליקציות ב-Android 15 ובגרסאות מתקדמות יותר, חשוב לזכור שהכללים הדינמיים שמוצהרים בקובץ assetlinks.json בצד השרת לא יכולים להרחיב את היקף הכללים של כתובות ה-URL שמוצהרים באופן סטטי במניפסט האפליקציה.

לכן, אנחנו ממליצים להשתמש בגישה הזו:

  • במניפסט של האפליקציה, מגדירים את ההיקף הרחב ביותר האפשרי, למשל על ידי הצהרה על סכימה ודומיין בלבד
  • להסתמך על הכללים של assetlinks.json בצד השרת כדי לבצע שיפורים נוספים, כמו ניתוב ברמת הנתיב.

עם ההגדרה האידיאלית הזו, תוכלו להוסיף באופן דינמי נתיבים חדשים של App Links לקובץ assetlinks.json לפי הצורך, בידיעה שהם יתאימו להיקף הרחב שהגדרתם במניפסט האפליקציה.

תמיכה בקישורים לאפליקציות למספר מארחים

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

לדוגמה, אפליקציה עם מסנני הכוונות הבאים תעבור אימות רק עבור https://www.example.com אם קובץ assetlinks.json יימצא בנתיב https://www.example.com/.well-known/assetlinks.json, אבל לא בנתיב https://www.example.net/.well-known/assetlinks.json:

<application>

  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
    </intent-filter>
  </activity>
  <activity android:name="SecondActivity">
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
     <data android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

תמיכה בקישור אפליקציות למספר תת-דומיינים

פרוטוקול Digital Asset Links מתייחס לתתי-דומיין במסנני ה-Intent שלכם כמארחים ייחודיים ונפרדים. לכן, אם מסנן ה-Intent שלכם כולל מספר מארחים עם תתי-דומיינים שונים, אתם צריכים לפרסם רשומת assetlinks.json תקינה בכל דומיין. לדוגמה, מסנן ה-Intent הבא כולל את www.example.com ואת mobile.example.com כמארחים קבילים של כתובות URL של Intent. לכן, צריך לפרסם מספר תקף של assetlinks.json גם בכתובת https://www.example.com/.well-known/assetlinks.json וגם בכתובת https://mobile.example.com/.well-known/assetlinks.json.

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
      <data android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

לחלופין, אם אתם מצהירים על שם המארח באמצעות תבנית wildcard (כמו *.example.com), אתם צריכים לפרסם את הקובץ assetlinks.json בשם המארח הבסיסי (example.com). לדוגמה, אפליקציה עם מסנן ה-Intent הבא תעבור אימות לכל שם משנה של example.com (כמו foo.example.com) כל עוד הקובץ assetlinks.json מתפרסם בכתובת https://example.com/.well-known/assetlinks.json:

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

בדיקה אם יש כמה אפליקציות שמשויכות לאותו דומיין

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

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