קישור לאפליקציה ל-Android הוא סוג מיוחד של קישור עומק שמאפשר להשתמש בכתובות האתר כדי לפתוח מיד את התוכן המתאים באפליקציה ל-Android, שהמשתמש יצטרך לבחור את האפליקציה. הקישורים לאפליקציות ל-Android משתמשים בנכסים דיגיטליים Links API כדי לבסס אמון שהאפליקציה אושרה על ידי האתר כך שיוכלו לפתוח קישורים באופן אוטומטי לדומיין הזה. אם המערכת תאמת שכתובות ה-URL בבעלותכם, המערכת מנתבת באופן אוטומטי את הכוונות האלה של כתובת URL אל האפליקציה שלכם.
כדי לאמת שאתם הבעלים של האפליקציה ושל כתובות ה-URL, צריך למלא את את השלבים הבאים:
מוסיפים מסנני Intent שמכילים את
autoVerify
. המאפיין הזה מאותת למערכת שצריך לבדוק אם האפליקציה שלך שייכת לדומיינים של כתובות ה-URL שמשמשים במסנני Intent.מגדירים את השיוך בין האתר שלכם למסנני הכוונה על ידי אירוח קובץ JSON של Digital Asset Links במיקום הבא:
https://domain.name/.well-known/assetlinks.json
אפשר למצוא מידע רלוונטי במקורות המידע הבאים:
הוספת מסנני Intent לאימות קישורים לאפליקציות
כדי להפעיל אימות של טיפול בקישורים לאפליקציה, צריך להוסיף מסנני Intent שתואמים. בפורמט הבא:
<!-- 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 shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
למרות שאפשר לכלול autoVerify
רק ב<intent-filter>
אחד
הצהרה לכל מארח, גם אם המארח הזה משמש בשירותים אחרים שאינם מסומנים
הצהרות זהות, מומלץ להוסיף autoVerify
לכל אחת מההצהרות
רכיב <intent-filter>
לשמירה על עקביות. כך אפשר גם לוודא שאחרי
מסירה או לארגן מחדש רכיבים בקובץ המניפסט, האפליקציה נשארת משויכת
עם כל הדומיינים שעדיין מוגדרים.
תהליך האימות של הדומיין מחייב חיבור לאינטרנט, והוא עשוי להימשך זמן מה. כדי לשפר את יעילות התהליך
אימות דומיין של אפליקציה שמטרגטת ל-Android 12 ואילך
רק אם הדומיין נמצא בתוך רכיב <intent-filter>
שמכיל את הפונקציה
הפורמט המדויק שצוין בקטע הקוד הקודם.
תמיכה בקישור אפליקציות למספר מארחים
המערכת חייבת להיות מסוגלת לאמת את המארח שצוין בנתוני מסנני Intent בכתובת ה-URL של האפליקציה. הרכיבים שכלולים בקבצים של ה-Digital Asset Links שמתארחים בדומיינים הרלוונטיים באינטרנט מסנן Intent. אם האימות נכשל, המערכת תעבור לברירת המחדל של ההתנהגות הרגילה שלה כדי לטפל בכוונה, כפי שמתואר במאמר יצירת קישורי עומק לתוכן של אפליקציות. עם זאת, עדיין אפשר לאמת את האפליקציה כמתן שירות כברירת מחדל לכל אחד מהדפוסים של כתובות ה-URL שהוגדרו במסנני הכוונה האחרים של האפליקציה.
הערה: ב-Android 11 (רמת API 30) ובגרסאות ישנות יותר, המערכת לא מאמתת את האפליקציה כ-handler שמוגדר כברירת מחדל, אלא אם היא מוצאת קובץ Digital Asset Links תואם לכל המארחים שהגדרתם במניפסט.
לדוגמה, אפליקציה עם הכוונה הבאה
מסננים יעברו את האימות רק עבור 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>
הערה: כל רכיבי <data>
באותו מסנן Intent
ממוזגים יחד כדי להביא בחשבון את כל הווריאציות של המאפיינים המשולבים. לדוגמה, מסנן הכוונה הראשון שלמעלה כולל רכיב <data>
שמצהיר רק על הסכימה HTTPS. אבל הוא משולב עם הרכיב השני של <data>
, כך שמסנן הכוונה תומך גם ב-http://www.example.com
וגם ב-https://www.example.com
.
לכן, צריך ליצור מסנני Intent נפרדים כשרוצים להגדיר שילובים ספציפיים.
של סכימות ודומיינים של URI.
תמיכה בקישור אפליקציות במספר תת-דומיינים
פרוטוקול Digital Asset Links מתייחס לתת-דומיינים במסנני הכוונה כמארחים נפרדים וייחודיים. אז אם המטרה שלכם
המסנן מפרט כמה מארחים עם תת-דומיינים שונים, צריך לפרסם
assetlinks.json
בכל דומיין. לדוגמה, מסנן ה-Intent הבא כולל את www.example.com
ואת mobile.example.com
כמארחים של כתובות URL של כוונות קבילות. לכן ערך חוקי של
חובה לפרסם את 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>
לחלופין, אם מוצהר על שם המארח באמצעות תו כללי לחיפוש (כמו *.example.com
),
עליך לפרסם את הקובץ assetlinks.json
בשם המארח ברמה הבסיסית (root)
(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>
כדאי לבדוק אם יש כמה אפליקציות שמשויכות לאותו דומיין
אם פרסמתם כמה אפליקציות שמשויכות כל אחת לאותו דומיין, הן ניתן לאמת כל אחת מהן בהצלחה. עם זאת, אם האפליקציות יכולות לפתור את הבעיה בדיוק אותו מארח דומיין ונתיב, כפי שקורה בגרסאות Lite או בגרסאות מלאות של אפליקציה, רק האפליקציה שהותקנה לאחרונה יכולה לפתור את הבעיה 'כוונות אינטרנט' לדומיין הזה.
במקרה כזה, כדאי לבדוק אם יש אפליקציות מתנגשות במכשיר של המשתמש,
בתנאי שיש לכם את החבילה הנדרשת
החשיפה. לאחר מכן, באפליקציה, מציגים תיבת דו-שיח מותאמת אישית לבחירה שמכילה את התוצאות מהקריאה ל-queryIntentActivities()
.
המשתמש יכול לבחור את האפליקציה המועדפת עליו מתוך רשימת האפליקציות התואמות שמופיעות בתיבת הדו-שיח.
הצהרה על שיוכים של אתרים
נכס דיגיטלי כדי לציין את האפליקציות ל-Android, צריך לפרסם באתר את קובץ ה-JSON עם הקישורים שמשויכים לאתר ומאמתים את כוונות ה-URL של האפליקציה. קובץ ה-JSON משתמש בשדות הבאים כדי לזהות אפליקציות משויכות:
package_name
: מזהה האפליקציה הוצהרה בקובץbuild.gradle
של האפליקציה.sha256_cert_fingerprints
: טביעות האצבע מסוג SHA256 של אישור החתימה של האפליקציה. אפשר להשתמש בפקודה הבאה כדי ליצור את טביעת האצבע באמצעות כלי המקשים Java: בשדה הזה יש תמיכה בכמה טביעות אצבע, שיכולות לשמש גרסאות שונות של האפליקציה, כמו ניפוי באגים וגרסאות build לסביבת הייצור.keytool -list -v -keystore my-release-key.keystore
אם האפליקציה שלך משתמשת בחתימת אפליקציה של Play, אז האישור טביעת אצבע שמופקת על ידי הרצה של
keytool
באופן מקומי בדרך כלל לא תואם לזה שמופיע מכשירים. תוכלו לוודא שאתם משתמשים האפשרות 'חתימת אפליקציה ב-Play' עבור האפליקציה בחשבון הפיתוח שלך ב-Play Console בקטעRelease > Setup > App signing
; אם תעשו את זה, למצוא את קטע ה-JSON הנכון של Digital Asset Links באפליקציה שלכם הדף הזה.
הקובץ assetlinks.json
לדוגמה הבא מעניק הרשאות לפתיחת קישור
אפליקציית com.example
ל-Android:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
שיוך אתר לכמה אפליקציות
אתר יכול להצהיר על שיוכים לכמה אפליקציות באותו assetlinks.json
חדש. בקובץ הבא מוצגת דוגמה לקובץ הצהרה על השיוך
עם שתי אפליקציות, בנפרד, ונמצאת בכתובת
https://www.example.com/.well-known/assetlinks.json
:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.puppies.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }, { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.monkeys.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
אפליקציות שונות עשויות לטפל בקישורים למשאבים שונים במסגרת אותו מארח אתרי אינטרנט. לדוגמה,
אפליקציה1 עשויה להצהיר על מסנן Intent עבור https://example.com/articles
, ו-app2 עשויה להצהיר על מסנן
מסנן Intent עבור https://example.com/videos
.
הערה: יכול להיות שמספר אפליקציות שמשויכות לדומיין ייחתמו על ידי אישורים שונים.
שיוך אתרים מרובים לאפליקציה אחת
כמה אתרים יכולים להצהיר על שיוכים לאותה אפליקציה
assetlinks.json
הקבצים המתאימים. רשימות הקבצים הבאות
דוגמה לאופן שבו אפשר להצהיר על השיוך של example.com
example.net עם app1. בדף האפליקציה הראשון מוצג השיוך של example.com
עם app1:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
בדף האפליקציה הבא מוצג השיוך של example.net לאפליקציה 1. רק
המיקום שבו הקבצים מתארחים לא שונה (.com
ו-.net
):
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
פרסום קובץ האימות של JSON
עליכם לפרסם את קובץ האימות מסוג JSON במיקום הבא:
https://domain.name/.well-known/assetlinks.json
חשוב להקפיד על הפרטים הבאים:
- הקובץ
assetlinks.json
מוצג עם סוג תוכןapplication/json
. - הקובץ
assetlinks.json
חייב להיות נגיש דרך חיבור HTTPS, גם אם מסנני Intent באפליקציה שלכם מצהירים שסכימת הנתונים היא HTTPS. - הקובץ
assetlinks.json
חייב להיות נגיש ללא הפניות לכתובת אחרת (לא כתובות אתר להפניה מחדש מסוג 301 או 302). - אם הקישורים באפליקציה תומכים במספר דומיינים מארחים, צריך לפרסם את הקובץ
assetlinks.json
בכל דומיין. צפייה תמיכה בקישור אפליקציות עבור כמה מארחים. - אין לפרסם את האפליקציה עם כתובות URL של פיתוח/בדיקה בקובץ המניפסט שייתכן שלא להיות נגישים לציבור (למשל, אפליקציות שניתן לגשת אליהן רק באמצעות VPN). א' לעקוף במקרים כאלה הוא להגדיר build וריאנטים כדי ליצור קובץ מניפסט שונה לגרסאות build של מפתחים.
אימות קישורים לאפליקציות ל-Android
אם android:autoVerify="true"
נכלל באובייקט Intent אחד לפחות של האפליקציה
מסננים, התקנת האפליקציה במכשיר שמותקנת בו גרסת Android 6.0 (רמת API 23) או
תגרום למערכת לאמת באופן אוטומטי את המארחים שמשויכים
כתובות URL במסנני Intent של האפליקציה. ב-Android מגרסה 12 ואילך,
יכול גם להפעיל את תהליך האימות באופן ידני כדי
לבדוק את לוגיקת האימות.
אימות אוטומטי
האימות האוטומטי של המערכת כולל את השלבים הבאים:
- המערכת בודקת את כל מסנני ה-Intent שכוללים אחד מהפרטים הבאים:
- פעולה:
android.intent.action.VIEW
- קטגוריות:
android.intent.category.BROWSABLE
ו-android.intent.category.DEFAULT
- סכמת נתונים:
http
אוhttps
- פעולה:
- לכל שם מארח ייחודי שנמצא במסנני הכוונה שלמעלה, Android שולחת שאילתות לאתרים המתאימים לגבי קובץ Digital Asset Links בכתובת
https://hostname/.well-known/assetlinks.json
.
אחרי שתאשרו את רשימת האתרים לשיוך לאפליקציה שלכם, וגם וידאת שקובץ JSON המתארח חוקי, יש להתקין את האפליקציה במכשיר. יש להמתין 20 שניות לפחות עד שתהליך האימות האסינכרוני יסתיים הושלם. השתמש בפקודה הבאה כדי לבדוק אם המערכת אימתה את באפליקציה ולהגדיר את המדיניות הנכונה לטיפול בקישורים:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
אימות ידני
החל מ-Android 12, ניתן להפעיל דומיין באופן ידני לאימות של אפליקציה שמותקנת במכשיר. אפשר לבצע תהליך ההגדרה, גם אם האפליקציה מטרגטת את Android 12.
חיבור לאינטרנט
כדי לבצע אימות דומיין, מכשיר הבדיקה צריך להיות מחובר אל באינטרנט.
תמיכה בתהליך המעודכן של אימות הדומיין
אם האפליקציה מטרגטת את Android 12 ואילך, המערכת תשתמש ב- את התהליך המעודכן של אימות הדומיין באופן אוטומטי.
אם לא, תוכלו להפעיל את תהליך האימות המעודכן באופן ידני. כדי לעשות את זה, מריצים את הפקודה הבאה בחלון הטרמינל:
adb shell am compat enable 175408749 PACKAGE_NAME
איך מאפסים את מצב הקישורים לאפליקציות ל-Android במכשיר
לפני שמפעילים באופן ידני את אימות הדומיין במכשיר, צריך לאפס את המצב של Android App Links במכשיר הבדיקה. כדי לעשות את זה, מריצים את הפקודה הבאה: הפקודה בחלון הטרמינל:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
הפקודה הזו מעבירה את המכשיר לאותו המצב שבו היה לפני המשתמש בוחר את אפליקציות ברירת המחדל לכל הדומיינים.
הפעלה של תהליך אימות הדומיין
אחרי שמאפסים את מצב הקישורים לאפליקציות ל-Android במכשיר, אפשר לבצע את הפעולות הבאות: לבצע אימות. כדי לעשות זאת, מריצים את הפקודה הבאה בחלון טרמינל:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
בודקים את תוצאות האימות
אחרי שנתתם לסוכן האימות זמן מה כדי לסיים את הבקשות, בודקים את תוצאות האימות. כדי לעשות זאת, מריצים את הפקודה הבאה:
adb shell pm get-app-links PACKAGE_NAME
הפלט של הפקודה הזו אמור להיראות כך:
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
לדומיינים שעברו את האימות בהצלחה יש מצב של אימות דומיין
מתוך verified
. כל מצב אחר מציין שאימות הדומיין לא הצליח
לבצע. באופן ספציפי, מצב של none
מצביע על כך שהאימות
יכול להיות שהנציג עדיין לא השלים את תהליך האימות.
ברשימה הבאה מפורטים הערכים האפשריים להחזרה שאימות הדומיין יכול החזרה עבור דומיין נתון:
none
- לא נרשם דבר לגבי הדומיין הזה. מחכים עוד כמה דקות עד של סוכן האימות כדי לסיים את הבקשות הקשורות לאימות דומיין, ולאחר מכן להפעיל מחדש את תהליך אימות הדומיין.
verified
- הדומיין אומת בהצלחה לאפליקציה המוצהרת.
approved
- הדומיין אושר לפי הגדרת האדמין, בדרך כלל על ידי הרצה של פקודת מעטפת.
denied
- הדומיין נדחה בכוח, בדרך כלל על ידי הפעלת פקודת מעטפת.
migrated
- המערכת שמרה את התוצאה של תהליך קודם שבו נעשה שימוש בדומיין מדור קודם אימות.
restored
- הדומיין אושר אחרי שהמשתמש ביצע שחזור נתונים. ההנחה היא שהדומיין אומת בעבר.
legacy_failure
- הדומיין נדחה על ידי מאמת מדור קודם. הסיבה הספציפית לכשל היא לא ידועה.
system_configured
- הדומיין אושר באופן אוטומטי על ידי הגדרת המכשיר.
- קוד שגיאה
1024
ומעלה קוד שגיאה בהתאמה אישית שהוא ספציפי למאמת של המכשיר.
מוודאים שיצרתם חיבור לרשת ומפעילים שוב את תהליך האימות של הדומיין.
לבקש מהמשתמש לשייך את האפליקציה שלך לדומיין
דרך נוספת לאשר את האפליקציה לדומיין היא לבקש מהמשתמש לשייך את האפליקציה לדומיין הזה.
בדיקה אם האפליקציה שלכם כבר אושרה לדומיין
לפני שמבקשים מהמשתמשים, צריך לבדוק אם האפליקציה היא ה-handler שמוגדר כברירת מחדל
הדומיינים שהגדרת ברכיבי <intent-filter>
. אפשר לשלוח שאילתה לגבי מצב האישור באמצעות אחת מהשיטות הבאות:
- ה-API של
DomainVerificationManager
(בזמן הריצה). - תוכנת שורת פקודה (במהלך הבדיקה).
DomainVerifyManager (מנהל אימות)
קטע הקוד הבא מדגים איך להשתמש
DomainVerificationManager
API:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
Java
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
תוכנת שורת הפקודה
כשבודקים את האפליקציה במהלך הפיתוח, אפשר להריץ את הפקודה הבאה כדי: שולחים שאילתה על מצב האימות של הדומיינים שבבעלות הארגון שלכם:
adb shell pm get-app-links --user cur PACKAGE_NAME
בפלט של הדוגמה הבאה, למרות שהאימות של האפליקציה נכשל example.org דומיין, משתמש 0 אישר את האפליקציה באופן ידני בהגדרות המערכת, ואף חבילה אחרת לא מאומתת עבור הדומיין הזה.
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
אפשר גם להשתמש בפקודות מעטפת כדי לדמות את התהליך שבו המשתמש בוחר
האפליקציה שמשויכת לדומיין מסוים. הסבר מלא על הסיבות האלה
יהיו זמינים מהפלט של adb shell pm
.
מתן הקשר לבקשה
לפני שמגישים את הבקשה לאישור הדומיין, צריך לספק הקשר לגבי משתמש. לדוגמה, אפשר להציג להם מסך פתיחה, תיבת דו-שיח או רכיב דומה בממשק המשתמש, שבו מוסבר למשתמש למה האפליקציה שלכם צריכה להיות בורר ברירת המחדל לדומיין מסוים.
שליחת הבקשה
אחרי שהמשתמשים יבינו מה האפליקציה מבקשת מהם לעשות, שלחו את הבקשה.
כדי לעשות את זה, מפעילים כוונה שכוללת את
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
Intent ומחרוזת נתונים,
package:com.example.pkg
לאפליקציית היעד, כפי שמוצג ב:
את קטע הקוד הבא:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
Java
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
כשהכוונה מופעלת, המשתמשים רואים מסך הגדרות שנקרא פתיחה כברירת מחדל. המסך הזה מכיל לחצן בחירת תדר שנקרא פתיחת קישורים נתמכים, כפי שמוצג באיור 1.
כשהמשתמש מפעיל את האפשרות פתיחת קישורים נתמכים, מופיעה קבוצה של תיבות סימון בקטע שנקרא קישורים לפתוח באפליקציה הזו. מכאן, המשתמשים יכולים לבחור את הדומיינים שהם רוצים לשייך לאפליקציה. הם יכולים גם לבחור באפשרות הוספת קישור כדי להוסיף דומיינים, כפי שמוצג באיור 2. כשהמשתמשים יבחרו קישור כלשהו מהדומיינים שהם הוסיפו, הקישור ייפתח באפליקציה באופן אוטומטי.
פתיחת דומיינים באפליקציה שלא ניתן לאמת
יכול להיות שהפונקציה העיקרית של האפליקציה היא לפתוח קישורים כצד שלישי, בלי היכולת לאמת את הדומיינים שבטיפולה. במקרה כזה, צריך להסביר למשתמשים שבאותו רגע, כשהם בוחרים קישור לאינטרנט, הם לא יכולים לבחור בין אפליקציה של צד ראשון לאפליקציה שלכם (צד שלישי). המשתמשים צריכים לשייך את הדומיינים לאפליקציה שלכם באופן ידני.
בנוסף, כדאי לשקול להציג דו-שיח או פעילות טרמפולינה שמאפשרת אם הם מעדיפים לפתוח את הקישור באפליקציה של צד ראשון, לשמש כשרת proxy. לפני הגדרה של פעילות דו-שיח או טרמפולינה כזו, את האפליקציה שלך כך שתהיה לה הרשאות גישה לחבילה לאפליקציות צד ראשון שתואמות למסנן Intent באינטרנט של האפליקציה.
בדיקת קישורים לאפליקציות
כשמטמיעים את תכונת קישור האפליקציות, כדאי לבדוק את פונקציונליות הקישור כדי עליך לוודא שהמערכת יכולה לשייך את האפליקציה לאתרים שלך ולטפל בבקשות לכתובות URL, כמצופה.
כדי לבדוק קובץ דף חשבון קיים אפשר להשתמש הכלי 'יצירת רשימות סיכום' ו'בודק'.
אישור רשימת המארחים לאימות
במהלך הבדיקה, צריך לאשר את רשימת המארחים המשויכים שהמערכת צריכה לאמת עבור האפליקציה. צריך ליצור רשימה של כל כתובות ה-URL שמסנני הכוונה התואמים שלהן כוללים את המאפיינים והרכיבים הבאים:
- מאפיין
android:scheme
עם הערךhttp
אוhttps
- מאפיין
android:host
עם דפוס כתובת URL של דומיין - רכיב פעולה אחד (
android.intent.action.VIEW
) - רכיב קטגוריה אחד (
android.intent.category.BROWSABLE
)
הרשימה הזו מאפשרת לבדוק שכל מארח בעל שם מספק קובץ JSON עם Digital Asset Links ותת-דומיין.
מאשרים את קובצי ה-Digital Asset Links
בכל אתר, משתמשים ב-Digital Asset Links API כדי לוודא שקובץ ה-JSON של Digital Asset Links מתארח ומוגדר בצורה תקינה:
https://digitalassetlinks.googleapis.com/v1/statements:list? source.web.site=https://domain.name:optional_port& relation=delegate_permission/common.handle_all_urls
בדיקת מדיניות הקישורים
כחלק מתהליך הבדיקה, אפשר לבדוק את הגדרות המערכת הנוכחיות לטיפול בקישורים. השתמשו בפקודה הבאה כדי לקבל רשימה של כללי מדיניות הטיפול בקישורים שקיימים עבור כל אפליקציות במכשיר המחובר:
adb shell dumpsys package domain-preferred-apps
אפשרות אחרת היא הפעולה הבאה:
adb shell dumpsys package d
הערה: אחרי התקנת האפליקציה, חשוב להמתין לפחות 20 שניות כדי לאפשר למערכת להשלים את תהליך האימות.
הפקודה מחזירה רשימה של כל משתמש או פרופיל שמוגדרים במכשיר, לפניה כותרת בפורמט הבא:
App linkages for user 0:
לאחר הכותרת הזו, הפלט משתמש בפורמט הבא כדי להציג את רשימת ההגדרות של טיפול בקישורים למשתמש הזה:
Package: com.android.vending Domains: play.google.com market.android.com Status: always : 200000002
דף האפליקציה הזה מציין אילו אפליקציות משויכות לאילו דומיינים של המשתמש:
Package
– מזהה אפליקציה לפי שם החבילה שלה, כפי שהוצהר במניפסט.Domains
– מציג את הרשימה המלאה של המארחים שהאפליקציה הזו מטפלת בהם באמצעות קישורי האינטרנט, באמצעות רווחים ריקים כמפרידים.Status
- מציג את ההגדרה הנוכחית של טיפול בקישורים עבור האפליקציה הזו. אפליקציה שכוללת עבר אימות, והמניפסט שלו מכילandroid:autoVerify="true"
, מוצג סטטוס מתוךalways
. המספר ההקסאדצימלי שמופיע אחרי הסטטוס הזה קשור לרשומות של מערכת Android לגבי העדפות הקישור של המשתמש לאפליקציות. הערך הזה לא מציין אם אימות הצליחה.
הערה: אם המשתמש משנה את הגדרות הקישור לאפליקציה לפני ביצוע האימות הושלם, ייתכן שתופיע תוצאה חיובית שקרית לגבי אימות מוצלח, האימות נכשל. עם זאת, הכישלון באימות לא רלוונטי אם המשתמש הפעיל במפורש את האפשרות לפתוח קישורים נתמכים באפליקציה בלי לבקש ממנו אישור. הסיבה לכך היא העדפות המשתמש מקבלות קדימות על פני אימות פרוגרמטי (או חוסר אימות כזה). כתוצאה מכך, הקישור מועבר ישירות לאפליקציה בלי להציג תיבת דו-שיח, כאילו שהאימות בוצע, הצליחה.
דוגמה לבדיקה
כדי שהאימות של הקישורים לאפליקציה יצליח, המערכת צריכה להיות מסוגלת לאמת את האפליקציה עם כל אחד מהאתרים שציינתם במסנן כוונה נתון שעונה על הקריטריונים לקישורים לאפליקציות. בדוגמה הבאה מוצגת הגדרת מניפסט עם מספר קישורים לאפליקציות שהוגדרו:
<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> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="www.example2.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="account.example.com" /> </intent-filter> </activity> <activity android:name=”ThirdActivity”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" /> <data android:host="map.example.com" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="market" /> <data android:host="example.com" /> </intent-filter> </activity> </application>
רשימת המארחים שהפלטפורמה תנסה לאמת מהמניפסט שלמעלה:
www.example.com mobile.example.com www.example2.com account.example.com
רשימת המארחים שהפלטפורמה לא תנסה לאמת מהמניפסט שלמעלה:
map.example.com (it does not have android.intent.category.BROWSABLE) market://example.com (it does not have either an "http" or "https" scheme)
מידע נוסף על רשימות של דוחות זמין בכתובת יצירת רשימה של דפי חשבון.
תיקון של שגיאות נפוצות בהטמעה
אם לא מצליחים לאמת את הקישורים לאפליקציות ל-Android, כדאי לבדוק את הדברים הבאים
שגיאות. הקטע הזה משתמש ב-example.com
כשם דומיין כ-placeholder. מתי
כשמבצעים את הבדיקות האלה, מחליפים את example.com
בקובץ
שם דומיין.
- הגדרה שגויה של מסנן Intent
- בודקים אם כלולה רכיב
<intent-filter>
שכתובת ה-URL שלו לא בבעלות האפליקציה. - הגדרת שרת שגויה
צריך לבדוק את הגדרות ה-JSON של השרת ולוודא שערך ה-SHA נכון.
בנוסף, צריך לוודא שההגשה של
example.com.
(עם הנקודה האחרונה) זהה תוכן בתורexample.com
.- הפניות אוטומטיות בצד השרת
אם הגדרת את האפליקציה, המערכת לא מאמתת אף קישור לאפליקציות ל-Android הפניה לכתובת אחרת, כמו:
-
http://example.com
עדhttps://example.com
-
example.com
עדwww.example.com
ההתנהגות הזו מגנה על אבטחת האפליקציה.
-
- חוסן שרת
בודקים אם השרת יכול להתחבר לאפליקציות הלקוח.
- קישורים שלא ניתן לאמת
למטרות בדיקה, יכול להיות שתוסיפו בכוונה קישורים שלא ניתן לאמת. שמירה חשוב לזכור שב-Android 11 ומטה, הקישורים האלה גורמים לא לאמת את כל הקישורים לאפליקציות ל-Android לאפליקציה שלך.
- חתימה שגויה ב-Assetlinks.json
יש לוודא שהחתימה שלך נכונה ותואמת לחתימה שמשמשת לחתימה באפליקציה שלך. דוגמאות לשגיאות נפוצות:
- חתימה על האפליקציה באמצעות אישור לניפוי באגים, ורק חתימה על הגרסה המשוחררת ב-
assetlinks.json
. - חתימה באותיות קטנות ב-
assetlinks.json
. החתימה צריכה יהיו באותיות רישיות. - אם משתמשים בחתימת אפליקציה ב-Play, חשוב לוודא שמשתמשים בחתימה שבהן Google משתמשת כדי לחתום על כל אחד מפריטי התוכן שלך. אפשר לאמת את הפרטים האלה, כולל קטע קוד מלא של JSON, צריך לפעול לפי ההוראות הבאות הצהרה על שיוכים של אתרים
- חתימה על האפליקציה באמצעות אישור לניפוי באגים, ורק חתימה על הגרסה המשוחררת ב-