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

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

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

ऐप्लिकेशन को विश्वसनीय वेब गतिविधि को उस साझाकरण का विवरण देना होगा, जो उसके साथ काम करता है, जैसे कि किस Url को खोलना है, उपयोग करने का तरीका क्या है, और किस 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 शुरू हो जाता है, लेकिन डेटा शेयर नहीं होता.

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

  • पक्का करें कि डिजिटल एसेट लिंक की पुष्टि हो गई हो.
  • सही होने के लिए,String.xml में JSON की जांच करें.