فعال کردن Web Share Target در Trusted Web Activity

Web Share Target به PWA ها امکان می دهد محتوای مشترک را از سایر برنامه های نصب شده روی دستگاه دریافت کنند. برای مثال می‌توان از این ویژگی برای برنامه‌هایی مانند ویرایشگرهای تصویر برای دریافت تصویر از یک برنامه دوربین یا یک شبکه اجتماعی برای دریافت تصویر یا ویدیو برای اشتراک‌گذاری استفاده کرد.

با شروع Chrome 86، Web Share Target اکنون برای برنامه‌های کاربردی با استفاده از Trusted Web Activity نیز در دسترس است. در حالی که PWA باید خارج از جعبه کار کند، چند تغییر در برنامه Android مورد نیاز است.

این مقاله فرض می‌کند که توسعه‌دهنده با فعالیت‌های وب مورد اعتماد آشنا است. خوانندگانی که تازه با این فناوری آشنا هستند می توانند با راهنمای ادغام شروع به کار کنند.

در همین راستا، توضیح کامل اجرای Web Share Target در PWA خارج از محدوده است و توسعه دهندگان می توانند اطلاعات بیشتری را در این مقاله بیابند.

برنامه آزمایشی در https://scrapbook-pwa.web.app/ به عنوان PWA برای این مقاله استفاده خواهد شد و کد منبع آن در GitHub در دسترس است و برنامه Android مبتنی بر نسخه آزمایشی اصلی Trusted Web Activity است.

Web Share Target را به برنامه اندروید اضافه کنید

به منظور اصلاح یک برنامه کاربردی مبتنی بر فعالیت وب مورد اعتماد برای پیاده سازی Web Share Target، تغییراتی در سه فایل مختلف مورد نیاز است:

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 پشتیبانی شده، به Activity Web Trusted بگوید.

این کار از طریق یک JSON انجام می شود که با یک منبع رشته ای در دسترس فعالیت وب مورد اعتماد قرار گرفته است. فیلدها مانند فیلد share_target موجود در Web Manifest هستند و می‌توان آنها را به رشته‌ای در داخل strings.xml ، تقریباً همانطور که هست، با دو نکته مهم اضافه کرد:

  1. مقدار مشخصه action باید 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

چند تغییر در مانیفست اندروید لازم است. ابتدا باید اطمینان حاصل کنیم که 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 که اعلام می کند برنامه می تواند کدام نوع مایک را با سایر برنامه های دستگاه مدیریت کند.

<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 اضافه شود.

نتیجه گیری

ادغام Web Share Target به PWA ها در داخل یک فعالیت وب مورد اعتماد امکان می دهد تا عمیق تر با سایر برنامه های نصب شده بر روی دستگاه Android یکپارچه شوند.

همانطور که در مراحل بالا توضیح داده شد، نشانه‌گذاری اضافی مورد نیاز برای افزودن پشتیبانی از API در یک برنامه اندروید موجود که از Trusted Web Activity استفاده می‌کند توسط android-browser-helper ساده‌تر شده است.

مقاله Web Share Target را بررسی کنید تا با استفاده از API در یک PWA و Web Share API برای یادگیری نحوه اشتراک‌گذاری محتوا از برنامه وب پیشرفته آشنا شوید.

عیب یابی

وقتی می‌خواهم فایلی را از برنامه دیگری به اشتراک بگذارم، برنامه من به عنوان یک گزینه نشان داده نمی‌شود.

هنگامی که برنامه به عنوان یک گزینه نمایش داده نمی شود، این نشان می دهد که intent-filter نادرست است. نشانه‌گذاری intent-filter را دوباره بررسی کنید، مطمئن شوید که شامل اقدامات، دسته‌بندی و mime-types صحیحی است که توسط برنامه مدیریت می‌شود.

برنامه من به عنوان یک گزینه نشان می دهد، PWA شروع شده است، اما داده ها به اشتراک گذاشته نمی شوند.

چند چیز وجود دارد که می تواند باعث این امر شود. این یک چک لیست از مواردی است که باید به آنها نگاه کنید:

  • اطمینان حاصل کنید که اعتبارسنجی پیوندهای دارایی دیجیتال موفقیت آمیز است.
  • JSON داخل strings.xml را برای صحت بررسی کنید.