我正在开发一款理想情况下使用OAuth与Twitter通信的iPhone应用。我知道有很多人正在使用UIWebView在他们的应用程序内部进行OAuth工作流程,但我不同意这一点,并且使用Pownce approach。
问题是,Twitter有使用pin号码处理桌面应用程序的整个方案。当我在Twitter上注册我的应用程序时,他们有一个Web表单,询问我是否是桌面或Web客户端。如果我选择桌面客户端,当我尝试让用户授权时,我可以设置oauth_callback参数,但Twitter会在授权后忽略它并显示一个密码。如果在twitter的表单上,我指定我是一个Web客户端,它要求我在授权后输入一个重定向到的URL。而且,由于我正在使用特定于iPhone应用程序的URL方案,因此它们的Web表单在验证时失败,因为它似乎只接受符合HTTP协议的URL。
所以,好像我被卡住了 - 我不能说“桌面”,因为我不想打扰别针,我不能说“网”或我不能用iPhone应用网址。任何解决方案?
答案 0 :(得分:8)
从你的问题:
我知道有很多人使用UIWebView在他们的应用程序内部进行OAuth工作流程,但我不同意这一点,并采用Pownce方法。
Pownce文章建议退出您的应用程序并打开Mobile Safari以执行身份验证步骤是有问题的,并且他们开始接受用户的错误评论以便这样做。他们的失败率也在40%左右。
Pownce的解决方案是在您的应用程序中使用UIWebView,因此我觉得您可能误解了他们的建议。话虽如此,他们确实将此标记为“天真”的解决方案,并继续提出一系列理论上的“理想”解决方案。
您可能没有意识到的另一点是桌面应用程序(使用“带外”/密码方法)和 Web应用程序需要在嵌入式或外部浏览器中打开Twitter站点。
所以你在iPhone上有两个选择:
oauth_callback
参数或oauth_callback=oob
以启动基于引脚的带外流程。然后,用户需要使用iPhone的复制粘贴功能复制引脚,手动关闭UIWebView,并将引脚粘贴到您的应用程序中。然后可以将该引脚转换为访问令牌。custom-uri://foo.bar
)。由于显而易见的原因,第一个选项很糟糕,只有在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与您的网站联系 - 并读取身份验证信息。
啰嗦,需要另一个网站,但它应该有用。