AVFoundation 拍片专用iOS Developer@IT·互联网

如何在APP中接入英文歌曲搜索库(Spotify接入)

2016-08-26  本文已影响946人  诗情雨意

Spotify是全球最大的正版流媒体音乐服务平台之一,有非常丰富的流媒体库,最主要的是还提供了非常丰富的API、SDK供个人或企业调用,以便获取最新最全的音乐,而且是不收费的,但你的用户如果想听可就要付费了,所以说“天下没有免费的午餐”啊。

注意:Spotify在中国区还没有提供服务,访问官网会有提示,但访问开发者中心畅通无阻(https://developer.spotify.com/)

进入正题,Spotify如何为我所用呢?下面以iOS接入为例一步步展开【业务很简单:在APP海外版中搜索歌曲并播放】

1、让我们先看看其强大的开发者中心吧:

2、申请spotify,需要VPN,因为spotify在大陆还没有业务。

3、进入开发者中心(https://developer.spotify.com/),创建自己的APP,里面的Redirect URIs、Bundle IDs、Android Packages可以在后续用到的时候随时添加上,这样我们就拿到了Client ID和Client Secret。

4、无论是iOS还是Android平台的sdk,想要播放完整的歌曲都需要付费spotify会员权限,所以我们还需要办理付费会员,官方有3种付费渠道,但我尝试的时候都不行,必须海外的信用卡等等,所以干脆直接去淘宝,淘宝有专门办理spotify付费的,99元人民币三个月。

5、下载iOS版本SDK,里面Demo的代码比较完整,只需要更换一下Client ID就可以使用了,看看里面Config.h中的几个重要参数:

几个重要的参数

kClientId:自己 App的client ID

kCallbackURL:Auth2.0授权的回调地址

kTokenSwapServiceURL:用来新的获取token,需要自己开发服务

kTokenRefreshServiceURL:用来refresh token,以便实现权限自动续期,需要自己开发服务

kSessionUserDefaultsKey:默认不变

kTokenSwapServiceURL和kTokenRefreshServiceURL后面会说明,以及两个服务如何实现。

6、如何实现搜索?有两个选择,一种web api方式,一种集成sdk,APP内部实现,但我们发现Android版的SDK中没有提供seach的接口,只是iOS版的SDK实现了,所以最终决定选择web api形式实现搜索,供两个平台调用。

      下载web api的Demo地址:https://developer.spotify.com/web-api/code-examples/

Demo做的非常完善,测试单元也都有,核心功能实现都已经给出来了,我们只需要找到要用的那部分代码。

搜索部分共有4种类型:歌曲,歌手,歌单,专辑

搜索歌曲代码:

搜索歌曲

搜索歌手代码:

搜索歌手

搜索歌手的top歌曲:

搜索歌手的top歌曲

还有搜索歌单,专辑部分,这儿就不继续延展了,有需要的直接看Demo,都能找到你想要的。

有了主要功能函数,剩下的就是包装成rest服务了,不再赘述。

需要注意的地方是,spotify搜索接口返回的并不是歌曲的音源地址,而是一个id,比如“spotify:track:3Dupb5AcaVFErlSSfl3szW”,iOS&Android的SDK已经提供了播放接口,接口参数就是id,同时接口还会返回preview_url,这个是只有30s的音源地址,可以随便播放。更为详细的格式查询API Console(https://developer.spotify.com/web-api/console/)。

7、歌曲数据有了,试试APP端怎么播放吧。

播放类:SPTAudioStreamingController

player核心类

到这儿你应该能够听到来自spotify的歌曲了。

8、关于授权

    Spotify走的也是OAuth2.0协议,即Web Server Flow。

了解详细:http://developer.baidu.com/wiki/index.php?title=docs/oauth/authorization

Spotify每次授权之后token有效期3600s,过期以后还需要用户输入用户名密码登录授权,比较麻烦,很是影响用户体验,有没有办法解决这个问题?查询发现,OAutch2.0确实是支持自动续期权限的,这个太好了,下一步就看在APP中如何实现了。

iOS版SDK正好也有这方面的兼容,不过需要设置两个回调服务,即开始提到的kTokenSwapServiceURL和kTokenRefreshServiceURL。

官方文档中并没有提到这两个服务实现的细节,但通过搜索也能查到一些蛛丝马迹。

       8.1、启动iOS Demo,登录以后APP会调用kTokenSwapServiceURL服务,带的参数是code,拿到code以后实现:

返回的参数 实现类

    返回的数据格式需要时标准的json。

    8.2、过期以后重新refresh token

      SDK检查当前token是否可用,不可用会调用kTokenRefreshServiceURL
服务,上行的参数是refresh_token,拿到refresh_token以后实现:

返回的数据 实现类

      返回的数据格式需要时标准的json。

总结:以上就是所有部分了,总起来说比较简单,因为官方给的api已经足够清晰了,只是在授权地方可能会有些迷惑的地方,再有任何问题可以在后面追加评论,O(∩_∩)O谢谢。

上一篇下一篇

猜你喜欢

热点阅读