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
}
WebBViewでURLをロードしようとすると、空白の画面しか表示されません。 Google.comまたはyahoo.comを読み込むと、正常に機能します。
このオーバーライドメソッドをWebViewClient実装に追加します。 Android SDK 2.2(APIレベル8)以降でコンパイルする必要があります。このメソッドは、2.2(APIレベル8)の時点でパブリックSDKに表示されますが、2.1、1.6、および1.5を実行するデバイスでテストし、それらのデバイスでも動作します(したがって、明らかに動作はずっと続いています)。
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
これはあなたを助けます。
Fargthによる正解ごとに、以下が役立つ可能性のある小さなコードサンプルです。
最初に、WebViewClientを拡張し、SSLエラーを無視するように設定されたクラスを作成します。
// 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
}
}
次に、Webビューオブジェクト(OnCreate()メソッドで開始)を使用して、Webビュークライアントをオーバーライドクラスのインスタンスに設定します。
mWebView.setWebViewClient(
new SSLTolerentWebViewClient()
);
SSL証明書の検証を適切に処理し、新しいセキュリティポリシーに従ってGoogleからのアプリケーションの拒否を回避するには、サーバーから提示された証明書が期待どおりの場合は必ずSslErrorHandler.proceed()を呼び出し、そうでない場合はSslErrorHandler.cancel()を呼び出します。
たとえば、ユーザーに確認を促すアラートダイアログを追加すると、Googleは警告を表示しなくなります。
@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();
}
この変更後、警告は表示されません。
動作する以下のコードを削除します
super.onReceivedSslError(view, handler, error);
onReceivedSslErrorをオーバーライドして削除します
super.onReceivedSslError(view、handler、error)
Googleのセキュリティを解決するには:
setDomStorageEnabled(true);
完全なコードは次のとおりです。
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);
}
});
SSL URLを処理するには、WebViewClientクラスのメソッド onReceivedSslError() を使用します。これは例です。
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-Logging
Googleのセキュリティを解決するには、次を実行します。
上の行:
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
}
}
私は上記の回答に従いましたが、通常は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 protected]&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();
}
}
}
上記のコードは、webviewで送信リクエストを実行し、支払いゲートウェイにリダイレクトしています。
settings.setDomStorageEnabled(true);
を設定すると、私にとってはうまくいきました。
あなたのコード行仲間をコピーして貼り付けてください、それは私を信頼して動作します:)私は考えています、あなたはsslエラーを取得します。 onReceivedSslErrorメソッドをオーバーライドしてsuperメソッドを削除すると、superメソッドになります。 handler.proceed()を書くだけで、エラーは解決します。
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());