0

Graph API在我的 iOS 项目中使用。问题是在 Facebook 登录 webview 中输入登录凭据后,它没有给我带有重定向 URI 的访问令牌。我在 2 天内面临这个问题。在 2 天之前,我的应用程序运行良好。

登录后调用的代码Graph API是:

- (void)webViewDidFinishLoad:(UIWebView *)_webView {

    /**
     * Since there's some server side redirecting involved, this method/function will be called several times
     * we're only interested when we see a url like:  http://www.facebook.com/connect/login_success.html#access_token=..........
     */

    //get the url string
    NSString *url_string = [((_webView.request).URL) absoluteString];

    //looking for "access_token="
    NSRange access_token_range = [url_string rangeOfString:@"access_token="];

    //looking for "error_reason=user_denied"
    NSRange cancel_range = [url_string rangeOfString:@"error_reason=user_denied"];

    //it exists?  coolio, we have a token, now let's parse it out....
    if (access_token_range.length > 0) {

        //we want everything after the 'access_token=' thus the position where it starts + it's length
        int from_index = access_token_range.location + access_token_range.length;
        NSString *access_token = [url_string substringFromIndex:from_index];

        //finally we have to url decode the access token
        access_token = [access_token stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        //remove everything '&' (inclusive) onward...
        NSRange period_range = [access_token rangeOfString:@"&"];

        //move beyond the .
        access_token = [access_token substringToIndex:period_range.location];

        //store our request token....
        self.accessToken = access_token;

        //remove our window
        UIWindow* window = [UIApplication sharedApplication].keyWindow;
        if (!window) {
            window = [[UIApplication sharedApplication].windows objectAtIndex:0];
        }

        [self.webView removeFromSuperview];

        //tell our callback function that we're done logging in :)
        if ( (callbackObject != nil) && (callbackSelector != nil) ) {
            [callbackObject performSelector:callbackSelector];
        }

        //the user pressed cancel
    } else if (cancel_range.length > 0) {
        //remove our window
        UIWindow* window = [UIApplication sharedApplication].keyWindow;
        if (!window) {
            window = [[UIApplication sharedApplication].windows objectAtIndex:0];
        }

        [self.webView removeFromSuperview];

        //tell our callback function that we're done logging in :)
        if ( (callbackObject != nil) && (callbackSelector != nil) ) {
            [callbackObject performSelector:callbackSelector];
        }

    }

      [activityindicatorview stopAnimating];
}

谁能告诉我是什么问题。提前致谢。

4

1 回答 1

1

Facebook已经改变了他的政策

第 4 项:原生 iOS 和 Android 应用不得使用自定义 Web 视图进行登录(2013 年 10 月 2 日生效)

您应该使用Facebook 官方 SDK

于 2013-10-06T21:05:21.627 回答