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

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

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

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

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

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

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

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

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://googlechrome.github.io/samples/scrapbook-pwa/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.

الخاتمة

يتيح تكامل ميزة "هدف المشاركة على الويب" لتطبيقات الويب التقدّمية داخل "نشاط الويب الموثوق به" أن تكون أكثر تكاملاً مع التطبيقات الأخرى المثبّتة على جهاز Android.

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

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

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

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

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

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

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

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