Spotify会话管理
我在我的应用程序中有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返回nil。 我看到有关refreshToken的一些信息,但我不知道,我可以在哪里找到它。
我如何续订Spotify会话? 也许我做错了什么?
为了更新会话而不需要用户每60分钟重新授权您的应用程序,您需要有一个服务器端脚本运行应用程序将调用的某个位置。 服务器端脚本然后与Spotify服务器通信以更新或换出新令牌。
ios-sdk下载中的演示项目目录包含一个示例脚本,您可以在本地进行开发。
一旦你有了,这很容易。 有些地方你会有一些代码来配置你的交换/刷新网址:
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
然后,当你想登录或更新会话时,你可以有这样的事情:
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)
}
}
链接地址: http://www.djcxy.com/p/90563.html
上一篇: Spotify session management
下一篇: When using node sharp package to resize image and upload to s3 it is rotated