2

我正在通过 iPhone 应用程序上的 OAuth 1.0 流程工作。

我有请求令牌。我使用正确的 URL 选择 UIWebView 来执行 requestToken 的用户授权,该操作成功执行。但是,完成此步骤后,用户必须手动点击“返回”才能返回应用程序。然后用户点击一个单独的按钮来执行 getAccessToken。(这显然是正在进行的工作)。

执行 requestToken 的用户授权后如何自动返回?在 UIWebView 上,当用户成功登录时,他们会获得一个验证权限的页面,并且用户单击“确定”,我希望应用程序自动返回并在完成后继续获取 accessToken。

我是新手,所以可能解释得不太好。FWIW,我正在使用自鸣得意的 API。提前感谢您的帮助。

4

2 回答 2

0

我不是 iOS 编码员,但一旦请求令牌被最终用户授权,服务提供商应该重定向到您的回调。必须有一种方法可以让您在 UIWebView 中“聆听”这一点。通过接收看起来像这样的重定向 HTTP 响应:

301 Moved Permanently
Location: URI?oauth_token=BLAHBLAH&oauth_verifier=BLAHBLAH

如果您可以拦截该重定向,您可能会阻碍 UIWebView 实际完成它,而只是抓取 Location 标头。

或者,您至少应该能够在重定向完成并且您实际上在您的回调页面上时进行接听。那么这将是一个从不可见地址栏中抓取包含令牌和验证器的 URL 的简单案例。如果一切都失败了,您可以让您的回调实际在页面上打印令牌和秘密并刮掉它。

拥有验证者后,您应该能够在完全不涉及最终用户的情况下获得访问令牌。

于 2012-04-11T11:05:26.577 回答
0

我通过查找特定的 URL 解决了这个问题,然后在正确的 URL 完成加载时手动弹出 navigationController 堆栈。我的代码看起来像:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSRange range = [webView.request.URL.absoluteString rangeOfString:@"http://thecallbackurl.com/"];
    if (range.location != NSNotFound) {
        [self.navigationController popViewControllerAnimated:YES];
    }
}

我正在写信给 smugmug.com API。令牌授权成功后,他们将浏览器重定向到回调 URL,这就是我想要的。

于 2012-04-18T08:01:03.883 回答