প্রকল্প সম্পর্কে

JsBridge হল একটি Android WebView এবং JavaScript-এর মধ্যে দ্বিমুখী যোগাযোগের জন্য একটি ব্রিজ লাইব্রেরি, যা WeChat-এর WebView JsBridge বাস্তবায়ন থেকে অনুপ্রাণিত। এটি নিরাপদ এবং নির্ভরযোগ্য বার্তা প্রেরণ ব্যবস্থা প্রদান করে, যা Java থেকে JavaScript এবং JavaScript থেকে Java উভয় দিকেই কল সমর্থন করে। ## প্রধান বৈশিষ্ট্য - **দ্বিমুখী যোগাযোগ**: Java এবং JavaScript-এর মধ্যে দ্বিমুখী কল সমর্থন করে, সাথে কলব্যাক ব্যবস্থা। - **একাধিক যোগাযোগ চ্যানেল**: URL Scheme ইন্টারসেপশন, @JavascriptInterface, evaluateJavascript() এবং loadUrl("javascript:") এই চারটি চ্যানেল সমর্থন করে, যা বিভিন্ন Android সংস্করণের সাথে সামঞ্জস্যপূর্ণ। - **স্থায়ী কলব্যাক**: একাধিক প্রতিক্রিয়ার কলব্যাক সমর্থন করে, যা রিয়েল-টাইম আপডেট, ইভেন্ট স্ট্রিম ইত্যাদি ক্ষেত্রে উপযোগী। - **ডোমেইন হোয়াইটলিস্ট**: কোন ডোমেইন নেটিভ পদ্ধতি কল করতে পারবে তা সীমিত করা যায়, যা নিরাপত্তা বাড়ায়। - **বার্তা কিউ**: JS ইনজেকশন সম্পূর্ণ হওয়ার আগে পাঠানো বার্তাগুলি স্বয়ংক্রিয়ভাবে কিউতে জমা হয়, এবং ইনজেকশন সম্পূর্ণ হলে একসাথে বিতরণ করা হয়, যাতে বার্তা হারানো না যায়। - **কাস্টম WebView ইন্টিগ্রেশন**: BridgeHelper-এর মাধ্যমে সহজেই কাস্টম WebView-তে সংহত করা যায়। ## ইনস্টলেশন JitPack রিপোজিটরি থেকে নির্ভরতা যোগ করুন: ```groovy repositories { maven { url "https://jitpack.io" } } dependencies { implementation 'com.github.happydog-intj:JsBridge:v2.1.0' } ``` ## দ্রুত শুরু ### BridgeWebView ব্যবহার লেআউটে BridgeWebView যোগ করুন এবং Activity-তে ইনিশিয়ালাইজ করুন: ```java BridgeWebView webView = findViewById(R.id.webView); webView.setGson(new Gson()); webView.addJavascriptInterface( new MainJavascriptInterface( webView.getCallbacks(), webView.getPersistentCallbacks(), webView), "WebViewJavascriptBridge"); webView.loadUrl("file:///android_asset/demo.html"); ``` ### Java থেকে JavaScript কল JS-এ handler নিবন্ধন করুন, তারপর Java থেকে কল করুন: ```javascript WebViewJavascriptBridge.registerHandler("functionInJs", function(data, responseCallback) { document.getElementById("show").innerHTML = "data from Java: = " + data; responseCallback("Javascript Says Right back aka!"); }); ``` ```java webView.callHandler("functionInJs", new Gson().toJson(user), new OnBridgeCallback() { @Override public void onCallBack(String data) { Log.d(TAG, "response from JS: " + data); } }); ``` ### JavaScript থেকে Java কল @JavascriptInterface ক্লাস তৈরি করুন, JS-এ থেকে কল করা যাবে: ```java public class MainJavascriptInterface extends BridgeWebView.BaseJavascriptInterface { @JavascriptInterface public void submitFromWeb(String data, String callbackId) { Log.d("JSInterface", "data from web: " + data); mWebView.responseFromWeb("response from Java", callbackId); } } ``` ```javascript WebViewJavascriptBridge.callHandler( 'submitFromWeb', {'param': 'value'}, function(responseData) { document.getElementById("show").innerHTML = "response: " + responseData; } ); ``` ### স্থায়ী কলব্যাক ডিফল্ট কলব্যাক প্রথম কলের পরে স্বয়ংক্রিয়ভাবে মুছে যায়। একাধিক প্রতিক্রিয়ার জন্য `callHandlerPersistent()` ব্যবহার করুন: ```java webView.callHandlerPersistent("functionInJs", data, new OnBridgeCallback() { @Override public void onCallBack(String data) { Log.d(TAG, "called again: " + data); } }); ``` ### ডোমেইন হোয়াইটলিস্ট কোন ডোমেইন নেটিভ পদ্ধতি কল করতে পারবে তা সীমিত করুন: ```java webView.addAllowedHost("example.com"); webView.addAllowedHost("*.example.com"); ``` হোয়াইটলিস্ট খালি থাকলে (ডিফল্ট), সব ডোমেইন অনুমোদিত। ## কাস্টম WebView ইন্টিগ্রেশন BridgeHelper-এর মাধ্যমে কাস্টম WebView-তে সংহত করা যায়: ```java public class CustomWebView extends WebView implements WebViewJavascriptBridge, IWebView { private BridgeHelper bridgeHelper; private void init() { getSettings().setJavaScriptEnabled(true); bridgeHelper = new BridgeHelper(this); setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { bridgeHelper.onPageStarted(); } @Override public void onPageFinished(WebView view, String url) { bridgeHelper.onPageFinished(); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return bridgeHelper.shouldOverrideUrlLoading(url); } }); } } ``` ## সামঞ্জস্যতা - **Android 11+ (API 30+)** : অভিযোজিত, ডিফল্টভাবে ফাইল অ্যাক্সেস অনুমতি বন্ধ, ক্যাশে নীতি হোস্ট অ্যাপ দ্বারা নির্ধারিত। - **HarmonyOS** : কমিউনিটি পোর্টেড সংস্করণ `@alvin917/jsbridge` প্রদান করে। - **এমবেডেড ডিভাইস** : WebView তৈরি ক্র্যাশ হলে, ডিভাইসের WebView প্রদানকারী পরীক্ষা করুন। ## লাইসেন্স MIT লাইসেন্স।