0

foursquare 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 が返されるだけです。

手伝ってくれてありがとう。

@ニアロンライン

4

1 に答える 1

1

私は同じ問題を抱えています。その理由は、webViewDidFinishLoading の URL にアクセス トークンが含まれないためです。しかし、shouldStartLoadWithRequest の URL はそうします。したがって、コードを次のように変更する必要があります。

- (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 {

}
于 2013-03-25T03:07:02.723 に答える