অ্যান্ড্রয়েড ওয়েবভিউ এইচটিটিপিএস URL টি লোড করছে না not


91
public void onCreate(Bundle savedInstance)
{       
    super.onCreate(savedInstance);
    setContentView(R.layout.show_voucher);
    webView=(WebView)findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    String url ="https://www.paymeon.com/Vouchers/?v=%C80%8D%B1x%D9%CFqh%FA%84%C35%0A%1F%CE&iv=%25%EE%BEi%F4%DAT%E1"
    //webView.loadUrl(url); // Not Working... Showing blank
    webView.loadUrl("http://www.yahoo.com"); // its working    
}

আমি যখন ওয়েববিউতে কোনও ইউআরএল লোড করার চেষ্টা করি তখন এটি কেবল একটি ফাঁকা স্ক্রিন দেখায়। আমি যদি গুগল.কম বা ইয়াহু ডট কম লোড করি তবে এটি ঠিকঠাক কাজ করছে।


4
এটি কাজ করছে আমি এখন যাচাই করেছি। এর পরে কাজ না করা হলে আবার চেক করুন আপনার কোড ওয়েবউইভ.সেটসেটেটিংস () এর সাথে এটি যুক্ত করুন set setUse widesViewPort (সত্য); ওয়েবভিউ.জেটসেটেটিংস ()। setLoadWithOverviewMode (সত্য);
ইলেঙ্গো জে

উত্তর:


156

দয়া করে এই লিঙ্কটি দেখুন:

আপনার ওয়েবভিউক্লিয়েন্ট বাস্তবায়নে এই ওভাররাইডিং পদ্ধতিটি যুক্ত করুন। আপনার এটিকে অ্যান্ড্রয়েড এসডিকে ২.২ (এপিআই স্তর 8) বা তার পরে সংকলন করতে হবে। পদ্ধতিটি জনসাধারণের এসডিকে ২.২ (এপিআই স্তর 8) হিসাবে উপস্থিত হয় তবে আমরা এটি 2.1, 1.6 এবং 1.5 চালিত ডিভাইসগুলিতে পরীক্ষা করেছি এবং এটি সেই ডিভাইসগুলিতেও কাজ করে (স্পষ্টতই আচরণটি সেখানে পাশাপাশি রয়েছে)।

 @Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // Ignore SSL certificate errors
}

এটি আপনাকে সাহায্য করবে।


4
আলোচনায় শেষ এন্ট্রি দুর্দান্ত কাজ করেছে। অনেক ধন্যবাদ.
বিল লাহটি

55
সুরক্ষা সতর্কতা : নোট করুন যে এটি করার ফলে এসএসএলকে প্রথম স্থানে রাখার উদ্দেশ্য সম্পূর্ণরূপে পরাস্ত হয়।

8
দয়া করে এটি করবেন না। এটি অনিরাপদ এবং প্লে স্টোরে অনুমোদিত নয়।
এন্টিমোনি

34
গুগল এখন উপরের সমাধানটি যে কেউ প্রয়োগ করে তাদের ইমেল প্রেরণ করছে:Your app(s) listed at the end of this email have an unsafe implementation of the WebViewClient.onReceivedSslError handler. Specifically, the implementation ignores all SSL certificate validation errors, making your app vulnerable to man-in-the-middle attacks. Apps with vulnerabilities that expose users to risk of compromise may be considered Dangerous Products in violation of the Content Policy and section 4.4 of the Developer Distribution Agreement.
গুস্তাভো

4
গুগল সুরক্ষা সতর্কতা কীভাবে সমাধান করতে হয় যে কেউ জানেন, হ্যাঁ দয়া করে আমাকে জানান কারণ আমিও এই সমস্যার মুখোমুখি হয়েছি।
প্রতীক ট্যাঙ্ক

49

দূর থেকে সঠিক উত্তর প্রতি, নীচে একটি ছোট কোড নমুনা সাহায্য করতে পারে যা।

প্রথমে, এমন একটি শ্রেণী তৈরি করুন যা ওয়েবভিউক্লিয়েন্টকে প্রসারিত করে এবং এসএসএল ত্রুটি উপেক্ষা করতে সেট করা:

// SSL Error Tolerant Web View Client
private class SSLTolerentWebViewClient extends WebViewClient {

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed(); // Ignore SSL certificate errors
            }

}

