2

我正在尝试编写一个与 Last.fm API 交互的应用程序,但我被卡住了。我的问题与授权有关。引用 Last.fm API 网站:

您的应用程序需要打开 Web 浏览器的实例并将用户发送到 last.fm/api/auth,并将您的 API 密钥和身份验证令牌作为参数。使用 HTTP GET 请求。

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

4

2 回答 2

1

这有点意思。说明看起来很简单,但这实际上是一个难题,而且似乎 Last.fm 自己的用于与服务交互的liblastfm C++ 库提供了解决方案。

一些按难度递增的方法包括:

  • 打开该 URL 的默认 Web 浏览器,并显示一个按钮供用户在授权应用程序后单击。

    优点:简单

    缺点:用户体验差。您需要确保有明确的说明供用户遵循,以免他或她感到困惑。此外,用户可能会认为您的应用程序已损坏,因为“他们已经授权了您的应用程序!”,直到他或她按下按钮时才意识到您的应用程序不知道这一点。

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

    优点:简单且用户体验不差。

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

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

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

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

  • 向操作系统注册自定义 URI 方案并使用 Last.fm 的说明授权 Web 应用程序

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

    看:

  • (特定于平台)自动化网络浏览器。执行此操作的确切方法取决于 Web 浏览器和平台。

    优点:可以无缝。正确完成后应提供出色的用户体验。

    Cons: Tricky to develop and the automation might break with an upgrade of the browser.

于 2012-12-09T18:33:38.960 回答
0

这部分取决于您用于启动浏览器进程的 API。如果您使用的 API 可以检测到启动的进程何时退出,请使用该机制。对 HTTP GET 的 /auth 调用您不会收到任何类型的用户名。根据桌面应用程序的其余身份验证文档,当用户批准后,浏览器将自动关闭:

一旦用户授予您的应用程序使用其帐户的权限,基于浏览器的过程就结束了,并且要求用户关闭浏览器并返回到您的应用程序

在此之后,您还需要执行一些步骤。您接下来需要调用auth.getSession来获取会话。如果用户尚未批准您的应用,则此调用将失败(并且您可以向用户显示他们需要批准您的应用并再次向他们提供链接的失败)。以下是列出的可能错误类型:

错误

4:提供的身份验证令牌无效

14:这个令牌没有被授权

15:此令牌已过期

4 : Authentication Failed - 您没有访问服务的权限

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

等等。

在您批准会话后,您可以开始进行适当的呼叫

于 2012-12-07T00:17:29.363 回答