5

我正在开发一个理想情况下使用 OAuth 与 Twitter 通信的 iPhone 应用程序。我知道很多人都在使用 UIWebView 在他们的应用程序中执行 OAuth 工作流程,但我不同意这一点,我将采用Pownce 方法

问题是,Twitter 拥有使用 PIN 码来处理桌面应用程序的整个方案。当我在 Twitter 上注册我的应用程序时,他们有一个 Web 表单,询问我是桌面客户端还是 Web 客户端。如果我选择桌面客户端,当我尝试让用户授权时,我可以设置 oauth_callback 参数,但 Twitter 会在授权后忽略它并显示一个密码。如果在 twitter 的表单上,我指定我是一个网络客户端,它要求我输入一个 URL 以在授权后重定向到。而且,由于我使用的是 iPhone 应用程序特定的 url 方案,因此他们的 web 表单在验证时失败,因为它似乎只接受符合 HTTP 协议的 URL。

所以,我好像被困住了——我不能说“桌面”,因为我不想打扰别针,我不能说“网络”,或者我不能使用 iPhone 应用程序 URL。有什么解决办法吗?

4

4 回答 4

8

从你的问题:

我知道很多人都在使用 UIWebView 在他们的应用程序中执行 OAuth 工作流程,但我不同意这一点,我将采用 Pownce 方法。

Pownce 文章建议退出您的应用程序并打开 Mobile Safari 以执行身份验证步骤是有问题的,并且他们开始收到用户的差评。他们还经历了大约 40% 的失败率。

Pownce 的解决方案是在您的应用程序中使用 UIWebView,所以我感觉您可能误解了他们的建议。话虽如此,他们确实将其标记为“幼稚”的解决方案,并继续提出一堆理论上的“理想”解决方案。

您可能没有意识到的另一点是桌面应用程序(使用“带外”/pin 编号方法)Web 应用程序需要在嵌入式或外部浏览器中打开 Twitter 站点。

所以你在 iPhone 上有两个选择:

  1. 在 UIWebView 中打开 twitter.com,不指定oauth_callback参数或oauth_callback=oob启动基于 pin 的带外流。然后,用户需要使用 iPhone 的复制粘贴功能复制 pin,手动关闭 UIWebView,然后将 pin 粘贴到您的应用程序中。然后可以使用该 pin 转换为访问令牌。
  2. 按照其他人的做法去做(custom-uri://foo.bar回调参数中的 UIWebView +)。

出于显而易见的原因,第一个选项非常垃圾,并且仅在 Twitter 无法重定向到自定义 URI 的平台上才真正有用。

于 2009-07-19T09:52:26.073 回答
0

一个简单的解决方案可能是创建一个始终向您的自定义 URL 方案发送 301 重定向的 HTTP 页面,然后将该 HTTP URL 提供给 twitter Web API。

除此之外,内森的回答非常完整。

于 2009-07-23T18:17:54.917 回答
0

我是这样做的:告诉 Twitter 你是一个 Web 应用程序,并在注册 oauth 客户端期间制作任何旧的 HTTP:// URL 以满足 Twitter。

然后在您的应用程序中,在回调参数中传递您想要的 URL。Twitter(根据我的经验)使用你给它的那个。

于 2009-07-23T21:19:27.560 回答
0

您可以使用中间网站进行身份验证。您的应用程序创建一个唯一 ID(基于硬件?)并存储它。然后它记录它已发送用户进行身份验证并将唯一 ID 发送到您的网站。然后它将用户重定向到您的网站。然后,您的网站使用 oAuth 将用户发送到 Twitter。用户返回您的网站,您将唯一 ID 标记为已通过身份验证并存储身份验证信息。用户在 iPhone 上重新启动应用程序,它读取它已发送用户进行身份验证并使用唯一 ID 联系您的网站 - 并读入身份验证信息。

啰嗦,需要另一个网站,但它应该可以工作。

于 2009-07-29T12:39:14.383 回答