তারপরে আপনার ওয়েব ভিউ অবজেক্টের (অনক্রিয়েট () পদ্ধতিতে সূচনা) দিয়ে এর ওয়েব ভিউ ক্লায়েন্টকে ওভাররাইড শ্রেণীর উদাহরণ হিসাবে সেট করুন:

 mWebView.setWebViewClient(
                new SSLTolerentWebViewClient()
        );

4
এটি গুগল সুরক্ষা সতর্কতা দেয়: ওয়েবভিউক্লিয়েন্ট.অনর রিসিপডস্লাইরার হ্যান্ডলারের অনিরাপদ বাস্তবায়ন। আপনি কি এটি সমাধান করতে জানেন?
প্রতীক ট্যাঙ্ক

4
গুগল প্লে স্টোরটিতে অ্যাপটিকে আনসাইফ হিসাবে চিহ্নিত করেছে কীভাবে এটি এসএসএল ছাড়া করতে পারে?
অজয় পান্ড্য

সুপার পদ্ধতিটি ব্যবহার করবেন না super
অতুল ভরদ্বাজ

41

এসএসএল শংসাপত্রের বৈধতা সঠিকভাবে পরিচালনা করতে এবং নতুন সুরক্ষা নীতি অনুসারে গুগলের কাছ থেকে আবেদন প্রত্যাখ্যান এড়াতে, সার্ভারের দ্বারা উপস্থাপিত শংসাপত্রটি যখন আপনার প্রত্যাশা পূরণ করে তখনই কোডটি পরিবর্তন করুন এবং SslErrorHandler.cancel () কে অনুরোধ করুন।

উদাহরণস্বরূপ, আমি ব্যবহারকারীকে নিশ্চিত করার জন্য একটি সতর্কতা ডায়ালগ যুক্ত করেছি এবং মনে হয় গুগল আর সতর্কতা দেখায় না।

    @Override
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    String message = "SSL Certificate error.";
        switch (error.getPrimaryError()) {
            case SslError.SSL_UNTRUSTED:
                message = "The certificate authority is not trusted.";
                break;
            case SslError.SSL_EXPIRED:
                message = "The certificate has expired.";
                break;
            case SslError.SSL_IDMISMATCH:
                message = "The certificate Hostname mismatch.";
                break;
            case SslError.SSL_NOTYETVALID:
                message = "The certificate is not yet valid.";
                break;
        }
        message += " Do you want to continue anyway?";

        builder.setTitle("SSL Certificate Error");
        builder.setMessage(message);
    builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        }
    });
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();
}

এই পরিবর্তনের পরে এটি সতর্কতা প্রদর্শন করবে না।


আমি যদি বাস্তবায়ন থেকে অনভিজ্ঞস্লস এরর ব্লকটি অপসারণ করি তবে কী হবে?
বিবেক সিনহা

4
@ বিবেক সিংহ এটি হ্যান্ডলার.ক্যান্সেল () কল করবে; গতানুগতিক.
অনন্ত শাহ

4
কিন্তু গুগল এখনও আমার অ্যাপটিকে একই কারণে বলে প্রত্যাখ্যান করেছে। কেন?
বিবেক সিনহা

@ বিবেক সিংহ প্লে স্টোরটিতে অ্যাপ্লিকেশন লঞ্চ সম্পর্কিত কোনও সমাধান খুঁজে পেয়েছেন?
কেশা

4
প্রস্তাবিত হিসাবে আমি রিসিটেডস্লায়ারার কলব্যাকটি প্রয়োগ করেছি। অ্যাপ্লিকেশন পরে সফলভাবে প্রকাশিত হয়েছিল।
বিবেক সিনহা

11

এটি কাজ করবে নীচের কোডটি সরান

 super.onReceivedSslError(view, handler, error);

দুর্দান্ত, এটি আমার পক্ষে কাজ করেছিল। এটি কীভাবে কাজ করেছে তা দয়া করে ব্যাখ্যা করতে পারেন?
আর্থ তিলভা

4
গুগল ডকস থেকে @ আর্থিলভা: "ডিফল্ট আচরণ হ'ল লোড বাতিল করা"। সুপারকে কল করে আপনি বাকী পদ্ধতিতে পৌঁছানোর আগে সেই ডিফল্ট আচরণকে কল করছেন। বিকাশকারী.অ্যান্ড্রয়েড.
জোশ Laird

