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

आंद्रे सिप्रियानी बांडारा
आंद्रे सिप्रियानी बांद्रा

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

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

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

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

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

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

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

build.gradle

android-ब्राउज़र-हेल्पर की लाइब्रेरी को 'वेब शेयर टारगेट' के साथ अपडेट कर दिया गया है. पहले चरण के तौर पर, ऐप्लिकेशन को अपडेट करें, ताकि आप 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 टैग है, जो छोटा-से-ज़्यादा JSON फ़ॉर्मैट में दिया गया है. - 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>

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

नतीजा

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

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

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

समस्या हल करना

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

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

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

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

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