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歌曲:
还有搜索歌单,专辑部分,这儿就不继续延展了,有需要的直接看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
到这儿你应该能够听到来自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谢谢。