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

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

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

כך נראה הקטע 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>

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

סיכום

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

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

לקבלת מידע נוסף על שימוש ב-API ב-PWA, כדאי לעיין במאמר בנושא יעד שיתוף באינטרנט. Web Share API – כדי ללמוד איך לשתף תוכן מ-Progressive Web App.

פתרון בעיות

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

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

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

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

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