gpt4 book ai didi

ios - 如何更新 spotify session ?

转载 作者:IT王子 更新时间:2023-10-29 05:50:02 24 4
gpt4 key购买 nike

我有一个应用程序允许用户从 spotify 流式传输歌曲。因此,为了实现这一点,每当用户想要从 spotify 流式传输歌曲时,我需要不时地更新 session 。我正在使用最新的 spotify sdk (beta-9),我目前正在学习来自 https://www.youtube.com/watch?v=GeO00YdJ3cE 的教程。 .在该教程中,我们需要刷新 token 交换,但是当我从 https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/ 查看时无需刷新 token 交换。

我最终没有使用 token 交换,当我刷新 session 然后用更新的 session 播放歌曲时,出现以下错误:

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.}

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

 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

}

和以下流式传输 spotify 歌曲的代码:

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 刷新 token 交换吗?还是我的代码缺少什么?

最佳答案

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

  1. 使用此一键部署到 Heroku 设置免费服务器 https://github.com/adamontherun/SpotifyTokenRefresh

  2. 在配置 SPTAuth.defaultInstance() 时使用上面创建的服务器的 URL 添加以下内容:

    SPTAuth.defaultInstance().tokenSwapURL = URL(string: "https://YOURSERVERNAME.herokuapp.com/swap ") SPTAuth.defaultInstance().tokenRefreshURL = URL(string: "https://YOURSERVERNAME.herokuapp.com/refresh ")

  3. 在使用您的 session 之前检查它是否有效:

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

如果不调用

SPTAuth.defaultInstance().renewSession(SPTAuth.defaultInstance().session, callback: { (error, session) in
if let session = session {
SPTAuth.defaultInstance().session = session
}
})

关于ios - 如何更新 spotify session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31364319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com