उन सभी डोमेन के लिए साझा क्रेडेंशियल स्टोरेज का उपयोग करने का प्रयास करें जिन्हें आपको प्रमाणीकृत करने की आवश्यकता है।
यहाँ UIWebView के लिए नमूना काम कर रहा है यह विंडोज आईआईएस होने के खिलाफ परीक्षण किया गया था केवल BasicAuthentication सक्षम
यह आपकी साइट साख को जोड़ने का तरीका है:
NSString* login = @"MYDOMAIN\\myname";
NSURLCredential *credential = [NSURLCredential credentialWithUser:login
password:@"mypassword"
persistence:NSURLCredentialPersistenceForSession];
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc]
initWithHost:@"myhost"
port:80
protocol:@"http"
realm:@"myhost" // check your web site settigns or log messages of didReceiveAuthenticationChallenge
authenticationMethod:NSURLAuthenticationMethodDefault];
[[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:credential forProtectionSpace:protectionSpace];
[protectionSpace release];
आपका WebView अब काम करने के लिए, अगर माना जाता है यह डीबग करने के लिए अगले कोड का उपयोग नहीं करता है, विशेष रूप से didReceiveAuthenticationChallenge के लॉग संदेश जांचें।
#import "TheSplitAppDelegate.h"
#import "RootViewController.h"
@implementation TheSplitAppDelegate
@synthesize window = _window;
@synthesize splitViewController = _splitViewController;
@synthesize rootViewController = _rootViewController;
@synthesize detailViewController = _detailViewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// Add the split view controller's view to the window and display.
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];
NSLog(@"CONNECTION: Add credentials");
NSString* login = @"MYDOMAIN\\myname";
NSURLCredential *credential = [NSURLCredential credentialWithUser:login
password:@"mypassword"
persistence:NSURLCredentialPersistenceForSession];
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc]
initWithHost:@"myhost"
port:80
protocol:@"http"
realm:@"myhost" // check your web site settigns or log messages of didReceiveAuthenticationChallenge
authenticationMethod:NSURLAuthenticationMethodDefault];
[[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:credential forProtectionSpace:protectionSpace];
[protectionSpace release];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://myhost/index.html"]
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:12
];
NSLog(@"CONNECTION: Run request");
[[NSURLConnection alloc] initWithRequest:request delegate:self];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
}
- (void)applicationWillTerminate:(UIApplication *)application
{
}
- (void)dealloc
{
[_window release];
[_splitViewController release];
[_rootViewController release];
[_detailViewController release];
[super dealloc];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
{
NSLog(@"CONNECTION: got auth challange");
NSString* message = [NSString stringWithFormat:@"CONNECTION: cred cout = %i", [[[NSURLCredentialStorage sharedCredentialStorage] allCredentials] count]];
NSLog(message);
NSLog([connection description]);
NSLog([NSString stringWithFormat:@"CONNECTION: host = %@", [[challenge protectionSpace] host]]);
NSLog([NSString stringWithFormat:@"CONNECTION: port = %i", [[challenge protectionSpace] port]]);
NSLog([NSString stringWithFormat:@"CONNECTION: protocol = %@", [[challenge protectionSpace] protocol]]);
NSLog([NSString stringWithFormat:@"CONNECTION: realm = %@", [[challenge protectionSpace] realm]]);
NSLog([NSString stringWithFormat:@"CONNECTION: authenticationMethod = %@", [[challenge protectionSpace] authenticationMethod]]);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
// release the connection, and the data object
[connection release];
// inform the user
NSLog(@"CONNECTION: failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
{
NSLog(@"CONNECTION: received response via nsurlconnection");
}
- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection;
{
NSLog(@"CONNECTION: USE!");
return YES;
}
@end
वेबव्यू प्रमाणीकरण के लिए अंतिम समाधान कस्टम प्रोटोकॉल कार्यान्वयन पर आधारित था। सभी प्रोटोकॉल एक स्टैक के रूप में पंजीकृत हैं, इसलिए यदि आप HTTP प्रोटोकॉल को फिर से परिभाषित करते हैं तो यह वेब व्यू से आने वाले सभी अनुरोधों को रोक देगा, इसलिए आपको इनकमिंग अनुरोध के साथ मिश्रित विशेषताओं को जांचना होगा और इसे नए अनुरोध में दोबारा डालना होगा और इसे अपने कनेक्शन के माध्यम से दोबारा भेजना होगा। चूंकि आप ढेर में हैं, इसलिए आपका अनुरोध आपसे तत्काल आता है और आपको इसे अनदेखा करना होगा। तो यह वास्तविक HTTP प्रोटोकॉल कार्यान्वयन के लिए प्रोटोकॉल स्टैक डाउन हो जाता है, क्योंकि आपका अनुरोध प्रमाणीकृत नहीं है, आपको प्रमाणीकरण अनुरोध प्राप्त होगा। और प्रमाणीकरण के बाद आपको सर्वर से वास्तविक प्रतिक्रिया मिलेगी, इसलिए आप प्रतिक्रिया को दोबारा जवाब देते हैं और वेब व्यू से प्राप्त मूल अनुरोध का जवाब देते हैं और यही वह है।
डॉन; नए अनुरोध या प्रतिक्रिया निकायों को बनाने का प्रयास न करें, आपको बस उन्हें फिर से भेजना होगा। अंतिम कोड कोड की 30-40 लाइनों की लगभग 30-40 लाइन होगी और यह काफी सरल है, लेकिन बहुत सारे डिबगिंग और टेटिंग की आवश्यकता है।
Unfortunatlly मैं यहाँ के बाद से मैं पहले से ही अलग परियोजना के लिए आवंटित किया हूँ कोड प्रदान नहीं कर सकते, मैं सिर्फ इतना कहना है कि मेरी पोस्ट गलत तरीका है चाहता था, यह stucks जब उपयोगकर्ता पासवर्ड बदल जाता है।
अरे NeoNacho, क्या आपने यह पता लगाया कि इस मुद्दे को कैसे हल किया जाए? मुझे एक ही समस्या है - मैं एचटीएमएल पेज लोड कर सकता हूं, लेकिन सभी सीएसएस/जावास्क्रिप्ट को कभी भी लोड/संसाधित नहीं किया जाता है। यदि आपके पास कोई संकेत है, तो साझा करें :) – Stretch