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

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

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

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

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

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

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

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

build.gradle

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

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

res/strings.xml

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

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

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

כך נראה הקטע share_target ב-https://scrapbook-pwa.web.app/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 Manifest. קודם כול, צריך לוודא שהמאפיין 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.

סיכום

השילוב של יעד שיתוף באינטרנט מאפשר לשלב בצורה עמוקה יותר אפליקציות אחרות שמותקנות במכשיר Android עם אפליקציות PWA בתוך פעילות אינטרנט מהימנה.

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

במאמר טירגוט של Web Share מוסבר איך משתמשים ב-API ב-PWA, ובמאמר Web Share API מוסבר איך משתפים תוכן מהאפליקציה ל-PWA.

פתרון בעיות

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

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

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

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

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