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