2013-04-26 11 views
6

मैंने manyquestions देखा है जो पूछताछ (और उत्तर) पूछताछ कैसे करें जब आप पहले से जानते हैं कि अनुरोध की आवश्यकता है।मैं UIWebView से प्रमाणीकरण चुनौती का पता कैसे लगा सकता हूं?

जब मैं एक साइट है कि एक प्रमाणीकरण चुनौती का अनुरोध करता है लोड, (HTTP 401 के साथ प्रतिक्रिया), मेरे UIWebViewDelegate केवल निम्न कॉलबैक प्राप्त करता है: webView:shouldStartLoadWithRequest:navigationType: और कभी कभी webViewDidStartLoad: (webViewDidStartLoad: अगर मैं साइट पर सीधे नेविगेट कहा जाता प्रतीत हो रहा है, और यह ऐसा लगता है कि अगर मुझे वहां रीडायरेक्ट किया गया है तो नहीं कहा जाता है)।

-[NSObject respondsToSelector:] अधिभावी रखकर UIWebViewDelegateuiWebView:resource:canAuthenticateAgainstProtectionSpace:forDataSource: और uiWebView:resource:didReceiveAuthenticationChallenge:fromDataSource: करने के लिए कुछ कॉल है, जो उपयोगी हो सकता है प्राप्त करता है, लेकिन निश्चित रूप से उन निजी एपीआई कर रहे हैं और शायद मेरे ऐप को अस्वीकार कर दिया जाएगा।

मैंने एम्बेडेड UIWebView एस के साथ कुछ अलग मुख्यधारा के ऐप्स का परीक्षण किया है। अभी तक, केवल क्रोम इन प्रमाणीकरण चुनौतियों को ठीक से संभालता है। मैंने अपना स्वयं का सर्वर भी स्थापित किया है और यह सत्यापित किया है कि क्रोम केवल POST एस एक बार है। ट्विटर और Tweetbot बस मेरे जैसे लोडिंग स्क्रीन को हमेशा के लिए दिखाएं।

क्या दूसरी सट्टा NSURLConnection का उपयोग करने के अलावा इन प्रमाणीकरण चुनौतियों का पता लगाने के लिए कोई और (शायद बहुत हैकी) तरीका है? यदि मैं POST अनुरोध करता हूं, तो यह खराब होगा- POST सब कुछ खराब है।

I've added a radar to request an enhancement to UIWebView for this। कृपया इसे डुप्लिकेट करें।

+0

रडार अनुरोध करने के लिए धन्यवाद - मैंने इसे धोखा दिया है! –

उत्तर

6

Apple now has sample code that solves this problem। यह NSRLProtocol को ठीक से कार्यान्वित करने के तरीके के बारे में सबसे पूर्ण दस्तावेज़ीकरण की तरह दिखता है।

+0

देखें मुझे इस नमूना कोड के साथ समस्याएं आ रही हैं। मेरे NSURLConnections में से एक कॉलबैक प्राप्त करना बंद कर देता है। हालांकि, यह अभी भी वहां का सबसे अच्छा विकल्प प्रतीत होता है। मैंने डीटीएस के साथ एक टीएसआई दायर की है, और उम्मीद है कि ऐप्पल मेरी समस्या को हल करने में मेरी मदद कर सकता है। –

+1

मेरी समस्या इसलिए हुई क्योंकि मेरे पास एक और 'NSURLProtocol' था जिसका उपयोग' NSURLConnection' था, जो 'UIWebView' कॉल को रोक रहा था। ऐप्पल डीटीएस से बात करने के बाद, ऐसा लगता है कि आप 'UIURLConnection'- आधारित' NSURLProtocol '' UIWebView' के साथ उपयोग नहीं कर सकते हैं। ऐप्पल का नमूना कोड 'NSURLSession' का उपयोग करता है, इसलिए यह ठीक है। –

3

आप अपने अनुरोधों को अपने NSURLConnection में लोड कर सकते हैं, फिर डेटा को वेबदृश्य में स्ट्रिंग के रूप में फ़ीड करें। यह आपको अपनी सभी महिमा में कनेक्शन को अवरुद्ध करने की अनुमति देगा और फिर भी मूल UIWebView प्रतिपादन प्राप्त करेगा। मुझे यकीन नहीं है कि यह वेब दृश्य में डेटा स्ट्रीमिंग के साथ अच्छी तरह से काम करेगा, लेकिन उम्मीद है कि हम यहां बहुत अधिक डेटा के बारे में बात नहीं कर रहे हैं।

+0

धन्यवाद। मैं यही कर रहा हूं। –

+0

मुझे यहां या ट्विटर पर सुनने में दिलचस्पी होगी, यह कैसे काम करता है, खासकर यदि आप एचटीएमएल स्ट्रिंग को बढ़ाने की कोशिश करते हैं। –

+0

मैं वृद्धिशील लोडिंग करने की योजना नहीं बना रहा हूं। एक बार जब मैं इसे प्राप्त करूँगा तो मैं इस बारे में ब्लॉग करने की कोशिश करूंगा। –

संबंधित मुद्दे