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謝謝。