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

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

Chrome 86 से, वेब शेयर टारगेट अब उन ऐप्लिकेशन के लिए भी उपलब्ध है जो भरोसेमंद वेब गतिविधि का इस्तेमाल करते हैं. PWA को बिना किसी बदलाव के इस्तेमाल किया जा सकता है. हालांकि, Android ऐप्लिकेशन में कुछ बदलाव करने होंगे.

इस लेख में यह माना गया है कि डेवलपर को भरोसेमंद वेब गतिविधियों के बारे में पता है. अगर आपने पहले कभी इस टेक्नोलॉजी का इस्तेमाल नहीं किया है, तो इंटिग्रेशन गाइड देखें.

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

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

Android ऐप्लिकेशन में वेब शेयर टारगेट जोड़ना

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

build.gradle

android-browser-helper लाइब्रेरी को अपडेट किया गया है, ताकि वेब शेयर टारगेट के साथ काम किया जा सके. सबसे पहले, ऐप्लिकेशन को 2.0.1 या उसके बाद के वर्शन पर अपडेट करें.

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

res/strings.xml

ऐप्लिकेशन को भरोसेमंद वेब गतिविधि को, शेयर करने के उस तरीके की जानकारी देनी होगी जिसका इस्तेमाल वह करता है. जैसे, कौनसे यूआरएल खोलने हैं, इस्तेमाल किया जाने वाला तरीका, और इस्तेमाल किए जा सकने वाले MIME टाइप.

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

  1. ऐक्शन एट्रिब्यूट की वैल्यू, ऑरिजिन के साथ पूरा यूआरएल होना चाहिए.
  2. डबल कोट को एस्केप करना ज़रूरी है, ताकि हर ", \" बन जाए.

https://scrapbook-pwa.web.app/manifest.json का share_target सेक्शन इस तरह दिखता है:

{
  ...
  "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-types मैनेज कर सकता है.

<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 एलिमेंट जोड़ा जाना चाहिए.

नतीजा

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

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

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

समस्या का हल

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

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

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

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

  • पक्का करें कि डिजिटल एसेट लिंक की पुष्टि हो गई हो.
  • strings.xml में मौजूद JSON की जांच करके देखें कि वह सही है या नहीं.