הפעלת יעד שיתוף באינטרנט בפעילות מהימנה באינטרנט

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

החל מגרסה 86 של Chrome, התכונה 'יעד שיתוף באינטרנט' זמינה גם לאפליקציות שמשתמשות בפעילות אינטרנט מהימנה. אפליקציית ה-PWA אמורה לפעול מיד, אבל צריך לבצע כמה שינויים באפליקציית Android.

המאמר הזה מיועד למפתחים שמכירים את התכונה 'פעילות מהימנה באינטרנט'. קוראים שחדשים בטכנולוגיה יכולים להתחיל עם מדריך השילוב.

באופן דומה, הסבר מלא על הטמעת Web Share Target באפליקציית PWA הוא מחוץ לתחום המאמר הזה, ומפתחים יכולים למצוא מידע נוסף במאמר הזה.

אפליקציית ההדגמה בכתובת https://scrapbook-pwa.web.app/ תשמש כ-PWA במאמר הזה, וקוד המקור שלה זמין ב-GitHub. אפליקציית Android מבוססת על הדגמה בסיסית של פעילות אינטרנט מהימנה.

הוספה של יעד שיתוף באינטרנט לאפליקציית Android

כדי לשנות אפליקציה קיימת שמבוססת על פעילות Trusted Web כדי להטמיע Web Share Target, צריך לבצע שינויים בשלושה קבצים שונים:

build.gradle

הספרייה android-browser-helper עודכנה עם תמיכה ב-Web Share Target. השלב הראשון הוא לעדכן את האפליקציה לגרסה 2.0.1 או לגרסה חדשה יותר.

dependencies {
    ...
    implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}

res/strings.xml

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

הפעולה הזו מתבצעת באמצעות קובץ JSON, שזמין לפעילות Trusted Web עם משאב מחרוזת. השדות זהים לשדה share_target שזמין במניפסט האינטרנט, ואפשר להוסיף אותם למחרוזת בתוך strings.xml, כמעט כמו שהם, עם שתי הערות חשובות:

  1. הערך של מאפיין הפעולה צריך להיות כתובת ה-URL המלאה, כולל המקור.
  2. צריך להוסיף escape למירכאות כפולות, כך שכל " הופך ל-\".

כך נראה הקטע share_target של https://googlechrome.github.io/samples/scrapbook-pwa/manifest.json:

{
  ...
  "share_target": {
    "action": "/_share-target",
    "enctype": "multipart/form-data",
    "method": "POST",
    "params": {
      "files": [{
        "name": "media",
        "accept": [
          "audio/*",
          "image/*",
          "video/*"
        ]
      }]
    }
  },
  ...
}

האלמנט החדש של המחרוזת ייראה כך:

<string name="share_target">
{
    \"action\": \"https://twa-web-scrapbook.web.app/_share-target\",
    \"method\": \"POST\",
    \"enctype\": \"multipart/form-data\",
    \"params\": {
      \"files\": [{
          \"name\": \"media\",
          \"accept\": [\"image/*\", \"audio/*\", \"video/*\"]
      }]
    }
}
</string>

AndroidManifest.xml

צריך לבצע כמה שינויים במניפסט של Android. קודם צריך לוודא שהרכיב DelegationService מוצהר, מיוצא ומופעל.

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

<service
    android:name="com.google.androidbrowserhelper.trusted.DelegationService"
    android:enabled="true"
    android:exported="true">

    <intent-filter>
        <action android:name="android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</service>

לבסוף, צריך להוסיף שני פריטים חדשים לתג הפעילות LauncherActivity: – תג meta-data שמפנה אל ה-JSON שמוגדר ב-strings.xml. ‫- intent-filter שמצהיר על סוגי ה-MIME שהאפליקציה יכולה לטפל בהם באפליקציות אחרות במכשיר.

<meta-data
    android:name="android.support.customtabs.trusted.METADATA_SHARE_TARGET"
    android:resource="@string/share_target"/>

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.SEND_MULTIPLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="video/*" />
</intent-filter>

כפי שאפשר לראות בתגי העיצוב שלמעלה, צריך להוסיף רכיב data לכל mime-type שהוגדר ב-JSON של share_target.

סיכום

השילוב של Web Share Target מאפשר לשלב PWA בתוך Trusted Web Activity בצורה עמוקה יותר עם אפליקציות אחרות שמותקנות במכשיר Android.

כמו שמתואר בשלבים שלמעלה, כדי להוסיף תמיכה ב-API באפליקציית Android קיימת שמשתמשת בפעילות אינטרנט מהימנה, אפשר להשתמש ב-android-browser-helper כדי לפשט את התהליך.

במאמר Web Share Target מוסבר איך משתמשים ב-API ב-PWA, ובמאמר Web Share API מוסבר איך משתפים תוכן מ-Progressive Web App.

פתרון בעיות

האפליקציה שלי לא מופיעה כאפשרות כשאני מנסה לשתף קובץ מאפליקציה אחרת.

אם האפליקציה לא מופיעה כאפשרות, סימן שהערך של intent-filter שגוי. חשוב לבדוק היטב את תגי intent-filter, לוודא שהם מכילים את הפעולות הנכונות, את הקטגוריה ושהם mime-types מטופלים על ידי האפליקציה.

האפליקציה שלי מוצגת כאפשרות, אפליקציית ה-PWA מופעלת, אבל הנתונים לא משותפים.

יש כמה סיבות אפשריות לכך. זו רשימת דברים שכדאי לבדוק:

  • מוודאים שהאימות של Digital Asset Links הצליח.
  • בודקים את קובץ ה-JSON בתוך strings.xml כדי לוודא שהוא תקין.