Android Concepts (למפתחי אתרים)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

אם אתם מפתחי אתרים חדשים ב-Android וב-Google Play, יש כמה פרטים שכדאי לשים לב אליהם. כבר קיימים משאבים ומסמכים רבים לכך (תודה לצוות Android), אבל כאן נדגיש כמה מושגים חשובים ואת הקשר שלהם ל'אריזה של בועות'.

העלאה לעומת מפתח חתימה

אם אתם מתכוונים להשתמש בחבילה בועות כדי ליצור קובץ Android App Bundle (AAB) (הערה: החל מאוגוסט 2021, ב-Google Play תידרשו להשתמש בפורמט קובץ Android App Bundle) או ב-APK כדי להעלות ולפרסם אותו ב-Google Play, תצטרכו לחתום על האפליקציה באמצעות מפתח חתימה. ב-Google Play יש שתי אפשרויות לטיפול בנושא:

  • חתימת אפליקציה ב-Play (מומלץ מאוד): Google תנהל עבורכם את חתימת האפליקציה ותגן עליה. הוא משתמש בו כדי לחתום על חבילות ה-APK שלך להפצה. התכונה 'חתימת אפליקציה ב-Play' משתמשת בשני מפתחות. 'מפתח חתימת האפליקציה' ש-Google תנהל בשבילכם ו'מפתח ההעלאה' שאתם שומרים וצריך להישאר פרטי לכם. עליך להשתמש במפתח ההעלאה כדי לחתום על האפליקציה לצורך העלאה ל-Play Console. המערכת הזו מאפשרת לאפס את מפתח ההעלאה אם הוא יאבד או ייפרץ, על ידי יצירת קשר עם צוות התמיכה של Play. בשלב זה, Google Play מאפשר לכם להעלות את האפליקציה כקובץ AAB או APK:
    • קובץ Android App Bundle (AAB): כשמעלים קובץ AAB ל-Play Console, אתם דוחים את היצירה והיצירה של חבילות APK לחנות Google Play. כשמשתמש מוריד את האפליקציה ומתקין אותה, Google Play תפיץ אותה אליו כ-APK חתום. לכן, החתימה על חבילות ה-APK תצטרך להתבצע גם על ידי Google Play. לכן, כברירת מחדל, אם תעלו את האפליקציה בתור AAB ל-Play Console, תצטרכו להשתמש בחתימת אפליקציה ב-Play.
    • APK: ב-APK, יש לך אפשרות להצטרף לחתימת אפליקציה ב-Play. מומלץ מאוד להצטרף לחתימת אפליקציה ב-Play, כי היא מגבירה את האבטחה של מפתח החתימה. כפי שצוין קודם לכן, בקרוב יהיה צורך להעלות את כל האפליקציות החדשות ל-Google Play בפורמט AAB, לכן אנחנו ממליצים לעשות זאת במקום להעלות חבילות APK.
  • ניהול מפתח חתימה משלכם: אם תבחרו לנהל את המפתח בעצמכם ולא הבעתם הסכמה לחתימת אפליקציה ב-Play, תקבלו אחריות מלאה על מפתח החתימה של האפליקציה. בניגוד לחתימת אפליקציה ב-Play, אי אפשר לאפס אותה במקרה שמאבדים את המפתח. לכן, אם תאבד את חתימת האפליקציה, לא תהיה לך יותר אפשרות לעדכן את האפליקציה.

במהלך ההגדרה של bubblewrap init, כשמגיעים לחלק "Signing key information (5/5)" (פרטי מפתח חתימה (5/5)), צריך להזין את הערכים "Key store location" ו-"Key name", או להשתמש בברירות המחדל. מיקום ברירת המחדל של מאגר המפתחות הוא הקובץ android.keystore בספריית הפרויקט, ושם ברירת המחדל של המפתח הוא android. אם חבילת בועות לא תמצא מאגר מפתחות קיים בשם הזה במיקום, תיצור בשבילכם מאגר ותתבקשו להזין סיסמאות. רשמו לכם את הסיסמאות שהזנתם, כי תצטרכו אותן בתהליך ה-build (bubblewrap build), שבו ייעשה שימוש במפתח כדי לחתום על האפליקציה. אם הבעתם הסכמה ל-Play App Signing, אז מפתח החתימה שנוצר על ידי בועות הבועה ששימש לחתימה על האפליקציה יהפוך ל"מפתח ההעלאה". גם אם תבחרו להשתמש במפתח שנוצר על ידי בועת הבועה כמפתח חתימה או העלאה, עליכם להגן עליו ולשמור על פרטיותו. לא מומלץ להחיל אותו על ניהול גרסאות. במקום, כדאי להגביל את מספר האנשים שיש להם גישה אליו.

יש צורך ב-Digital Asset Links כדי להצהיר על הקשר בין האתר לבין האפליקציה ל-Android. כדי לוודא שהאפליקציה ל-Android שנוצרה על ידי wrapper תאומת כראוי ותופעל כפעילות מהימנה באינטרנט (במקום כרטיסייה מותאמת ב-Chrome), יהיה עליך להוסיף את המפתח המתאים לקובץ assetlinks.json. לאחר מכן צריך להעלות אותו לאתר בכתובת .well-known/assetlinks.json (ביחס לשורש). קובץ assetlinks.json צריך להיות בפורמט הזה:

[{
 "relation": ["delegate_permission/common.handle_all_urls"],
 "target": {
   "namespace": "android_app",
   "package_name": "com.your.package_name",
   "sha256_cert_fingerprints": [
     "XX:XX:XX:..."
   ]
 }
}]

קבלת טביעת האצבע לאישור SHA256

