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

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

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

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

הדבר נעשה באמצעות קובץ JSON שזמין לפעילות Trusted Web באמצעות משאב מחרוזת. השדות זהים לשדה 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>

לבסוף, צריך להוסיף שני פריטים חדשים לתג הפעילות 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.

סיכום

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

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

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

פתרון בעיות

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

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

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

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

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