2012-06-10 20 views
6

निर्यात करने के बाद काम नहीं कर रहा है मैंने एक फोनगैप ऐप बनाया है जिसे स्वयं हस्ताक्षरित SSL सेवा के साथ संवाद करने की आवश्यकता है।फोनगैप/कॉर्डोवा श्वेतसूची वाले क्रॉस डोमेन एसएसएल अनुरोध एपीके

मैं बहुत की तरह/xml/cordova.xml रेस में मेरी यूआरएल श्वेत सूची में:

<access origin="https://www.mydomain.com" subdomains="true" />

और इस ठीक काम करता है जब मैं चलाने के लिए और ग्रहण से निर्माण, लेकिन मैं तो निर्यात और मेरे ऐप पर हस्ताक्षर और मैन्युअल रूप से अगर एपीके इंस्टॉल करें तो ऐप मेरी वेब सेवा के साथ संवाद करने में असमर्थ है।

सर्वर के साथ संचार तो जैसे Sencha टच लाइब्रेरी का उपयोग किया जाता है:

Ext.Ajax.request({ 
     url: 'https://www.mydomain.com', 
     method: 'get',   
     success: function(result) {     
     }, 
     failure: function(result) {   
     }   
    }); 

किसी भी मदद की बहुत सराहना

उत्तर

10

समस्या आप स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहे है। एंड्रॉइड वेब व्यू डिफ़ॉल्ट स्व-हस्ताक्षरित एसएसएल कर्ट द्वारा अनुमति नहीं देता है। PhoneGap/Cordova overrides this in the CordovaWebViewClient class लेकिन इसके व्यवहार को बहुत ज्यादा विचलित नहीं करता है; यदि ऐप डीबग-हस्ताक्षरित है, तो यह proceed होगा और त्रुटि को अनदेखा करेगा, अन्यथा यह असफल हो जाएगा।

आप अपने आवेदन में उपरोक्त से जुड़े कोड को बदल सकते हैं और onReceivedSslError विधि हमेशा handler.proceed() पर कॉल करें - लेकिन इसकी अनुशंसा नहीं की जाती है। एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग न करें!

+0

हाँ मैं एक हस्ताक्षरित एसएसएल प्रमाणपत्र मिला है और यह ठीक काम किया। आपकी सहायता के लिए धन्यवाद. –

+0

@DeanWild मुझे भी वही समस्या है, क्या आप अपने एपीआई प्रदाता/सर्वर से एसएसएल प्रमाण पत्र पूछते हैं और अपने एपीके पर हस्ताक्षर करने के लिए इसका इस्तेमाल करते हैं? – JunM

+0

कोई प्रदाता से कोई SSL प्रमाणपत्र नहीं खरीदता है (कई प्रदाता हैं, उदाहरण के लिए: http://www.verisign.com/) तो आप अपने वेब सर्वर –

3

मैंने प्रतिबंध के आसपास पाने के लिए निम्नलिखित किया (वर्तमान में कॉर्डोवा 1.7.0 का उपयोग कर)। यह निश्चित रूप से स्वाभाविक असुरक्षित है:

public class MyWebViewClient extends CordovaWebViewClient { 

    public MyWebViewClient(DroidGap ctx) { 
     super(ctx); 
    } 

    @Override 
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
     // testing against getPrimaryError() or hasErrors() will fail on Honeycomb or older. 
     // You might check for something different, such as specific info in the certificate, 
     //if (error.getPrimaryError() == SslError.SSL_IDMISMATCH) { 
      handler.proceed(); 
     //} else { 
     // super.onReceivedSslError(view, handler, error); 
     //} 
    } 
} 

और फिर मुख्य गतिविधि में:

@Override 
public void init() { 
    super.init(); 

    //pass in our webviewclient to override SSL error 
    this.setWebViewClient(this.appView, new MyWebViewClient(this)); 
}