gpt4 book ai didi

ios - Spotify session 管理

转载 作者:IT王子 更新时间:2023-10-29 05:51:56 25 4
gpt4 key购买 nike

我在我的应用程序中有一个 spotify 登录并尝试进行自动登录:

登录功能

func getSpotifyToken(fromController controller: UIViewController, success: (spotifyToken: String?) -> Void, failure: (error: NSError?) -> Void) {

loginSuccessBlock = success
loginFailureBlock = failure

SPTAuth.defaultInstance().clientID = SpotifyClientID
SPTAuth.defaultInstance().redirectURL = NSURL(string: SpotifyRedirectURI)
SPTAuth.defaultInstance().requestedScopes = [SPTAuthStreamingScope, SPTAuthPlaylistReadPrivateScope]

let spotifyLoginController = SPTAuthViewController.authenticationViewController()
spotifyLoginController.delegate = self
spotifyLoginController.clearCookies { () -> Void in
controller.presentViewController(spotifyLoginController, animated: true, completion: nil)
}
}

检查 session 是否存在

private func spotifyConnected() -> Bool {        
if SPTAuth.defaultInstance().session == nil {
self.loadSpotifySession()
}
return SPTAuth.defaultInstance().session != nil
}

保存 session

private func saveSpotifySession() {
let sessionData = NSKeyedArchiver.archivedDataWithRootObject(SPTAuth.defaultInstance().session)
NSUserDefaults.standardUserDefaults().setObject(sessionData, forKey: Spotify_Session_Key)
NSUserDefaults.standardUserDefaults().synchronize()
}

加载 session

private func loadSpotifySession() {        
if let sessionData = NSUserDefaults.standardUserDefaults().objectForKey(Spotify_Session_Key) as? NSData {
let session = NSKeyedUnarchiver.unarchiveObjectWithData(sessionData) as! SPTSession
SPTAuth.defaultInstance().session = session
}
}

更新 session - 在应用启动时调用

func renewSpotifySession() {        
guard spotifyConnected() else {
return
}

SPTAuth.defaultInstance().renewSession(SPTAuth.defaultInstance().session) { (error: NSError!, session: SPTSession!) -> Void in
if session != nil {
SPTAuth.defaultInstance().session = session
} else {
print("Failed to refresh spotify session")
}
}
}

更新 session 返回零。我看到了一些关于 refreshToken 的信息,但我不知道在哪里可以获取它。

如何更新 spotify session ?也许我做错了什么?

最佳答案

为了在用户无需每 60 分钟重新授权您的应用的情况下续订 session ,您需要在应用调用的某个位置运行服务器端脚本。服务器端脚本然后与 Spotify 服务器对话以更新 token 或换出新 token 。

ios-sdk 下载中的演示项目目录包含 a sample script您可以在本地用于开发。

一旦准备就绪,就很容易了。在某个地方,您将拥有一些配置交换/刷新 URL 的代码:

let auth = SPTAuth.defaultInstance()
auth.clientID = Constant.SPOTIFY_CLIENT_ID;
auth.redirectURL = Constant.SPOTIFY_AUTH_CALLBACK_URL
auth.tokenSwapURL = Constant.SPOTIFY_TOKEN_SWAP_URL
auth.tokenRefreshURL = Constant.SPOTIFY_TOKEN_REFRESH_URL
auth.sessionUserDefaultsKey = Constant.SPOTIFY_SESSION_USER_DEFAULTS_KEY

然后,当你想登录或更新 session 时,你可以有这样的东西:

func loginOrRenewSession(handler: (loginTriggered: Bool, error: NSError?) -> Void) {
guard auth.session != nil else {
print("will trigger login")
UIApplication.sharedApplication().openURL(auth.loginURL)
handler(loginTriggered: true, error: nil)
return
}

if auth.session.isValid() {
print("already have a valid session, nothing to do")
handler(loginTriggered: false, error: nil)
return
}

print("will renew session")
auth.renewSession(auth.session) { error, session in
self.auth.session = session
handler(loginTriggered: false, error: error)
}
}

关于ios - Spotify session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35958193/

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