11

ওভাররাইডআরসিটেডস্লাইরর এবং সরান

সুপার.অনরসিডস্লাইরার (দেখুন, হ্যান্ডলার, ত্রুটি)

এবং গুগল সুরক্ষা সমাধান করতে:

setDomStorageEnabled (সত্য);

সম্পূর্ণ কোডটি হ'ল:

webView.enableJavaScript();
webView.getSettings().setDomStorageEnabled(true); // Add this
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            // DO NOT CALL SUPER METHOD
            super.onReceivedSslError(view, handler, error);
        }
    });

আপনাকে অনেক ধন্যবাদ। সুপার.অনরসিটেডস্লিয়ারার (ভিউ, হ্যান্ডলার, ত্রুটি) সরানো আমার পক্ষে কাজ করেছে।
দিশিশ শর্মি

7

আপনার কোড লাইন ব্রোটি অনুলিপি করুন এবং আটকান, এটি আমার উপর নির্ভর করবে :) আমি ভাবছি, আপনি একটি এসএসএল ত্রুটি পেয়েছেন। যদি আপনি ওভাররাইড অনগ্রাহ্য এসএসএলরার পদ্ধতি ব্যবহার করেন এবং এটি সুপার পদ্ধতিটি সুপার মুছে ফেলেন। শুধু হ্যান্ডেল.প্রসাইড লিখুন (), ত্রুটি সমাধান হবে।

    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {

            activity.setTitle("Loading...");
            activity.setProgress(progress * 100);

            if (progress == 100)
                activity.setTitle(getResources().getString(R.string.app_name));
        }
    });

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Log.d("Failure Url :" , failingUrl);
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            Log.d("Ssl Error:",handler.toString() + "error:" +  error);
            handler.proceed();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.loadUrl(Constant.VIRTUALPOS_URL + "token=" + Preference.getInstance(getContext()).getToken() + "&dealer=" + Preference.getInstance(getContext()).getDealerCode());

ধন্যবাদ onReceivedSslErrorআমার দিন বাঁচাতে হ্যান্ডেল প্রসেস () কে কল করুন
ট্যাম হুইন

4
আপনি যদি এটি করেন (এখন জুলাই 2019) গুগল প্লে আপনার আবেদন প্রত্যাখ্যান করবে।
আল্প আল্টুনেল

Play গুগল প্লেতে অনেক বেশি অ্যাপ্লিকেশন রয়েছে, কোনও অ্যাপ্লিকেশন এখনও প্রত্যাখ্যান করতে পারে না।
ওজনুরকান


6

ওয়েবভিউক্লিয়েন্ট শ্রেণি থেকে প্রাপ্ত ইউএসএল url- র পদ্ধতিটি রিসিপডস্লিজার () এ পরিচালনা করতে এটি একটি উদাহরণ:

 webview.setWebViewClient(new WebViewClient() {
              ...
              ...
              ...

            @Override
            public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
                String message = "SSL Certificate error.";
                switch (error.getPrimaryError()) {
                    case SslError.SSL_UNTRUSTED:
                        message = "The certificate authority is not trusted.";
                        break;
                    case SslError.SSL_EXPIRED:
                        message = "The certificate has expired.";
                        break;
                    case SslError.SSL_IDMISMATCH:
                        message = "The certificate Hostname mismatch.";
                        break;
                    case SslError.SSL_NOTYETVALID:
                        message = "The certificate is not yet valid.";
                        break;
                }
                message += "\"SSL Certificate Error\" Do you want to continue anyway?.. YES";

                handler.proceed();
            }

        });

আপনি এখানে আমার সম্পূর্ণ উদাহরণ পরীক্ষা করতে পারেন: https://github.com/Jorgesys/Android-WebView- লগিং

এখানে চিত্র বর্ণনা লিখুন


6

গুগল সুরক্ষা সমাধান করতে, এটি করুন:

শীর্ষে লাইনগুলি:

import android.webkit.SslErrorHandler;
import android.net.http.SslError;

কোড:

class SSLTolerentWebViewClient extends WebViewClient {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        if (error.toString() == "piglet")
            handler.cancel();
        else
            handler.proceed(); // Ignore SSL certificate errors
    }
}

4
আমি অ্যান্ড্রয়েডে নতুন। আমি এটা কোথায় রাখা উচিত? :)
গেদিমিনাস

