চলুন ফ্লাটার ইনঅ্যাপওয়েবভিউ (InAppWebView) দিয়ে ওয়েবভিউ কন্টেন্ট ব্লকার তৈরি করি

01 October 2023

1 min read

এই ব্লগ পোস্টে, আমরা আপনাকে Flutter InAppWebView ব্যবহার করে কাস্টম কন্টেন্ট ব্লকার তৈরি করা দেখাবো 

--—লার্নিং //

এই আর্টিকেলে, আমরা flutter_inappwebview প্লাগইন ব্যবহার করে আমাদের ওয়েবভিউ ইন্সট্যান্সের জন্য একটি কাস্টম কনটেন্ট ব্লকার তৈরি করা শিখবো।

কন্টেন্ট ব্লকার সাধারণত বিজ্ঞাপন ব্লক করার জন্য ব্যবহার করা হয়, কিন্তু আপনি অন্য কোনো কন্টেন্ট ব্লক করতেও ব্যবহার করতে পারেন। ব্লকিং বিহেভিয়ারের মধ্যে রয়েছে এলিমেন্টস হাইড করা, লোড ব্লক করা এবং iOS এবং macOS-এ, WebView রিকুয়েস্ট থেকে কুকি রিমুভ করা।

মনে রাখবেন, স্পেশালাইজড এক্সটেনশন যেমন অ্যাডব্লক (AdBlock) বা অ্যাডব্লক প্লাসের (AdBlock Plus) কার্যকারিতা আর কন্টেন্ট ব্লকারের কার্যকারিতা একই লেভেলের না। কন্টেন্ট ব্লকার হলো এমন একটি রুলসের সেট যা কখনই ওয়েবভিউ থেকে কোনো কলব্যাক বা নোটিফিকেশন ফিরে পায় না যখন এটি ব্লক করার জন্য প্রয়োজনীয় কন্টেন্ট খুঁজে পায়।

InAppWebViewSettings ক্লাসের contentBlockers প্রোপার্টির মাধ্যমে আমরা ContentBlocker এর এমন ইন্সট্যান্সের একটি লিস্ট তৈরি করতে পারি ওয়েবভিউয়ের ব্যবহারের জন্য।


দ্যা কনটেন্টব্লকার ক্লাস (The ContentBlocker class)

আমরা ContentBlocker ক্লাসে কনটেন্ট-ব্লকিং বিহেভিয়ার সংজ্ঞায়িত করি। প্রত্যেকটির একটি অ্যাকশন প্রোপার্টি এবং ট্রিগার প্রোপার্টি রয়েছে। অ্যাকশন ওয়েবভিউকে বলে কী করতে হবে যখন এটি ট্রিগারের জন্য একটি ম্যাচ খুঁজে পায়। আর ট্রিগার ওয়েবভিউকে বলে কখন সংশ্লিষ্ট অ্যাকশনটি পারফর্ম করতে হবে।

এখানে একটি বেসিক উদাহরণ দেওয়া হলো:









এই উদাহরণে, কন্টেন্টব্লকার প্রতিটি ছবি এবং প্রতিটি ইউআরএলের জন্য স্টাইলশীট লোড হওয়া ব্লক করে।



অ্যাড ট্রিগারস টু ইওর কনটেন্ট ব্লকার (Add triggers to your Content Blocker)

একটি ট্রিগারকে অবশ্যই রিকোইয়ার্ড urlFilter প্রোপার্টি ডিফাইন করতে হবে, যাতে URL এর সাথে ম্যাচ করতে একটি রেগুলার এক্সপ্রেশনকে একটি স্ট্রিং হিসাবে নির্দিষ্ট করে। অন্যান্য প্রোপার্টি অপশনাল — তারা ট্রিগারের বিহেভিয়ার মোডিফাই করে। উদাহরণস্বরূপ, আপনি নির্দিষ্ট ডোমেনে ট্রিগারকে লিমিট করতে পারেন বা ওয়েবভিউকে একটি নির্দিষ্ট ডোমেনের জন্য একটি মিল খুঁজে পেলে আনএপ্লিকেবল করতে পারেন।

এখানে ইমেইজ এবং স্টাইল শীট রিসোর্সের জন্য ট্রিগার সহ একটি কনটেন্ট ব্লকারের উদাহরণ রয়েছে যা ওয়েবভিউ নির্দিষ্ট করা ছাড়া যেকোনো ডোমেনে খুঁজে পায়:








ডীপ ট্রিগার কাস্টমাইজেশনের জন্য, আপনি ContentBlockerTrigger এর অন্যান্য প্রোপার্টিগুলো ব্যবহার করতে পারেন:

  • urlFilterIsCaseSensitive: যদি URL ম্যাচিং কেস-সেনসিটিভ হয়। বাই ডিফল্ট, এটি কেস-সেনসিটিভ। 

  • resourceType: "ContentBlockerTriggerResourceType" এর একটি লিস্ট যা রিসোর্স টাইপকে প্রতিনিধিত্ব করে (যেভাবে ব্রাউজার রিসোর্স ব্যবহার করতে চায়) যা রুলসের সাথে ম্যাচ করা উচিত। যদি এটি নির্দিষ্ট করা না থাকে, তাহলে রুলটি সমস্ত রিসোর্স টাইপের সাথে মিলে যায়। 

  • ifDomain: URL এর ডোমেনের সাথে মিলে যাওয়া স্ট্রিংগুলোর একটি তালিকা; এটি নির্দিষ্ট ডোমেনের একটি লিস্টের অ্যাকশান লিমিট করে। ভ্যালুগুলো অবশ্যই ছোট হাতের ASCII বা Punycode হতে হবে non-ASCII অক্ষরগুলোর জন্য। ডোমেইন এবং সাবডোমেন ম্যাচের সামনে * যোগ করুন। এটি unlessDomain এর সাথে ব্যবহার করা যাবে না।

  • unlessDomain: একটি URL এর ডোমেনের সাথে মিলে যাওয়া স্ট্রিংগুলোর একটি লিস্ট; এটি প্রদত্ত লিস্টের ডোমেন ছাড়া যে কোনো সাইটে কাজ করে। ভ্যালুগুলো অবশ্যই ছোট হাতের ASCII বা Punycode হতে হবে non-ASCII অক্ষরগুলোর জন্য। ডোমেইন এবং সাবডোমেন ম্যাচের সামনে * যোগ করুন। এটি ifDomain এর সাথে ব্যবহার করা যাবে না। 

  • loadType: ContentBlockerTriggerLoadType এর একটি লিস্ট যা দুটির মধ্যে একটি মিউচুয়ালি এক্সক্লুসিভ ভ্যালুকে অন্তর্ভুক্ত করে। যদি নির্দিষ্ট করা না থাকে, তাহলে রুলটি সমস্ত লোড টাইপের সাথে মিলে যায়। ContentBlockerTriggerLoadType.FIRST_PARTY ট্রিগার হয় যখন রিসোর্সটির মেইন পেজের রিসোর্সের মতো একই স্কিম, ডোমেন এবং পোর্ট থাকে। ContentBlockerTriggerLoadType.THIRD_PARTY ট্রিগার হয় যখন রিসোর্সটির ডোমেন আর মেইন পেজ রিসোর্সের ডোমেন এক না হয়।

  • ifTopUrl: মেইন ডকুমেন্ট URL-এর সাথে মিলে যাওয়া স্ট্রিং এর একটি লিস্ট; এটি URL প্যাটার্নের একটি নির্দিষ্ট লিস্টের অ্যাকশানকে লিমিট করে। ভ্যালুগুলো অবশ্যই ছোট হাতের ASCII বা Punycode হতে হবে non-ASCII অক্ষরগুলোর জন্য। এটি unlessTopUrl এর সাথে ব্যবহার করা যাবে না। 

  • unlessTopUrl: মেইন ডকুমেন্ট URL-এর সাথে মিলে যাওয়া স্ট্রিংয়ের একটি অ্যারে; এটি প্রদত্ত লিস্টের URL প্যাটার্ন ব্যতীত যেকোনো সাইটে কাজ করে। ভ্যালুগুলো অবশ্যই ছোট হাতের ASCII বা Punycode হতে হবে non-ASCII অক্ষরগুলোর জন্য। এটি ifTopUrl এর সাথে ব্যবহার করা যাবে না। 

  • loadContext: স্ট্রিংগুলির একটি অ্যারে যা লোডিং কনটেক্সটকে নির্দিষ্ট করে৷ 

  • ifFrameUrl: iframes এর URL এর সাথে ম্যাচ করে এমন রেগুলার এক্সপ্রেশনের একটি লিস্ট।

প্রতিটি নির্দিষ্ট প্রোপার্টির জন্য কোড ডকুমেন্টেশন চেক করুন; কোন প্ল্যাটফর্ম সেই ফিচারকে সাপোর্ট করে তা খুঁজে বের করতে।


অ্যাড অ্যাকশনস টু ইউর কন্টেন্ট ব্লকার (Add actions to your Content Blocker) 

যখন একটি ট্রিগার একটি প্রোপার্টির সাথে ম্যাচ করে, তখন WebView সমস্ত ট্রিগারকে ইভালুয়েট করে এবং ক্রমানুসারে অ্যাকশান এক্সেকিট করে।

পারফরম্যান্স উন্নত করতে একই ধরনের অ্যাকশনের রুলসগুলোকে গ্রুপ করুন। উদাহরণস্বরূপ, প্রথমে রুলগুলোকে নির্দিষ্ট করুন যা কনটেন্ট লোডিং ব্লক করে এবং তারপরে কুকিজ ব্লক করে এমন নিয়মগুলোকে নির্দিষ্ট করুন। 

অ্যাকশনের জন্য শুধুমাত্র দুটি বৈধ প্রোপার্টি আছে: type এবং selector. একটি অ্যাকশন টাইপও প্রয়োজন। 

টাইপটি যদি ContentBlockerActionType.CSS_DISPLAY_NONE  হয়, তাহলে একটি selector ও প্রয়োজন; অন্যথায়, selector অপশনাল। 

এখানে একটি সিম্পল উদাহরণ দেখানো হলো:






ভ্যালিড টাইপগুলো হলো:

  • BLOCK: রিসোর্সের লোডিং বন্ধ করে। রিসোর্স ক্যাশে করা হলে, ক্যাশে ইগনোর করতে হবে। 

  • BLOCK_COOKIES: সার্ভারে পাঠানোর আগে হেডার থেকে কুকি স্ট্রিপ করে। এটি শুধুমাত্র এমন কুকিজ ব্লক করে যা অন্যথায় WebView এর প্রাইভেসী পলিসিতে গ্রহণযোগ্য। BLOCK_COOKIES কে IGNORE_PREVIOUS_RULES এর সাথে একত্রিত করা ব্রাউজারের প্রাইভেসী সেটিংসকে ওভাররাইড না করে।

  • CSS_DISPLAY_NONE: CSS সিলেক্টরের উপর ভিত্তি করে পেইজ এলিমেন্টগুলোকে হাইড করে। একটি সিলেক্টর ফিল্ডের একটি সিলেক্টর লিস্ট রয়েছে। যে ম্যাচিং এলিমেন্টের ডিসপ্লে প্রোপার্টি none এ সেট করা থাকে, তারা এটিকে হাইড করে। 

  • MAKE_HTTPS: একটি URL কে http থেকে https তে পরিবর্তন করে । যে URL এর একটি নির্দিষ্ট (ননডিফল্ট) পোর্ট এবং লিংক অন্য প্রোটোকল ব্যবহার করে সেগুলো আনএফেক্টেড থাকে। 

  • IGNORE_PREVIOUS_RULES: পূর্বে ট্রিগার করা হয়েছে এমন অ্যাকশন্গুলোকে ইগনোর করে।

প্রতিটি নির্দিষ্ট প্রোপার্টি জন্য কোড ডকুমেন্টেশন চেক করুন কোন প্ল্যাটফর্ম সেই ফিচারকে সাপোর্ট করে তা খুঁজে বের করতে।



ক্রিয়েটিং অ্যা সিম্পল অ্যাড ব্লকার (Creating a simple ad blocker)

আসুন আমরা যা শিখেছি তা ব্যবহার করে একটি সাধারণ অ্যাড ব্লকার তৈরি করি। 

































এই রুলগুলো ব্যবহার করলে গুগল অ্যাডের মতো একগুচ্ছ অ্যাড প্রদর্শনে বাধা দেবে।

অ্যাড ব্লকার ফিচার ডিসএবল বা অ্যানাবল করতে ডিসএবল/অ্যানাবল বাটনে ক্লিক করুন ।

উপসংহার

কনটেন্ট ব্লকাররা ব্যবহারকারীর গোপনীয়তাকে সম্মান করার সময় ওয়েবভিউতে কনটেন্ট ব্লক করার জন্য পারফরমেন্ট রুলস লিখতে দেয়।

সম্পূর্ণ প্রোজেক্ট কোডটি GitHub এ অ্যাভেইল্যাবল আছে। আজকের জন্য এতটুকুই। ধন্যবাদ!

Share this article

RELATED ARTICLES

টেকনোলজি না জানা কেউ কি DevOps শিখতে পারবে?  ||  Can A Non_IT Person Learn DevOps? (DevOps Guideline for Non-IT Person)

