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

אנדרה צ'יפריאני בנדרה
אנדרה צ'יפריאני בנדרה

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

החל מגרסה Chrome 86, האפשרות Web Share Target זמינה גם לאפליקציות שמשתמשות ב-Trusted Web Activity. אפליקציית ה-PWA אמורה לפעול כמו שצריך, אבל נדרשים כמה שינויים באפליקציית Android.

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

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

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

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

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

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

סיכום

השילוב של 'יעד שיתוף באינטרנט' מאפשר שילוב עמוק יותר של אפליקציות PWA בפעילות באינטרנט מהימנה עם אפליקציות אחרות שמותקנות במכשיר 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 שבתוך string.xml.