5

আমি উপরের উত্তরগুলি অনুসরণ করেছিলাম তবে এখনও মনে হচ্ছে কোডের নীচে আমার পক্ষে কাজ করা হবে না যা সাধারণত https অনুরোধগুলির অর্থ প্রদানের প্রবেশদ্বারকে সংহত করার সময় আমার পক্ষে একটি কৌশল করেছিল:

public class MainActivity extends Activity {

    WebView webView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView1);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        webView.setWebViewClient(new MyWebViewClient());
        String postData = "amount=1000&firstname=mtetno&email=mttee@gmail.com&phone=2145635784&productinfo=android&surl=success.php"
                + "&furl=failure.php&lastname=qwerty&curl=dsdsd.com&address1=dsdsds&address2=dfdfd&city=dsdsds&state=dfdfdfd&"
                + "country=fdfdf&zipcode=123456&udf1=dsdsds&udf2=fsdfdsf&udf3=jhghjg&udf4=fdfd&udf5=fdfdf&pg=dfdf";
        webView.postUrl(
                "http://host/payment.php",
                EncodingUtils.getBytes(postData, "BASE64"));

    }

    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            webView.loadUrl(url);
            return true;
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                SslError error) {
            handler.proceed();
        }
    }
}

উপরে কোড ওয়েব ভিউতে একটি পোস্ট অনুরোধ করছে এবং পেমেন্ট গেটওয়েতে পুনঃনির্দেশ করছে।

সেটিং settings.setDomStorageEnabled(true);আমার জন্য একটি কৌশল করেছিল আশা করি এটি সাহায্য করবে।


4
এই সমাধানটি পুরোপুরি শংসাপত্রের বৈধতা অক্ষম করে, আপনাকে মধ্য-মধ্যের আক্রমণগুলির জন্য উন্মুক্ত করে। এটি এমন কিছু যা আপনার কখনই করা উচিত নয়, পেমেন্ট গেটওয়েগুলির জন্য বিশেষত।
দিরবাইও

আমার জন্য প্রাথমিকভাবে ওয়েবভিউ সামগ্রীটি লোড করছে না, কেবল পৃষ্ঠার ব্যাকগ্রাউন্ড চিত্র। আমি এটি যুক্ত করার পরে webview.getSettings.setDomStorageEnabled(true);এটি যাদুকরভাবে কাজ করেছে। হয়তো ওয়েবপৃষ্ঠাটি কোনও প্রকারের এইচটিএমএল 5 এপিআই ব্যবহার করছে, তাই ডমস্টোরেজ সক্ষম করে আমার পক্ষে কাজ করেছে।
ইশান্ত সাগর 16

হ্যান্ডেল.প্রসেস () এসএসএলকে বাইজ করেন
জন রুবান সিং 21

এনকোডিংগটিল.জেটবাইট কী
আকাশ কুমার

2

প্রস্তাবিত পদ্ধতির হবে

1. সুপার পদ্ধতিতে কল করবেন না (ওভাররাইড পদ্ধতি থেকে সুপার কল সরিয়ে ফেলুন)

২. গুগল কোনও ত্রুটি এলে SslErrorHandler.cancel () পদ্ধতিতে কল করার পরামর্শ দেয়

৩. এসএসএল ত্রুটিগুলি প্রকাশ করতে ডায়লগটি প্রম্পট করবেন না

সেরা সমাধান কি ?? এই ওভাররাইড পদ্ধতিটি সরান

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) {

}

আপনি কি সমাধান চাইছেন বা একটি পরামর্শ দিচ্ছেন?
ধর্মমান

আমি এই পদ্ধতির পরামর্শ দিচ্ছি
জন রুবান সিং

@ জনরুবানসিংহ হাই জন, আমি সম্পদ থেকে একটি জেএস ফাইল লোড করছি এবং অনপেজের সাথে একবার ফাইল লোড করেছি জিন্সের অভ্যন্তরে কোনও ফাংশন বলছি। সুতরাং, ওভাররাইডিংআরসিটেডস্লাইরার () আমি ওয়েবভিউ.সেট ওয়েবভিউক্লিয়েন্ট (নতুন ....) ব্যবহার করায় প্রয়োজনীয়?
শিবম শর্মা