বর্তমান টেক দুনিয়ায় DevOps (Development and Operations) একটি জনপ্রিয় প্রফেশান হিসেবে গড়ে উঠেছে। DevOps মূলত একটি প্রসেস যা সফটওয়্যার ডেভেলপমেন্ট এবং আইটি অপারেশনস টিমের মধ্যে কম্বাইন করে, যার ফলে ফাস্ট, রিলায়েবল এবং ইফেক্টিভ সফটওয়্যার ডেলিভারি এনশিউর হয়। DevOps-এ ডেভেলপ মানে কেবল টেকনিক্যাল স্কিল নয়, বরং টিম কোলাবোরেশন, কালচারাল চেঞ্জ এবং ডেভেলপ প্রসেসের ইউজের স্কিলও এতে ইনক্লুডেট। আজ আলোচনা করা হবে, Non-IT বা টেকনোলজিক ফিল্ডে না থাকা কেউ কি DevOps শিখতে পারবে? এবং এই প্রফেশানে সাকসেসফুলল

20 October 2024

1 min read

DevOps শেখা কি সহজ? ||  Is DevOps Easy to Learn? (DevOps Learning Guideline)

বর্তমান টেক দুনিয়ায় DevOps একটি বহুল আলোচিত ও গুরুত্বপূর্ণ আইডিয়া। সফটওয়্যার ডেভেলপমেন্ট ও আইটি অপারেশনের মধ্যে একটি ব্রিজ হিসেবে DevOps-এর ইনোভেশন হয়েছে। এটি সফটওয়্যার ডেভেলমেন্ট ও ডেলিভারির স্পীড বাড়ানোর জন্য অটোমেটিক টুলস ও প্র্যাকটিসের মাধ্যমে কাজ করে। এই DevOps শেখা কি সহজ? এই প্রশ্নের উত্তর অনেকাংশে নির্ভর করে একজন লার্নারের ব্যাকগ্রাউন্ড, এক্সপেরিয়েন্স এবং শেখার ইন্টারেস্টের উপর।  আসুন এই বিষয়ে বিস্তারিত আলোচনার আগে আজকের টপিকগুলো জেনে নেই, DevOps কী? DevOps শেখার চ্যালেঞ্জ  শেখা

20 October 2024

1 min read

DevOps এর কোন ল্যাঙ্গুয়েজটি বেস্ট?  ||  Which Language is Best for DevOps? || (Best Language For DepOps)

DevOps বর্তমানে সফটওয়্যার ডেভেলপমেন্ট এবং আইটি অপারেশনসের কম্বাইন প্রসেস হিসেবে কাজ করছে। এর মূল উদ্দেশ্য হলো সফটওয়্যার ডেলিভারি প্রসেসকে ফাস্ট এবং কারেক্টলি কমপ্লিট করা, যেখানে ডেভেলপার এবং অপারেশন টিম কোলাবোরেটলি কাজ করে। DevOps প্রসেসে DevOps এর জন্য পারফেক্ট প্রোগ্রামিং ল্যাঙ্গুয়েজের সিলেক্ট করা অত্যন্ত গুরুত্বপূর্ণ কারণ এটি সিস্টেম অটোমেশন, কনফিগারেশন ম্যানেজমেন্ট, ইনফ্রাস্ট্রাকচার ম্যানেজমেন্ট এবং আরও বিভিন্ন কাজে হেল্পফুল হয়। DevOps-এর কাজের প্রসেসে ইউজ করার মতো বিভিন্ন প্রোগ্রামিং ল্

08 October 2024

1 min read

পাইথন কি বিগিনারদের জন্য শেখা সহজ? || Is Python Easy to Learn for Beginners || ( Python Guideline for Beginners)

প্রোগ্রামিংয়ের দুনিয়া বিগিনারদের জন্য অনেকটা কঠিন। প্রোগ্রামিংয়ে আগ্রহ থেকে ক্যারিয়ার হিসেবে অনেকেই প্রোগ্রামার হতে চায়। কিন্তু প্রোগ্রামার হওয়ার জার্নিটা এতো সহজ নয়। দিনের পর দিন কোডিং নিয়ে থাকতে থাকতে অনেকেই হাপিয়ে যায়। ঠিক তখন-ই বিগিনারদের এই কোডিংয়ের ঝামেলা থেকে চলে আসে পাইথন। প্রোগ্রামিং ল্যাঙ্গুয়েজের দুনিয়ায় সবচেয়ে সহজ প্রোগ্রামিং ল্যাঙ্গুয়েজ বলা হয় পাইথনকে। কিন্তু এই কথা কি আসলেই সত্যি?  * কেন পাইথন শেখা সহজ? ● পাইথনের ইংরেজি সিনট্যাক্স ● পাইথন লজিকে ফোকাস করে ● পাইথন ফ্রি-তে ইউজ করা

08 October 2024

1 min read

অনলাইন লাইভ স্কিল ডেভেলপমেন্ট প্ল্যাটফর্ম।

ডাউনলোড করুন ওস্তাদ অ্যাপ

কমিউনিটি -এর সাথে কানেক্টেড থাকতে