swift - Setting tokens in Spotify iOS app disables login callback -


i trying set login ios app using spotify's sdk. have login working, without tokens. once add these 2 lines of code:

sptauth.defaultinstance().tokenswapurl = nsurl(string: ktokenswapurl) sptauth.defaultinstance().tokenrefreshurl = nsurl(string: ktokenrefreshserviceurl) 

the login not work. code login.

appdelegate.swift

let kclientid = "my-client-id" let kcallbackurl = "my-callback-url" let ktokenswapurl = "my-token-swap-url" let ktokenrefreshserviceurl = "my-token-refresh-url"  func application(application: uiapplication, didfinishlaunchingwithoptions launchoptions: [nsobject: anyobject]?) -> bool {     // override point customization after application launch.      // override point customization after application launch.     sptauth.defaultinstance().clientid = kclientid     sptauth.defaultinstance().redirecturl = nsurl(string: kcallbackurl)     sptauth.defaultinstance().requestedscopes = [sptauthstreamingscope, sptauthuserreadprivatescope, sptauthplaylistreadprivatescope]     sptauth.defaultinstance().sessionuserdefaultskey = "spotifysession"      window = uiwindow(frame: uiscreen.mainscreen().bounds)      let loginviewcontroller = loginviewcontroller(nibname: "loginviewcontroller", bundle: nil)     let navigationcontroller = uinavigationcontroller(rootviewcontroller: loginviewcontroller)      window?.rootviewcontroller = navigationcontroller     window?.makekeyandvisible()      return true }  func application(application: uiapplication, openurl url: nsurl, sourceapplication: string?, annotation: anyobject) -> bool {     let authcallback : sptauthcallback = { error, session in         // callback that'll triggered when auth completed (or fails).          if (error != nil) {             print(error);             return;         }          let userdefaults = nsuserdefaults.standarduserdefaults()         let sessiondata = nskeyedarchiver.archiveddatawithrootobject(session)         userdefaults.setobject(sessiondata, forkey: sptauth.defaultinstance().sessionuserdefaultskey)         userdefaults.synchronize()          authhandler.sharedhandler.loginwithsession(session)     };      if sptauth.defaultinstance().canhandleurl(url) {         sptauth.defaultinstance().handleauthcallbackwithtriggeredauthurl(url, callback:authcallback)         return true     }      return false; } 

loginviewcontroller.swift

class loginviewcontroller: uiviewcontroller {      let kclientid = "my-client-id"     let kcallbackurl = "my-callback-url"     let ktokenswapurl = "my-token-swap-url"     let ktokenrefreshserviceurl = "my-token-refresh-url"       var session: sptsession!      var login: uibutton!      var auth : sptauthviewcontroller?      override func viewwillappear(animated: bool) {         // set login callback happens when session got         authhandler.sharedhandler.setlogincallback({ success in             if (success) {                 self.transitiontoplaylistscreen()             }         })          // if session still valid, login         let userdefaults = nsuserdefaults.standarduserdefaults()          if let sessionobj:anyobject = userdefaults.objectforkey("spotifysession") { // session available             let sessiondataobj = sessionobj as! nsdata              let session = nskeyedunarchiver.unarchiveobjectwithdata(sessiondataobj) as! sptsession              if !session.isvalid() {                 sptauth.defaultinstance().renewsession(session, callback: { (error:nserror!, renewdsession:sptsession!) -> void in                     if error == nil {                         let sessiondata = nskeyedarchiver.archiveddatawithrootobject(session)                         userdefaults.setobject(sessiondata, forkey: sptauth.defaultinstance().sessionuserdefaultskey)                         userdefaults.synchronize()                          self.session = renewdsession                         authhandler.sharedhandler.loginwithsession(self.session!)                     } else {                         print(error.localizeddescription)                     }                 })             } else {                 self.session = session                 authhandler.sharedhandler.loginwithsession(self.session!)             }         }     }      override func viewdidload() {         // add observer login success         nsnotificationcenter.defaultcenter().addobserver(self, selector: selector("transitiontoplaylistscreen"), name: "loginsuccess", object: nil)         // code set login button     }      func transitiontoplaylistscreen() {         if (self.auth != nil) {             self.dismissviewcontrolleranimated(true, completion: nil)             self.auth = nil         }         let playlistscreen = playlistviewcontroller()         let navigation = uinavigationcontroller(rootviewcontroller: playlistscreen)         dispatch_async(dispatch_get_main_queue(), {             self.presentviewcontroller(navigation, animated: true, completion: nil)         })     }      func logintospotify() {         // if session isn't valid, login within app         dispatch_async(dispatch_get_main_queue(), {             self.auth = sptauthviewcontroller.authenticationviewcontroller()             self.auth?.delegate = authhandler.sharedhandler             self.auth!.modalpresentationstyle = .overcurrentcontext             self.auth!.modaltransitionstyle = .crossdissolve             self.modalpresentationstyle = .currentcontext             self.definespresentationcontext = true             self.auth!.clearcookies({                 dispatch_async(dispatch_get_main_queue(), {                     self.presentviewcontroller(self.auth!, animated: false, completion: nil)                 })             })         })     } } 

authhandler.swift

class authhandler: nsobject, sptauthviewdelegate {     static let sharedhandler = authhandler()      var session: sptsession?      var callback: (bool -> void)?      func setlogincallback(callback: (bool -> void)) {         self.callback = callback     }      func authenticationviewcontroller(authenticationviewcontroller: sptauthviewcontroller!, didfailtologin error: nserror!) {         if let function = callback {             function(false)         }     }      func authenticationviewcontroller(authenticationviewcontroller: sptauthviewcontroller!, didloginwithsession session: sptsession!) {         self.loginwithsession(session)     }      func authenticationviewcontrollerdidcancellogin(authenticationviewcontroller: sptauthviewcontroller!) {         if let function = callback {             function(false)         }     }      func loginwithsession(session: sptsession) {         self.session = session         sptauth.defaultinstance().session = session         if let function = callback {             function(true)         }     } } 

i guess backend (swap/refresh) server not set properly, because not working server cause log in fail.

i recommend this repository, can set simple server on heroku.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -