Android e PhoneGap: richieste AJAX su https con certificati self signed



A quanto pare, su android si verifica lo stesso problema riscontrato su iOS, che non permette le richieste ajax su https con certificati self signed.


La soluzione su android è un po' più macchinosa di quella su iOs ma ugualmente risolutiva.




Per prima cosa, realizzare una nuova classe:


import org.apache.cordova.CordovaWebViewClient;
import org.apache.cordova.DroidGap;

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

public class SSLAcceptingWebViewClient extends CordovaWebViewClient {
public SSLAcceptingWebViewClient(DroidGap ctx) {
super(ctx);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}

}
che estende la classe CordovaWebViewClient e riscrive il metodo onReceivedSslError, forzando l'esecuzione della richiesta con handler.proceed()

In seguito, modificare in questo modo la main activity:

public class MyActivity extends DroidGap {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init();

CordovaWebViewClient webViewClient = new SSLAcceptingWebViewClient(this);
webViewClient.setWebView(this.appView);
this.appView.setWebViewClient(webViewClient);

super.loadUrl(Config.getStartUrl());
}
}

Published: April 28 2013

  • category: