भरोसेमंद वेब गतिविधि में वेब शेयर टारगेट चालू करें

Web Share Target की मदद से, PWA को डिवाइस पर इंस्टॉल किए गए अन्य ऐप्लिकेशन से शेयर किया गया कॉन्टेंट मिल सकता है. उदाहरण के लिए, इस सुविधा का इस्तेमाल इमेज एडिटर जैसे ऐप्लिकेशन, कैमरा ऐप्लिकेशन से इमेज पाने के लिए कर सकते हैं. वहीं, सोशल नेटवर्क, शेयर करने के लिए इमेज या वीडियो पाने के लिए कर सकते हैं.

Chrome 86 से, Web Share Target की सुविधा, Trusted Web Activity का इस्तेमाल करने वाले ऐप्लिकेशन के लिए भी उपलब्ध है. हालांकि, PWA को बिना किसी बदलाव के इस्तेमाल किया जा सकता है. वहीं, Android ऐप्लिकेशन में कुछ बदलाव करने पड़ते हैं.

इस लेख में, यह मान लिया गया है कि डेवलपर को Trusted Web Activity के बारे में जानकारी है. इस टेक्नोलॉजी के बारे में नए डेवलपर, इंटिग्रेशन गाइड से शुरुआत कर सकते हैं.

इसी तरह, PWA में Web Share Target को लागू करने के बारे में पूरी जानकारी देना, इस लेख के दायरे से बाहर है. हालांकि, डेवलपर इस लेख में ज़्यादा जानकारी पा सकते हैं.

इस लेख में, https://scrapbook-pwa.web.app/ पर मौजूद डेमो ऐप्लिकेशन को PWA के तौर पर इस्तेमाल किया जाएगा. इसका सोर्स कोड GitHub पर उपलब्ध है. साथ ही, Android ऐप्लिकेशन, Trusted Web Activity के बुनियादी डेमो पर आधारित है.

Android ऐप्लिकेशन में Web Share Target जोड़ना

Web Share Target को लागू करने के लिए, Trusted Web Activity पर आधारित किसी मौजूदा ऐप्लिकेशन में तीन अलग-अलग फ़ाइलों में बदलाव करना ज़रूरी है:

build.gradle

android-browser-helper लाइब्रेरी को अपडेट कर दिया गया है. इसमें Web Share Target की सुविधा जोड़ दी गई है. सबसे पहले, ऐप्लिकेशन को 2.0.1 या इससे ज़्यादा वाले वर्शन पर अपडेट करें.

dependencies {
    ...
    implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}

res/strings.xml

ऐप्लिकेशन को Trusted Web Activity को शेयर करने से जुड़ी जानकारी देनी होगी. जैसे, किन यूआरएल को खोलना है, किस तरीके का इस्तेमाल करना है, और किन mime-type को इस्तेमाल किया जा सकता है.

यह काम JSON की मदद से किया जाता है. इसे स्ट्रिंग रिसॉर्स की मदद से, Trusted Web Activity के लिए उपलब्ध कराया जाता है. इसमें मौजूद फ़ील्ड, Web Manifest में मौजूद share_target फ़ील्ड के जैसे ही होते हैं. इन्हें strings.xml में मौजूद किसी स्ट्रिंग में, लगभग उसी तरह जोड़ा जा सकता है. हालांकि, इसके लिए इन दो बातों का ध्यान रखना ज़रूरी है:

  1. ऐक्शन एट्रिब्यूट की वैल्यू, ओरिजन के साथ पूरा यूआरएल होनी चाहिए.
  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 टैग, जो strings.xml में तय किए गए JSON को रेफ़र करता है. - एक intent-filter, जो यह तय करता है कि ऐप्लिकेशन, डिवाइस पर मौजूद अन्य ऐप्लिकेशन के लिए किन mime-type को हैंडल कर सकता है.

<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>

ऊपर दिए गए मार्कअप में देखा जा सकता है कि share_target JSON में तय किए गए हर mime-type के लिए, एक data एलिमेंट जोड़ा जाना चाहिए.

नतीजा

Web Share Target के इंटिग्रेशन की मदद से, Trusted Web Activity में मौजूद PWA को Android डिवाइस पर इंस्टॉल किए गए अन्य ऐप्लिकेशन के साथ ज़्यादा बेहतर तरीके से इंटिग्रेट किया जा सकता है.

ऊपर बताए गए चरणों के मुताबिक, Trusted Web Activity का इस्तेमाल करने वाले किसी मौजूदा Android ऐप्लिकेशन में, एपीआई के लिए सहायता जोड़ने के लिए ज़रूरी अतिरिक्त मार्कअप को android-browser-helper की मदद से आसान बनाया जा सकता है.

PWA पर एपीआई का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Web Share Target लेख पढ़ें. साथ ही, Web Share API लेख पढ़ें, ताकि प्रोग्रेसिव वेब ऐप्लिकेशन से कॉन्टेंट शेयर करने का तरीका जाना जा सके.

समस्या का हल

किसी दूसरी ऐप्लिकेशन से कोई फ़ाइल शेयर करने की कोशिश करने पर, मेरा ऐप्लिकेशन विकल्प के तौर पर नहीं दिखता.

अगर ऐप्लिकेशन विकल्प के तौर पर नहीं दिखता है, तो इसका मतलब है कि intent-filter गलत है. intent-filter मार्कअप की दोबारा जांच करें. साथ ही, पक्का करें कि इसमें सही ऐक्शन, कैटगरी, और mime-types शामिल हों.

मेरा ऐप्लिकेशन विकल्प के तौर पर दिखता है, PWA शुरू हो जाता है, लेकिन डेटा शेयर नहीं होता.

इसकी कुछ वजहें हो सकती हैं. यहां ऐसी चीज़ों की चेकलिस्ट दी गई है जिन पर ध्यान देना ज़रूरी है:

  • पक्का करें कि Digital Asset Links की पुष्टि हो गई हो.
  • strings.xml में मौजूद JSON की जांच करें और पक्का करें कि यह सही हो.