Spotify会话管理 [英] Spotify session management

查看:135
本文介绍了Spotify会话管理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a spotify login in my app and try to made an autologin:

登录功能

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 return nil。
我看到了一些关于refreshToken的信息,但我不知道,我能抓住它。

renewSession return nil. I saw some info about refreshToken, But I don't know, where I can catch it.

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

How I can renew spotify session? maybe I made something wrong?

推荐答案

为了更新会话而无需用户每60分钟重新授权一次应用程序,您需要在应用程序将调用的某个位置运行服务器端脚本。服务器端脚本然后与Spotify服务器通信以更新或交换新令牌。

In order to renew the session without the user needing to re-authorize your app every 60 minutes, you'll need to have a server-side script running someplace that your app will call. The server side script then talks to the Spotify servers to renew or swap out the token for a new one.

ios-sdk下载中的demo projects目录包含示例脚本,您可以在本地进行开发。

The demo projects directory in the ios-sdk download contains a sample script that you can use locally for development.

一旦你有了这个,这很容易。在某个地方,您将拥有一些配置交换/刷新网址的代码:

Once you have that in place, it's pretty easy. Someplace you'll have some code that configures your swap / refresh URLs:

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

然后,当您想要登录或续订会话时,您可以这样:

Then, when you want to login or renew the session, you can have something like this:

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

这篇关于Spotify会话管理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