জেটপ্যাক ওয়েবকিট দিয়ে আপনার ওয়েবভিউ বাস্তবায়ন সহজ করুন

এই নির্দেশিকাটিতে জেটপ্যাক ওয়েবকিট লাইব্রেরির সুবিধাগুলি বর্ণনা করা হয়েছে, এটি কীভাবে কাজ করে এবং আপনি কীভাবে এটি আপনার প্রকল্পগুলিতে বাস্তবায়ন করতে পারেন তা ব্যাখ্যা করা হয়েছে।

সংক্ষিপ্ত বিবরণ

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

জেটপ্যাক ওয়েবকিট একটি সামঞ্জস্য স্তর হিসেবে কাজ করে এবং ব্যবহারকারীর ডিভাইসে আপ-টু-ডেট ওয়েবভিউ APK ব্যবহার করে এই সমস্যাগুলি সমাধান করে। এতে নতুন এবং আধুনিক API গুলিও রয়েছে যা এই লাইব্রেরিতে একচেটিয়াভাবে উপলব্ধ।

জেটপ্যাক ওয়েবকিট কেন ব্যবহার করবেন?

ক্রস-ভার্সন সামঞ্জস্যতা প্রদানের পাশাপাশি, জেটপ্যাক ওয়েবকিট নতুন এবং আধুনিক API গুলিও অফার করে যা ডেভেলপমেন্টকে সহজতর করতে পারে এবং আপনার অ্যাপের কার্যকারিতা উন্নত করতে পারে:

  • আধুনিক প্রমাণীকরণ সক্ষম করে : WebView WebAuthn এর মতো আধুনিক ওয়েব প্রমাণীকরণ মানগুলিকে নির্বিঘ্নে পরিচালনা করতে পারে, পাসকি-ভিত্তিক সাইন-ইন সক্ষম করে। androidx.webkit লাইব্রেরি আপনাকে WebSettingsCompat.setWebAuthenticationSupport() পদ্ধতি ব্যবহার করে এই ইন্টিগ্রেশনের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়, যা আপনি আপনার অ্যাপের প্রয়োজনীয় সমর্থনের স্তর কনফিগার করতে ব্যবহার করতে পারেন।

  • কর্মক্ষমতা উন্নত করে : prefetchUrlAsync , prerenderUrlAsync এবং setBackForwardCacheEnabled এর মতো API ব্যবহার করে আপনার অ্যাপের ব্যবহারের ক্ষেত্রে WebView এর কর্মক্ষমতা উন্নত করে।

  • স্থিতিশীলতা বৃদ্ধি করে : ক্র্যাশ না করেই স্থগিত বা প্রতিক্রিয়াহীন রেন্ডারার প্রক্রিয়াগুলি পুনরুদ্ধার করুন। আরও তথ্যের জন্য, WebViewRenderProcess#terminate() দেখুন।

  • ব্রাউজিং ডেটার উপর গ্রানুলার নিয়ন্ত্রণ প্রদান করে : নির্দিষ্ট উৎসের জন্য WebView দ্বারা সংরক্ষিত ব্রাউজিং ডেটা মুছে ফেলতে, WebStorageCompat ক্লাস ব্যবহার করুন।

উপাদানগুলো বুঝুন