כדי ליצור את הקובץ assetlinks.json, אתם צריכים את טביעת האצבע לאישור SHA 256 שמשויכת למפתח החתימה של האפליקציה שלכם. חשוב לציין שטביעות האצבע שמשויכות למפתחות החתימה וההעלאה יהיו שונות. חשוב לזכור את ההבחנה הזו, במיוחד אם רואים שהאפליקציה מופעלת ככרטיסייה מותאמת אישית ב-Chrome (כשסרגל הדפדפן גלוי). לאחר מכן, סביר להניח שבקובץ assetlinks.json אין את טביעת האצבע שתואמת למפתח המתאים.

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

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

דרך Play Console

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

  1. עוברים אל Play Console.
  2. בחירת האפליקציה שמעניינת אותך
  3. בתפריט הניווט שמימין, בקטע גרסה, עוברים אל הגדרה -> תקינות האפליקציה.
  4. מעתיקים את SHA256 של המפתח המתאים:

מאחזרים את טביעת האצבע המתאימה לאישור SHA256 עבור מפתח החתימה או ההעלאה

  • מפתח חתימה: מעתיקים את טביעת האצבע מסוג SHA256 עבור "אישור חתימת האפליקציה". טביעת האצבע הזו תתאים לאפליקציה אם מורידים אותה מחנות Google Play, כי האפליקציה חתומה באמצעות מפתח החתימה ב-Google Play.

  • Upload key: מעתיקים את טביעת האצבע מסוג SHA256 עבור 'האישור של מפתח ההעלאה'. טביעת האצבע הזו תתאים לאפליקציה אם התקנתם אותה באופן מקומי (לדוגמה, באמצעות ADB ב-USB). חבילת ה-APK (במכונה המקומית שלכם) נבנתה על ידי wrapper, ולכן, נחתם על ידי המפתח שהוא יצר גם עבורכם (במהלך ההגדרה של init). חשוב לזכור שזהו מפתח החתימה של האפליקציה שהותקנה באופן מקומי, אבל בפועל הוא הופך ל'מפתח ההעלאה' כשמפרסמים את האפליקציה דרך Play.

דרך keytool

keytool הוא כלי לניהול מפתחות ואישורים. ניתן להשתמש ב-keytool כדי לחלץ את טביעת האצבע מסוג SHA 256 המשויכת ל-APK או ל-AAB בועה שנוצרה. שימו לב שטביעת האצבע הזו מיועדת למפתח החתימה המקומי. אם מעלים את האפליקציה ל-Play ומביעים הסכמה לחתימת אפליקציה ב-Play, המפתח הזה הופך ל "מפתח ההעלאה".

keytool -printcert -jarfile [path to APK or AAB] | grep SHA256

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

  1. מתקינים את הכלי לקישור נכסים מחנות Play.
  2. באותו המכשיר, אפשר להוריד את האפליקציה מחנות Google Play או להתקין אותה באופן מקומי.
  3. פותחים את האפליקציה Asset Link Tool. תוצג לכם רשימה של כל האפליקציות שמותקנות במכשיר לפי שם החבילה. אפשר לסנן את הרשימה לפי מזהה האפליקציה שבחרתם מוקדם יותר בשדה bubblewrap init, ואז ללחוץ על הרשומה הזו.
  4. יוצג לכם דף שבו מפורטת החתימה של האפליקציה וקישור לנכס דיגיטלי שנוצר. לחצו על הלחצנים 'העתקה' או 'שיתוף' שבתחתית הדף כדי לייצא אותו בכל דרך שתרצו (למשל, שמרו ב-Google Keep, שלחו לעצמכם את הקובץ באימייל).

אותו רעיון חל על מפתחות חתימה או העלאה. אם התקנתם את האפליקציה מחנות Google Play, הכלי Asset Link יקבל את טביעת האצבע לחתימת האפליקציה. אם התקנתם את האפליקציה ישירות מהמכשיר המקומי, טביעת האצבע מיועדת למפתח הבועה שנוצרת.

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

אתרים המבוססים על Jekyll

אם האתר שלכם נוצר על ידי Jekyll (כמו דפי GitHub), תצטרכו להוסיף שורת הגדרה כדי שהספרייה .well-known תיכלל בפלט. במרכז העזרה של GitHub יש מידע נוסף בנושא זה. יוצרים קובץ בשם _config.yml ברמה הבסיסית (root) של האתר (או מוסיפים אליו אם הוא כבר קיים) ומזינים:

# Folders with dotfiles are ignored by default.
include: [.well-known]

הוספת מפתחות

קובץ Digital Asset Link יכול להכיל יותר מאפליקציה אחת, וכל אפליקציה יכולה להכיל יותר ממפתח אחד. לדוגמה, כדי להוסיף מפתח שני, משתמשים ב-Asset Link Tool כדי לזהות את המפתח ולהוסיף אותו כרשומה שנייה. הקוד ב-Chrome שמנתח את ה-JSON הזה הוא קפדני למדי, לכן חשוב לוודא שאתם לא מוסיפים בטעות פסיק נוסף בסוף הרשימה.

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
},{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
}]

פתרון בעיות

Chrome מתעד את הסיבה שבגללה האימות של Digital Asset Links נכשל, וניתן לצפות ביומנים במכשיר Android עם adb logcat. אם אתם מפתחים ב-Linux/Mac, אתם יכולים לראות את היומנים הרלוונטיים ממכשיר מחובר עם:

> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links

לדוגמה, אם ההודעה Statement failure matching fingerprint. מופיעה, עליכם להשתמש בכלי לקישור נכסים כדי לראות את החתימה של האפליקציה ולוודא שהיא תואמת לה בקובץ assetlinks.json.