এই কোডটি আমার APK টি প্রত্যাখ্যান করে 9 মাসের পর থেকে এই কোডটি প্রত্যাখ্যানের কারণ নয় তবে হঠাৎ এখনই প্রত্যাখ্যান r8 এর মুখোমুখি। স্যুইচ (ত্রুটি। বিরতি; কেস SslError.SSL_EXPIRED: কেস SslError.SSL_IDMISMATCH: কেস SslError.SSL_NOTYETVALID: কেস SslError.SSL_DATE_INVALID: কেস SslError.SSL_INVALID: ডিফল্ট: হ্যান্ডলার। বিরতি; }
শিবম শর্মা

@ জনরুবানসিংহ দয়া করে আমাকে সহায়তা করুন। আমরা শিথিল যোগদান করতে পারেন।
শিবম শর্মা

0

এগুলি দুটি বৈশিষ্ট্য নির্ধারণ করা আমার পক্ষে এটি কার্যকর করার জন্য যথেষ্ট ছিল এবং সুরক্ষার সমস্যাগুলিকে প্রকাশ করে না:

 WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setDomStorageEnabled(true);

0

আপনার জাভা কোডে এই লাইন ওয়েবভিউ.জেটসেটিংস () সেটডমস্টোরেজইনেবল (সত্য) ব্যবহার করুন

WebView webView = (WebView) findViewById(R.id.webview);    
webView.getSettings().setDomStorageEnabled(true);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl(yourUrl);

0

আপনি যদি গুগল প্লে স্টোরের বাইরে APK ব্যবহার করতে চান, উদাহরণস্বরূপ, নীচের মতো একটি সমাধান সম্ভবত কাজ করবে:

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        /*...*/
        handler.proceed();
    }

আপনি যদি সুরক্ষার অতিরিক্ত alচ্ছিক স্তর যুক্ত করতে চান তবে আপনি শংসাপত্রের পিনিং ব্যবহার করার চেষ্টা করতে পারেন । আইএমএইচও এটি ব্যক্তিগত বা অভ্যন্তরীণ ব্যবহারের জন্য শক্ত নয়।

আপনি যদি গুগল প্লে স্টোরটিতে অ্যাপটি প্রকাশের পরিকল্পনা করেন তবে আপনার @ ওভাররাইড অন রেকটেডস্লাইরার (...) avoid ... avoid এড়ানো উচিত } বিশেষত হ্যান্ডেল.প্রসেস () ব্যবহার করা। গুগল এই কোড স্নিপেট খুঁজে পাবে এবং নিশ্চিতভাবে আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে যেহেতু হ্যান্ডেল.প্রসাইড () সহ সমাধানটি সমস্ত ধরণের অন্তর্নির্মিত সুরক্ষা ব্যবস্থা দমন করবে

এবং কেবল ব্রাউজারগুলি আপনার https সংযোগ সম্পর্কে অভিযোগ করে না বলেই এর অর্থ এই নয় যে এসএসএল শংসাপত্রটি নিজেই আদৌ বিশ্বাসযোগ্য!

আমার ক্ষেত্রে, এসএসএল শংসাপত্রের চেইনটি ভেঙে গেছে। আপনি এসএসএল পরীক্ষক বা এসএসএল ল্যাবগুলির সাথে আরও মধ্যবর্তীগুলির সাথে এ জাতীয় সমস্যাগুলি দ্রুত পরীক্ষা করতে পারেন । তবে দয়া করে আমাকে জিজ্ঞাসা করবেন না কীভাবে এটি ঘটতে পারে। আমার একেবারে কোনও ক্লু নেই।

যাইহোক, এসএসএল শংসাপত্র পুনরায় ইনস্টল করার পরে, " ওয়েবভিউতে অবিশ্বস্ত এসএসএল শংসাপত্র যাই হোক না কেন" সম্পর্কিত সমস্ত ত্রুটি অবশেষে অদৃশ্য হয়ে গেল। আমি অনারেক্টেডস্লিয়ারার (...) এর জন্য @ ওভাররাইডও সরিয়েছি এবং হ্যান্ডেলআরপ্রসাইড () থেকে মুক্তি পেয়েছি , এবং é ভয়েলা আমার অ্যাপ্লিকেশনটি গুগল প্লে স্টোর দ্বারা প্রত্যাখ্যান করা হয়নি (আবার)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.