【发布时间】:2016-06-27 18:13:12
【问题描述】:
我在我的应用中有一个 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)
}
}
检查会话是否存在
private func spotifyConnected() -> Bool {
if SPTAuth.defaultInstance().session == nil {
self.loadSpotifySession()
}
return SPTAuth.defaultInstance().session != nil
}
保存会话
private func saveSpotifySession() {
let sessionData = NSKeyedArchiver.archivedDataWithRootObject(SPTAuth.defaultInstance().session)
NSUserDefaults.standardUserDefaults().setObject(sessionData, forKey: Spotify_Session_Key)
NSUserDefaults.standardUserDefaults().synchronize()
}
加载会话
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
}
}
更新会话 - 在应用启动时调用
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")
}
}
}
renewSession 返回零。 我看到了一些关于refreshToken的信息,但我不知道在哪里可以看到它。
我如何更新 spotify 会话?也许我做错了什么?
【问题讨论】: