ios – 如何更新spotify会话?

前端之家收集整理的这篇文章主要介绍了ios – 如何更新spotify会话?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序,允许用户从spotify流式传输歌曲.因此,为了达到这个目的,每当用户想要从spotify流式传输歌曲时,我需要不时更新会话.我正在使用最新的spotify sdk(beta-9),我目前正在关注 https://www.youtube.com/watch?v=GeO00YdJ3cE的教程.在该教程中我们需要刷新令牌交换,但是当我从 https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/看时,没有必要刷新令牌交换.

并且我最终没有使用令牌交换,当我刷新我的会话然后用更新的会话播放歌曲时,我得到以下错误

Error Domain=com.spotify.ios-sdk.playback Code=8 “Login to Spotify Failed because of invalid credentials.” UserInfo=0x7f840bf807b0 {NSLocalizedDescription=Login to Spotify Failed because of invalid credentials.}

我正在使用下面的代码来更新我的会话:

let userDefaults = NSUserDefaults.standardUserDefaults()

    if let sessionObj : AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("spotifySession") {

        let sessionDataObj : NSData = sessionObj as! NSData
        let session = NSKeyedUnarchiver.unarchiveObjectWithData(sessionDataObj) as! SPTSession
        self.playUsingSession(session)

        if !session.isValid() {

            SPTAuth.defaultInstance().renewSession(session,callback: { (error : NSError!,newsession : SPTSession!) -> Void in

                if error == nil {

                    let sessionData = NSKeyedArchiver.archivedDataWithRootObject(session)
                    userDefaults.setObject(sessionData,forKey: "spotifySession")
                    userDefaults.synchronize()

                    self.session = newsession

                    self.playUsingSession(newsession)

                }else{

                    println("renew session having problerm >>>>> \(error)")

                }
            })
        }else{

            println("session is still valid")
            self.playUsingSession(session)

        }

    }else{

        spotifyLoginButton.hidden = false

    }

以下代码流来识别歌曲:

func playUsingSession(sessionObj:SPTSession!){

    if spotifyPlayer == nil {

        spotifyPlayer = SPTAudioStreamingController(clientId: kSpotifyClientID)

    }

    spotifyPlayer?.loginWithSession(sessionObj,callback: { (error : NSError!) -> Void in
        if error != nil {

            println("enabling playback got error : \(error)")

            return

        }
        var spotifyTrackUri : NSURL = NSURL(string: "spotify:track:3FREWTEY2uFxOorJZMmZPX")!
        self.spotifyPlayer!.playURIs([spotifyTrackUri],fromIndex: 0,callback: { (error : NSError!) -> Void in
            if error != nil {

                println("\(error)")

            }
        })

    })

}

我还需要为最新的sdk刷新令牌交换吗?或者我的代码中缺少什么?

解决方法

默认情况下,除非您使用授权代码流,否则用户需要每小时登录一次使用Spotify SDK的应用程序.要使用此流程,您需要设置服务器来处理令牌交换和刷新.

>通过一键部署到Heroku https://github.com/adamontherun/SpotifyTokenRefresh设置免费服务器
>使用上面创建的服务器的URL在配置SPTAuth.defaultInstance()时添加以下内容

SPTAuth.defaultInstance().tokenSwapURL = URL(字符串:“https://YOURSERVERNAME.herokuapp.com/swap”)
SPTAuth.defaultInstance().tokenRefreshURL = URL(字符串:“https://YOURSERVERNAME.herokuapp.com/refresh”)
>在使用会话之前,请检查它是否有效:

如果SPTAuth.defaultInstance().session.isValid()

如果不是电话

SPTAuth.defaultInstance().renewSession(SPTAuth.defaultInstance().session,callback: { (error,session) in
                        if let session = session {
                            SPTAuth.defaultInstance().session = session
                        } 
                    })
原文链接:https://www.f2er.com/iOS/334412.html

猜你在找的iOS相关文章