ওয়েব শেয়ার টার্গেট পিডব্লিউএ-কে ডিভাইসে ইনস্টল করা অন্যান্য অ্যাপ্লিকেশন থেকে শেয়ার করা কন্টেন্ট গ্রহণ করতে সক্ষম করে। উদাহরণস্বরূপ, ইমেজ এডিটরের মতো অ্যাপ্লিকেশনগুলো ক্যামেরা অ্যাপ থেকে ছবি গ্রহণ করতে, অথবা কোনো সোশ্যাল নেটওয়ার্ক শেয়ার করার জন্য ছবি বা ভিডিও গ্রহণ করতে এই ফিচারটি ব্যবহার করতে পারে।
ক্রোম ৮৬ থেকে শুরু করে, ট্রাস্টেড ওয়েব অ্যাক্টিভিটি ব্যবহারকারী অ্যাপ্লিকেশনগুলোর জন্যও এখন ওয়েব শেয়ার টার্গেট উপলব্ধ। যদিও পিডব্লিউএ (PWA) ইনস্টল করার সাথে সাথেই কাজ করার কথা, অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে কয়েকটি পরিবর্তন প্রয়োজন।
এই নিবন্ধটি ধরে নেয় যে ডেভেলপার ট্রাস্টেড ওয়েব অ্যাক্টিভিটিজ (Trusted Web Activities) সম্পর্কে পরিচিত। যে পাঠকরা এই প্রযুক্তিতে নতুন, তারা ইন্টিগ্রেশন গাইড (Integration Guide) দিয়ে শুরু করতে পারেন।
একইভাবে, একটি PWA-তে ওয়েব শেয়ার টার্গেট বাস্তবায়নের পূর্ণাঙ্গ ব্যাখ্যা এই আলোচনার আওতার বাইরে এবং ডেভেলপাররা এই নিবন্ধে আরও তথ্য পেতে পারেন।
এই নিবন্ধটির PWA হিসেবে https://scrapbook-pwa.web.app/ -এ থাকা ডেমো অ্যাপ্লিকেশনটি ব্যবহার করা হবে, যার সোর্স কোড গিটহাবে (GitHub) পাওয়া যাবে এবং অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি বেসিক ট্রাস্টেড ওয়েব অ্যাক্টিভিটি (Trusted Web Activity) ডেমোর উপর ভিত্তি করে তৈরি।
অ্যান্ড্রয়েড অ্যাপে ওয়েব শেয়ার টার্গেট যোগ করুন
একটি বিদ্যমান ট্রাস্টেড ওয়েব অ্যাক্টিভিটি ভিত্তিক অ্যাপ্লিকেশনকে ওয়েব শেয়ার টার্গেট বাস্তবায়নের জন্য পরিবর্তন করতে হলে, তিনটি ভিন্ন ফাইলে পরিবর্তন করা প্রয়োজন:
বিল্ড.গ্রেডল
android-browser-helper লাইব্রেরিটি Web Share Target সাপোর্ট সহ আপডেট করা হয়েছে। প্রথম পদক্ষেপ হিসেবে, অ্যাপ্লিকেশনটিকে 2.0.1 বা তার চেয়ে উচ্চতর কোনো সংস্করণে আপডেট করুন।
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/strings.xml
অ্যাপ্লিকেশনটিকে ট্রাস্টেড ওয়েব অ্যাক্টিভিটিকে জানাতে হবে যে এটি কোন ধরনের শেয়ারিং গ্রহণ করতে সমর্থন করে, যেমন কোন ইউআরএলগুলো খুলতে হবে, কোন পদ্ধতি ব্যবহার করতে হবে এবং সমর্থিত মাইম-টাইপগুলো কী কী।
এটি একটি JSON-এর মাধ্যমে করা হয়, যা একটি স্ট্রিং রিসোর্স সহ ট্রাস্টেড ওয়েব অ্যাক্টিভিটিতে উপলব্ধ করা হয়। ফিল্ডগুলো ওয়েব ম্যানিফেস্টে উপলব্ধ share_target ফিল্ডের মতোই এবং দুটি গুরুত্বপূর্ণ বিষয় মনে রেখে, প্রায় হুবহু strings.xml ভেতরের একটি স্ট্রিং-এ যোগ করা যেতে পারে:
- action অ্যাট্রিবিউটের মান অবশ্যই অরিজিন সহ সম্পূর্ণ ইউআরএল হতে হবে।
- ডাবল কোটকে এস্কেপ করতে হবে, তাই প্রতিটি
"চিহ্ন\"হয়ে যাবে।
https://googlechrome.github.io/samples/scrapbook-pwa/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
অ্যান্ড্রয়েড ম্যানিফেস্টে কয়েকটি পরিবর্তন প্রয়োজন। প্রথমে আমাদের নিশ্চিত করতে হবে যে 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 যা ডিভাইসের অন্যান্য অ্যাপের কাছে ঘোষণা করে যে অ্যাপ্লিকেশনটি কোন কোন মাইম-টাইপ হ্যান্ডেল করতে সক্ষম।
<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 এলিমেন্ট যোগ করতে হবে।
উপসংহার
ওয়েব শেয়ার টার্গেট ইন্টিগ্রেশন একটি ট্রাস্টেড ওয়েব অ্যাক্টিভিটির ভেতরে থাকা পিডব্লিউএ-গুলোকে অ্যান্ড্রয়েড ডিভাইসে ইনস্টল করা অন্যান্য অ্যাপ্লিকেশনের সাথে আরও নিবিড়ভাবে সংযুক্ত হতে সক্ষম করে।
উপরের ধাপগুলিতে যেমন বর্ণনা করা হয়েছে, android-browser-helper ট্রাস্টেড ওয়েব অ্যাক্টিভিটি ব্যবহার করে এমন একটি বিদ্যমান অ্যান্ড্রয়েড অ্যাপে এপিআই-এর জন্য সমর্থন যোগ করার জন্য প্রয়োজনীয় অতিরিক্ত মার্কআপকে আরও সহজ করে তোলে।
একটি PWA-তে API ব্যবহার সম্পর্কে আরও জানতে Web Share Target আর্টিকেলটি দেখুন এবং Progressive Web App থেকে কীভাবে কন্টেন্ট শেয়ার করতে হয় তা জানতে Web Share API দেখুন।
সমস্যা সমাধান
অন্য কোনো অ্যাপ্লিকেশন থেকে ফাইল শেয়ার করার চেষ্টা করলে আমার অ্যাপ্লিকেশনটি একটি বিকল্প হিসেবে দেখা যায় না।
যখন অ্যাপ্লিকেশনটি একটি বিকল্প হিসাবে প্রদর্শিত হয় না, তখন এটি নির্দেশ করে যে intent-filter ভুল। intent-filter মার্কআপটি পুনরায় পরীক্ষা করুন এবং নিশ্চিত করুন যে এতে অ্যাপ্লিকেশন দ্বারা পরিচালিত সঠিক অ্যাকশন, ক্যাটাগরি এবং mime-types অন্তর্ভুক্ত রয়েছে।
আমার অ্যাপ্লিকেশনটি একটি বিকল্প হিসেবে দেখাচ্ছে, PWA চালু হচ্ছে, কিন্তু ডেটা শেয়ার হচ্ছে না।
কয়েকটি কারণে এটি হতে পারে। নিচে যে বিষয়গুলো খতিয়ে দেখতে হবে তার একটি তালিকা দেওয়া হলো:
- ডিজিটাল অ্যাসেট লিঙ্ক যাচাইকরণ সফল হয়েছে কিনা তা নিশ্চিত করুন।
- strings.xml ফাইলের ভেতরের JSON-টি সঠিক কিনা তা যাচাই করুন।