【问题标题】:How does the Spotify web browser button interact with the Spotify app?Spotify 网络浏览器按钮如何与 Spotify 应用程序交互?
【发布时间】:2012-10-18 05:56:40
【问题描述】:

看看这个播放按钮,看起来完全是用javascript写的:spotify play button

请注意,按下播放键会导致 Spotify 开始播放音乐。好的,我认为这是通过一些特定于应用程序的协议链接(如 spotify://play)完成的,尽管我可能是错的。但最疯狂的是,如果您停止在 Spotify 中播放音乐,浏览器中的按钮将更新以显示音乐已停止播放!它是如何工作的?

你可以看看它的source here

【问题讨论】:

    标签: javascript browser controls spotify


    【解决方案1】:

    桌面在您的计算机上运行*.spotilocal.com 的服务器,然后在网络上,嵌入播放器(example)将选择一个子域名(例如:fdxubmxkqp.spotilocal.com)。

    然后它向本地服务器的 API 发出请求,示例:

    https://fdxubmxkqp.spotilocal.com:4370/service/version.json
    https://fdxubmxkqp.spotilocal.com:4370/simplecsrf/token.json
    

    它只返回一些 JSON:

    {
    "version": 9, 
    "client_version": "1.0.10.107.gd0dfca3a"
    }
    

    有关更多信息,请参阅 this screenshot,或者您可以通过转到 news.spotify.com 并使用带有 spotilocal 作为过滤器的网络检查器来获取相同的信息。

    【讨论】:

      【解决方案2】:

      (注意,这不是他们实际的做法,但对于希望实现类似功能的人来说,这仍然是一个有效的答案)

      使用自定义协议内容处理程序

      它注册了一个自定义协议内容处理程序。您可以通过浏览器为任何"web-*" 协议注册协议,以便让您的网站处理该协议,但您也可以在安装时让应用程序注册协议。 (这就是 Spotify 的工作方式)。在这里查看这篇文章:

      Registering an Application to a URL Protocol

      您的浏览器可以配置为识别某些处理程序。

      我不确定每个浏览器是如何做到的,我相信它可以根据上面链接的文章在 Internet Explorer 的注册表级别上运行。

      无论如何,在 Chrome 和 Firefox 中,有一个 window.navigator.registerProtocolHandler 函数用于注册您的协议。

      请看这里:https://developer.mozilla.org/en-US/docs/DOM/navigator.registerProtocolHandler

      另外,请查看brief article。 (虽然信息非常稀少)


      Chrome 13 终于包含了navigator.registerProtocolHandler。此 API 允许 Web 应用程序将自己注册为特定协议的可能处理程序。例如,用户可以选择您的应用程序来处理“mailto”链接。

      注册一个协议方案,如:

      navigator.registerProtocolHandler(
          'web+mystuff', 'http://example.com/rph?q=%s', 'My App');
      

      如果我在回答中没有明确说明,我提供了有关 Web 应用程序如何注册自己的协议以及桌面应用程序如何注册新协议的信息。 (任何网络应用,都需要以web-*为前缀以避免安全问题)

      【讨论】:

      • 我不确定我是否理解了您的回答的 100%(可能像 90%)......但从我得到的信息来看,听起来您指的是如何发送 URL/URI从浏览器到应用程序的请求。就像我说的那样,我想知道数据是如何从应用程序返回到浏览器的,我认为您的回答不能回答这个问题,除非我完全误解了它。
      • Spotify 可以如前所述注册“web-*”协议。不过,这不是他们的做法。您的 Spotify 应用程序有一个在端口 4371 上运行的本地 Web 服务器。尝试 ping “hrsjtjfquwfoi.spotilocal.com”,您将看到它解析为 localhost。如果您查看网络选项卡,您会看到按下播放按钮时会更新页面中的状态。
      • 我不明白注册 web-* 协议背后的机制(在应用程序中,不知何故)意味着 Spotify 可以将数据发送到浏览器。它运行本地 Web 服务器很有趣,但这并不能解释浏览器中的按钮是如何更新的,至少不能直接更新。他们是否进行长轮询或使用 websocket 连接到该服务器以获取有关 Spotify 状态的通知?是这样的吗?
      • 我想可能是这样,来源确实有对该 URL 的引用:return"https://"+ka+".spotilocal.com"
      【解决方案3】:

      Spotify 播放按钮长轮询(通过 HTTPS)在 localhost 上运行的 Spotify 应用程序以更新状态。

      【讨论】:

        猜你喜欢
        • 2017-01-25
        • 2012-11-11
        • 2021-10-10
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 2015-02-08
        • 2013-08-27
        • 2020-04-29
        相关资源
        最近更新 更多