如何让Twitter API遵守OAuth的回调参数?

时间:2009-07-18 04:48:14

标签: iphone twitter oauth

我正在开发一款理想情况下使用OAuth与Twitter通信的iPhone应用。我知道有很多人正在使用UIWebView在他们的应用程序内部进行OAuth工作流程,但我不同意这一点,并且使用Pownce approach

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

所以,好像我被卡住了 - 我不能说“桌面”,因为我不想打扰别针,我不能说“网”或我不能用iPhone应用网址。任何解决方案?

4 个答案:

答案 0 :(得分:8)

从你的问题:

  

我知道有很多人使用UIWebView在他们的应用程序内部进行OAuth工作流程,但我不同意这一点,并采用Pownce方法。

Pownce文章建议退出您的应用程序并打开Mobile Safari以执行身份验证步骤是有问题的,并且他们开始接受用户的错误评论以便这样做。他们的失败率也在40%左右。

Pownce的解决方案是在您的应用程序中使用UIWebView,因此我觉得您可能误解了他们的建议。话虽如此,他们确实将此标记为“天真”的解决方案,并继续提出一系列理论上的“理想”解决方案。

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

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

  1. 在UIWebView中打开twitter.com,指定无oauth_callback参数或oauth_callback=oob以启动基于引脚的带外流程。然后,用户需要使用iPhone的复制粘贴功能复制引脚,手动关闭UIWebView,并将引脚粘贴到您的应用程序中。然后可以将该引脚转换为访问令牌。
  2. 执行其他人的操作(回调参数中的UIWebView + custom-uri://foo.bar)。
  3. 由于显而易见的原因,第一个选项很糟糕,只有在Twitter无法重定向到自定义URI的平台上才有用。

答案 1 :(得分:0)

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

除此之外,Nathan的答案非常完整。

答案 2 :(得分:0)

以下是我的工作方式:告诉Twitter您是一个网络应用程序,并在注册您的oauth客户端时编写任何旧的HTTP:// URL以满足Twitter。

然后在您的应用中,在回调参数中传递您想要的网址。 Twitter(根据我的经验)使用你提供的那个。

答案 3 :(得分:0)

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

啰嗦,需要另一个网站,但它应该有用。