জেটপ্যাক ওয়েবকিট কার্যকরভাবে ব্যবহার করতে, আপনাকে নিম্নলিখিত উপাদানগুলির মধ্যে সম্পর্ক বুঝতে হবে:

  • অ্যান্ড্রয়েড সিস্টেম ওয়েবভিউ : এটি ক্রোমিয়াম-ভিত্তিক রেন্ডারিং ইঞ্জিন যা গুগল নিয়মিতভাবে গুগল প্লে স্টোরের মাধ্যমে ক্রোমের মতো একই ক্যাডেন্সে আপডেট করে। এতে সর্বাধিক হালনাগাদ বৈশিষ্ট্য রয়েছে এবং সমস্ত ওয়েবভিউ এপিআইয়ের জন্য অন্তর্নিহিত বাস্তবায়ন কোড সরবরাহ করে।

  • ফ্রেমওয়ার্ক API ( android.webkit ) : এগুলি হল এমন API যা একটি নির্দিষ্ট Android OS সংস্করণে স্থির করা হয়। উদাহরণস্বরূপ, Android 10-এ থাকা একটি অ্যাপ শুধুমাত্র সেই APIগুলি অ্যাক্সেস করতে পারে যা সেই সংস্করণটি প্রকাশের সময় উপলব্ধ ছিল। সুতরাং, এটি সাম্প্রতিক আপডেটগুলিতে WebView APK-তে যোগ করা নতুন বৈশিষ্ট্যগুলি ব্যবহার করতে পারে না। উদাহরণস্বরূপ, WebView#getWebViewRenderProcess() সহ একটি অপ্রতিক্রিয়াশীল রেন্ডারারের উপর একটি হ্যান্ডেল পেতে, আপনি শুধুমাত্র Android 10 এবং উচ্চতর সংস্করণে এটি কল করতে পারেন।

  • Jetpack Webkit Library ( androidx.webkit ) : এটি আপনার অ্যাপ্লিকেশনের সাথে সংযুক্ত একটি ছোট লাইব্রেরি। এই লাইব্রেরিটি একটি সেতু হিসেবে কাজ করে যা WebView APK-তে কল করে, Android প্ল্যাটফর্মে সংজ্ঞায়িত API-গুলিতে কল করার পরিবর্তে, যার একটি নির্দিষ্ট OS সংস্করণ রয়েছে। এইভাবে, Android 10-এর মতো পুরানো OS সংস্করণে চলমান ডিভাইসে কোনও অ্যাপ্লিকেশন ইনস্টল করা হলেও, অ্যাপ্লিকেশনটি সর্বশেষ WebView বৈশিষ্ট্যগুলি ব্যবহার করতে পারে। উদাহরণস্বরূপ, WebViewCompat.getWebViewRenderProcess() ফ্রেমওয়ার্ক API-এর মতোই কাজ করে, তবে এটি Android 10-এর আগের সমস্ত OS সংস্করণেও কল করা যেতে পারে।

যদি ফ্রেমওয়ার্ক এবং জেটপ্যাক ওয়েবকিট উভয় ক্ষেত্রেই একটি API উপলব্ধ থাকে, তাহলে আমরা আপনাকে জেটপ্যাক ওয়েবকিট সংস্করণটি বেছে নেওয়ার পরামর্শ দিচ্ছি। এটি বিস্তৃত পরিসরে ডিভাইসের সামঞ্জস্যপূর্ণ আচরণ এবং সামঞ্জস্য নিশ্চিত করতে সহায়তা করে।

জেটপ্যাক ওয়েবকিট এবং APK এর মিথস্ক্রিয়া

জেটপ্যাক ওয়েবকিটের API গুলি দুটি অংশে বাস্তবায়িত হয়:

  • স্ট্যাটিক জেটপ্যাক ওয়েবকিট : স্ট্যাটিক জেটপ্যাক ওয়েবকিট লাইব্রেরিতে API বাস্তবায়নের জন্য দায়ী কোডের একটি সংখ্যালঘু অংশ থাকে।

  • ওয়েবভিউ APK : ওয়েবভিউ APK-তে বেশিরভাগ কোড থাকে।

আপনার অ্যাপটি Jetpack Webkit API কে কল করে, যা পরে WebView APK কে কল করে।

আপনার অ্যাপে Jetpack Webkit ভার্সন নিয়ন্ত্রণ করলেও, ব্যবহারকারীদের ডিভাইসে WebView APK আপডেট নিয়ন্ত্রণ করতে পারবেন না। সাধারণত, বেশিরভাগ ব্যবহারকারীর কাছে WebView APK-এর আপ-টু-ডেট ভার্সন থাকে, তবে আপনার অ্যাপটিকে এখনও সতর্ক থাকতে হবে যে WebView APK-এর সেই নির্দিষ্ট ভার্সনটি সমর্থন করে না এমন API-তে কল না করা।

জেটপ্যাক ওয়েবকিট ওয়েবভিউ সংস্করণগুলি ম্যানুয়ালি পরীক্ষা করার প্রয়োজনীয়তাও দূর করে। কোনও বৈশিষ্ট্য উপলব্ধ কিনা তা নির্ধারণ করতে, এর বৈশিষ্ট্য ধ্রুবকটি পরীক্ষা করুন। উদাহরণস্বরূপ, WebViewFeature.WEB_AUTHENTICATION

