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

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

  • במניפסט של האפליקציה, מגדירים את ההיקף הרחב ביותר האפשרי, למשל על ידי הצהרה על scheme ועל domain בלבד
  • להסתמך על הכללים של 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 שלכם כמארחים ייחודיים ונפרדים. לכן, אם מסנן הכוונות שלכם מפרט כמה מארחים עם תתי-דומיינים שונים, אתם צריכים לפרסם רשומת 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). לדוגמה, אפליקציה עם מסנן הכוונות הבא תעבור אימות לכל שם משנה של 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. המשתמש יכול לבחור את האפליקציה הרצויה מתוך רשימת האפליקציות התואמות שמופיעה בתיבת הדו-שיח.