2012-12-01 134 views
2

我想写一个应用程序,将与Last.fm API交互,我被卡住了。 我的问题与授权有关。从Last.fm API网站报价:通过浏览器授权

您的应用程序需要打开一个网页浏览器的一个实例,并发送 用户与你的API密钥和认证令牌 作为参数传递给last.fm/api/auth。使用HTTP GET请求。

我知道如何发送GET请求以及如何使用指定的URL打开浏览器。但是,当用户批准或拒绝浏览器中的授权时,如何实现此功能并捕获我的应用事件?也许我应该使用HTTP GET 15秒,如果我没有收到用户名,我应该让用户再次执行授权。这是一个正确的方式吗?

+0

是涉及浏览器,还是纯粹使用C++代码发送HTTP请求? –

+0

涉及浏览器。 – DuXeN0N

回答

1

这是有点意思。这些说明使其看起来很简单,但这实际上是一个难题,甚至没有出现Last.fm自己的liblastfm C++ library与服务交互提供解决方案。

在难度不断增加的顺序一些方法包括:

  • 打开默认的Web浏览器的URL,并为用户显示一个按钮,他或她已授权应用程序后点击。

    优点:简单

    缺点:用户体验较差。您需要确保用户有明确的说明才能遵守,以免他/她感到困惑。另外,用户可能会认为你的应用已被破坏,因为“他们已经授权你的应用!”,并没有意识到你的应用直到他或她按下按钮才会知道。

  • 打开默认的Web浏览器到URL,显示无限期的“等待来自Last.fm的授权”消息,并每隔15秒钟轮询auth.getSession方法API调用以查看用户是否授权您的应用程序。也许还提供了“现在检查”按钮。

    优点:简单而不会像用户体验那么差。

    缺点:API似乎没有提供用户拒绝授权的错误代码。您可能不知道用户是否授权您的应用程序,并且您可能会永久等待授权。另外,我不知道auth.getSession调用是否有限制,但是您可能会面临速率限制问题。

  • 将Web浏览器嵌入到您的应用程序中。你可以完全控制它,设置事件处理程序应该很简单。

    优点:无需轮询,因为应用程序在用户提交表单时收到通知。

    缺点:用户界面可能会让某些用户感到困惑。

  • 向操作系统注册自定义URI方案,并使用Last.fm的instructions for authorizing web applications

    这个想法是注册URI方案(也称为应用协议;例如myApp://),并使用自定义方案(例如myApp://lastFmAuthorizationCallback)指定回调URL。

    参见:

  • (特定平台)自动化的Web浏览器。确切的做法取决于网络浏览器和平台。

    优点:可以无缝连接。应该在正确完成时提供出色的用户体验。

    缺点:棘手的开发和自动化可能会破坏浏览器的升级。

0

它部分取决于您用来启动浏览器进程的API。如果您正在使用可在启动的进程退出时检测到的API,请使用该机制。 HTTP GET的/ auth调用不会收到任何类型的用户名。按照authentication documentation for desktop apps的其余部分,浏览器会自动关闭,当用户已经批准:

一旦用户授权使用他们的 帐户您的应用程序的许可,基于浏览器的过程已经结束,用户问到 关闭他们的浏览器并返回到您的应用程序

在此之后,还有一些步骤让您经历。您接下来需要拨打auth.getSession以获得会话。如果用户尚未批准您的应用,此通话将失败(并且您可以向用户展示他们需要批准您的应用并再次向他们提供链接的失败)。以下是各类可能发生的错误列出:

错误

4:无效的认证令牌提供

14:此令牌没有被授权

15:此标记已过期

4:身份验证失败 - 您无权访问服务

9:无效的会话密钥 - 请重新认证10:无效的API密钥 - 您必须被授予

等等

您在会议上批准后,就可以开始进行适当的调用