تفعيل هدف مشاركة الويب في "النشاط على الويب الموثوق به"

يتيح هدف مشاركة الويب لتطبيقات الويب التقدّمية تلقّي المحتوى المشترَك من التطبيقات الأخرى المثبَّتة على الجهاز. يمكن استخدام هذه الميزة، على سبيل المثال، من خلال تطبيقات مثل برامج تعديل الصور لتلقّي صورة من تطبيق كاميرا أو شبكة اجتماعية لتلقّي صورة أو فيديو لمشاركتهما.

بدءًا من الإصدار 86 من Chrome، أصبح هدف مشاركة الويب متاحًا أيضًا للتطبيقات التي تستخدم نشاط الويب الموثوق به. على الرغم من أنّ تطبيق الويب التقدّمي من المفترض أن يعمل بشكلٍ تلقائي، إلا أنّه يجب إجراء بعض التغييرات على تطبيق Android.

تفترض هذه المقالة أنّ المطوّر على دراية بالأنشطة الموثوق بها على الويب. يمكن للقُرّاء المبتدئين في استخدام التكنولوجيا البدء باستخدام دليل الدمج.

في هذا السياق، لا يشمل النطاق شرحًا كاملاً لتنفيذ ميزة "استهداف مشاركة الويب" في تطبيق الويب التقدّمي، ويمكن للمطوّرين العثور على مزيد من المعلومات في هذه المقالة.

سيتم استخدام التطبيق التجريبي على الرابط https://scrapbook-pwa.web.app/ كتطبيق متوافق مع الأجهزة الجوّالة (PWA) في هذه المقالة، ويتوفّر رمزه المصدر على GitHub، ويستند تطبيق Android إلى التطبيق التجريبي الأساسي لميزة "النشاط الموثوق به على الويب".

إضافة ميزة "المشاركة على الويب" إلى تطبيق Android

لتعديل تطبيق حالي يستند إلى "النشاط الموثوق به على الويب" من أجل تنفيذ Web Share Target، يجب إجراء تعديلات على ثلاثة ملفات مختلفة:

build.gradle

تم تعديل مكتبة android-browser-helper لتتيح استخدام ميزة "هدف المشاركة على الويب". كخطوة أولى، عليك تحديث التطبيق لاستخدام إصدار أعلى من 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>

أخيرًا، يجب إضافة عنصرَين جديدَين إلى علامة نشاط 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 تمّ تحديده في share_target JSON.

الخاتمة

يتيح دمج Web Share Target دمج التطبيقات المصمّمة للويب داخل "نشاط موثوق على الويب" بشكلٍ عميق مع التطبيقات الأخرى المثبَّتة على جهاز Android.

كما هو موضّح في الخطوات أعلاه، يسهّل android-browser-helper ترميز البيانات الإضافي المطلوب لإضافة إمكانية استخدام واجهة برمجة التطبيقات في تطبيق Android حالي يستخدم ميزة "نشاط الويب الموثوق به".

اطّلِع على مقالة "استهداف مشاركة الويب" لمعرفة المزيد من المعلومات عن استخدام واجهة برمجة التطبيقات على تطبيق ويب تقدّمي وWeb Share API لمعرفة كيفية مشاركة المحتوى من تطبيق الويب التقدّمي.

تحديد المشاكل وحلّها

لا يظهر تطبيقي كخيار عند محاولة مشاركة ملف من تطبيق آخر.

عندما لا يظهر التطبيق كخيار، يعني ذلك أنّ intent-filter غير صحيح. تحقَّق جيدًا من ترميز intent-filter وتأكَّد من أنّه يحتوي على الإجراءات الصحيحة وال الفئة وmime-types التي يعالجها التطبيق.

يظهر تطبيقي كخيار، ويتم تشغيل تطبيق الويب التقدّمي، ولكن لا تتم مشاركة البيانات.

هناك بضعة أسباب يمكن أن تؤدي إلى ذلك. في ما يلي قائمة تحقّق بالنقاط التي يجب الانتباه إليها:

  • تأكَّد من نجاح عملية التحقّق من روابط مواد العرض الرقمية.
  • تحقّق من صحة ملف JSON داخل strings.xml.