তারা কীভাবে একসাথে কাজ করে

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

যদি WebView APKটি সাম্প্রতিক সংস্করণ হয়, তাহলে লাইব্রেরিটি বৈশিষ্ট্যটি ব্যবহার করে। যদি না হয়, তাহলে এটি রিপোর্ট করে যে বৈশিষ্ট্যটি অনুপলব্ধ, আপনার অ্যাপটিকে ক্র্যাশ হতে বাধা দেয় এবং আপনাকে পরিস্থিতিটি সুন্দরভাবে পরিচালনা করতে সক্ষম করে।

জেটপ্যাক ওয়েবকিট এবং ফ্রেমওয়ার্ক এপিআই তুলনা করুন

এই বিভাগটি জেটপ্যাক ওয়েবকিট লাইব্রেরির সাথে এবং ছাড়া বাস্তবায়ন পদ্ধতিগুলির তুলনা করে:

আধুনিক প্রমাণীকরণ সক্ষম করুন (WebAuthn)

জেটপ্যাক ওয়েবকিট ছাড়া

ফ্রেমওয়ার্ক API-এর মাধ্যমে সম্ভব নয়।

জেটপ্যাক ওয়েবকিট সহ

সামঞ্জস্যতা যাচাইয়ের জন্য WebViewFeature.WEB_AUTHENTICATION ব্যবহার করে।

if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) {
  WebSettingsCompat.setWebAuthenticationSupport(
      webView.settings,
      WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP
  )
}

একটি উৎসের জন্য ডেটা মুছুন (সাইট-নির্দিষ্ট স্টোরেজ)

জেটপ্যাক ওয়েবকিট ছাড়া

নির্দিষ্ট উৎসের ডেটা মুছে ফেলার জন্য কোনও সরাসরি API নেই। প্রায়শই সমস্ত ডেটা মুছে ফেলার প্রয়োজন হয়।

জেটপ্যাক ওয়েবকিট সহ

সুনির্দিষ্ট ডেটা মুছে ফেলার জন্য সামঞ্জস্যপূর্ণ API ব্যবহার করে। আপনি নিম্নলিখিত বিকল্পগুলির যেকোনো একটি ব্যবহার করতে পারেন:

WebStorageCompat.getInstance().deleteBrowsingData()

অথবা

WebStorageCompat.getInstance().deleteBrowsingDataForSite()

ওয়েবভিউ সংস্করণ পান

জেটপ্যাক ওয়েবকিট ছাড়া

স্ট্যান্ডার্ড ফ্রেমওয়ার্ক ক্লাস ব্যবহার করে।

val webViewPackage = WebView.getCurrentWebViewPackage()

জেটপ্যাক ওয়েবকিট সহ

নিরাপদে পুনরুদ্ধারের জন্য সামঞ্জস্য স্তর ব্যবহার করে।

val webViewPackage = WebViewCompat.getCurrentWebViewPackage()

প্রতিক্রিয়াহীন রেন্ডারার (রেন্ডারার ক্লায়েন্ট) পরিচালনা করুন

জেটপ্যাক ওয়েবকিট ছাড়া

স্ট্যান্ডার্ড ফ্রেমওয়ার্ক পদ্ধতি ব্যবহার করে।

webView.setWebViewRenderProcessClient(myClient)

জেটপ্যাক ওয়েবকিট সহ

ক্লায়েন্ট সেট করার জন্য WebViewCompat এবং একটি বৈশিষ্ট্য পরীক্ষা ব্যবহার করে।

if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE)) {
  WebViewCompat.setWebViewRenderProcessClient(webView, myClient)
}

আরও তথ্যের জন্য, androidx.webkit রেফারেন্স ডকুমেন্টেশন দেখুন।

আপনার কোডে জেটপ্যাক ওয়েবকিট ইন্টিগ্রেট করুন

জেটপ্যাক ওয়েবকিট ব্যবহার স্ট্যান্ডার্ড ওয়েবভিউ ক্লাসের ক্ষমতা বৃদ্ধি করে, কিন্তু এটি সম্পূর্ণরূপে মূল ওয়েবভিউ ক্লাসকে প্রতিস্থাপন করে না।

আপনি android.webkit.WebView ক্লাস ব্যবহার চালিয়ে যেতে পারেন। আপনি এটি আপনার XML লেআউটে যোগ করতে পারেন এবং আপনার কোডে ইনস্ট্যান্সের একটি রেফারেন্স পেতে পারেন। স্ট্যান্ডার্ড ফ্রেমওয়ার্ক বৈশিষ্ট্যগুলি অ্যাক্সেস করতে, আপনি এখনও WebView ইনস্ট্যান্স বা এর সেটিংস অবজেক্টে সরাসরি পদ্ধতিগুলি কল করতে পারেন।

আধুনিক বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য, আপনি Jetpack Webkit দ্বারা প্রদত্ত স্ট্যাটিক সহায়ক পদ্ধতিগুলি ব্যবহার করেন, যেমন WebViewCompat এবং WebSettingsCompat । আপনি আপনার বিদ্যমান WebView ইনস্ট্যান্সটি এই পদ্ধতিগুলিতে প্রেরণ করেন।

কোটলিন

import android.webkit.WebView
import androidx.webkit.WebSettingsCompat
import androidx.webkit.WebViewFeature

// You still get your WebView instance the standard way.
val webView: WebView = findViewById(R.id.my_webview)

// To enable a modern feature, you pass that instance to a Jetpack Webkit helper.
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
    WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON)
}

জাভা

import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;

// You still get your WebView instance the standard way.
WebView webView = findViewById(R.id.my_webview);

// To enable a modern feature, you pass that instance to a Jetpack Webkit helper.
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
    WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON);
}

জেটপ্যাক ওয়েবকিট বাস্তবায়ন করুন

জেটপ্যাক ওয়েবকিট বাস্তবায়নের জন্য, নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন।

ধাপ ১: নির্ভরতা যোগ করুন

আপনার মডিউলের build.gradle.kts অথবা build.gradle ফাইলে, Jetpack Webkit যোগ করার জন্য নিম্নলিখিত নির্ভরতা অন্তর্ভুক্ত করুন:

গ্রোভি

dependencies {
    implementation "androidx.webkit:webkit:1.14.0"
}

কোটলিন

dependencies {
    implementation("androidx.webkit:webkit:1.14.0")
}

জেটপ্যাক ওয়েবকিটে পাতলা র‍্যাপার থাকে, তাই আপনার অ্যাপ্লিকেশনের আকারের উপর এর প্রভাব খুব কম।

ধাপ ২: বৈশিষ্ট্য-সনাক্তকরণ প্যাটার্ন গ্রহণ করুন

অনুপলব্ধ API ব্যবহার করার সময় ক্র্যাশ প্রতিরোধ করতে, বৈশিষ্ট্য পরীক্ষা ব্যবহার করুন। আমরা প্রতিটি API আমন্ত্রণকে একটি বৈশিষ্ট্য পরীক্ষা দিয়ে ঘিরে রাখার পরামর্শ দিচ্ছি, এবং সম্ভবত যখন API অনুপলব্ধ থাকে তখন ফলব্যাক লজিক বিবেচনা করার পরামর্শ দিচ্ছি।

একটি আধুনিক WebView API ব্যবহারের জন্য আমরা নিম্নলিখিত প্যাটার্নটি সুপারিশ করছি:

import android.webkit.WebView
import androidx.webkit.WebSettingsCompat
import androidx.webkit.WebViewFeature

// In your Kotlin code where you configure your WebView
val webView: WebView = findViewById(R.id.my_webview)

// Before you use a modern API, first check if it is supported.
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
    // If the check passes, it is safe to call the API.
    WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON)
} else {
    // Optionally, provide a fallback for older WebView versions.
}

এই প্যাটার্নটি অ্যাপ্লিকেশনটিকে শক্তিশালী করে তা নিশ্চিত করতে সাহায্য করে। যেহেতু বৈশিষ্ট্য পরীক্ষা প্রথমে চলে, তাই বৈশিষ্ট্যটি উপলব্ধ না থাকলে অ্যাপ্লিকেশনটি ক্র্যাশ হয় না। WebViewFeature#isFeatureSupported() চেকের কর্মক্ষমতা ওভারহেড নগণ্য।