我正在尝试编写一个与Last.fm API交互的应用程序,但我遇到了问题。 我的问题与授权有关。引自Last.fm API网站:
您的应用程序需要打开Web浏览器的实例并发送 使用您的API密钥和身份验证的用户last.fm/api/auth 令牌作为参数。使用HTTP GET请求。
我知道如何发送GET请求以及如何使用指定的URL打开浏览器。但是,当用户批准或拒绝浏览器中的授权时,如何实现此功能并抓住我的应用事件?也许我应该使用HTTP GET 15秒,如果我没有收到用户名,我应该要求用户再次执行授权。这是正确的方法吗?
答案 0 :(得分:1)
这有点意思。这些说明看起来很简单,但这实际上是一个难题,甚至看不到Last.fm自己的liblastfm C++ library用于与服务交互提供了解决方案。
为了增加难度,有些方法包括:
打开URL的默认Web浏览器,并显示一个按钮,供用户在授权应用程序后单击。
优点:简单
缺点:糟糕的用户体验。您需要确保有明确的说明供用户遵循,以免他或她感到困惑。此外,用户可能会认为您的应用已损坏,因为“他们已经授权您的应用!”,并没有意识到您的应用在他或她按下按钮之前不知道这一点。
打开默认的Web浏览器到URL,显示无限期的“从Last.fm等待授权”消息,并每隔15秒左右轮询auth.getSession方法API调用以查看用户是否已授权您的申请。也许还提供“立即检查”按钮。
优点:简单而不是用户体验差。
缺点:API似乎没有提供错误代码,表明用户拒绝授权。您可能不知道用户是否曾授权您的应用,您可能会永远等待授权。另外,我不知道auth.getSession调用是否有限制,但您可能会遇到速率限制问题。
在您的应用程序中嵌入Web浏览器。您可以完全控制它,设置事件处理程序应该很简单。
优点:无需轮询,因为当用户提交表单时,应用程序会收到通知。
缺点:用户界面可能会让某些用户感到困惑。
在操作系统中注册自定义URI方案,并使用Last.fm的instructions for authorizing web applications。
想法是注册URI方案(也称为应用程序协议;例如myApp://
)并使用自定义方案指定回调URL(例如myApp://lastFmAuthorizationCallback
)。
请参阅:
(特定于平台)自动化Web浏览器。这样做的确切方法取决于Web浏览器和平台。
优点:可以是无缝的。如果做得好,应该提供出色的用户体验。
缺点:开发棘手,自动化可能会随着浏览器的升级而中断。
答案 1 :(得分:0)
部分取决于您用于启动浏览器进程的API。如果您使用的API可以在启动的进程退出时检测到,请使用该机制。 / auth调用HTTP GET您没有收到任何类型的用户名。根据{{3}}的其余部分,当用户批准时,浏览器将自动关闭:
一旦用户授予您的应用程序使用他们的权限 帐户,基于浏览器的过程结束,并要求用户 关闭浏览器并返回到您的应用程序
在此之后,还有一些步骤可供您使用。接下来,您需要致电authentication documentation for desktop apps以获取会话。如果用户尚未批准您的应用,则此呼叫将失败(您可以向用户显示他们需要批准您的应用并再次为其提供链接的失败)。以下列出了可能的错误类型:
错误
4:提供的身份验证令牌无效
14:此令牌尚未获得授权
15:此令牌已过期
4:身份验证失败 - 您无权访问服务
9:会话密钥无效 - 请重新验证10:无效的API密钥 - 您必须被授予
等
在您批准会话后,您可以开始进行适当的呼叫