2013-03-09 2 views
0

Я следую Четвероугольному Authen руководство, но я до сих пор есть проблемыИОСА - квадратный маркер доступа не пришел

это мой код

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.webView.delegate = self; 
    NSString *clientID = @"XXX"; 
    NSString *redirectURI = @"http://www.example.com"; 
    NSString *authenticateURLString = [NSString stringWithFormat:@"https://foursquare.com/oauth2/authenticate?client_id=%@&response_type=token&redirect_uri=%@", clientID, redirectURI]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:authenticateURLString]]; 
    [self.webView loadRequest:request]; 
} 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([request.URL.scheme isEqualToString:@"itms-apps"]) { 
     [[UIApplication sharedApplication] openURL:request.URL]; 
     return NO; 
    } 
    return YES; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSString *URLString = [[self.webView.request URL] absoluteString]; 
    NSLog(@"--> %@", URLString); 
    if ([URLString rangeOfString:@"access_token="].location != NSNotFound) { 
     NSString *accessToken = [[URLString componentsSeparatedByString:@"="] lastObject]; 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setObject:accessToken forKey:@"access_token"]; 
     [defaults synchronize]; 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
} 

но выход из NSLog только http://www.example.com. У него нет доступа к токену доступа. Я что-то не так?

Я открываю эту ссылку на рабочем столе Google Chrome, и токен доступа успешно возвращается. (www.example.com # access_token = XXX) Но я открываю эту ссылку в сафари для симулятора iPhone, и он просто возвращает URL-адрес.

Спасибо за помощь.

@nearonline

ответ

1

У меня такая же проблема, и причиной этого является URL в webViewDidFinishLoading не будет содержать маркер доступа. Но URL-адрес в shouldStartLoadWithRequest будет. Поэтому вам следует изменить код, указанный ниже:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSString *URLString = [[request URL] absoluteString]; 
    if ([URLString rangeOfString:@"access_token="].location != NSNotFound) { 
     NSString *accessToken = [[URLString componentsSeparatedByString:@"="] lastObject]; 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setObject:accessToken forKey:@"access_token"]; 
     [defaults synchronize]; 
     [self dismissViewControllerAnimated:YES completion:nil]; 
     return NO; 
    } 
    return YES; 
} 
- (void)webViewDidFinishLoad:(UIWebView *)webView { 

} 
Смежные вопросы