2015-07-12 22 views
5

Ho un'applicazione che consente agli utenti di riprodurre in streaming i brani da spotify. Quindi, per farlo, ho bisogno di rinnovare di volta in volta la sessione ogni volta che gli utenti vogliono trasmettere la canzone da Spotify. Sto usando l'ultimo spotify sdk (beta-9), e attualmente sto seguendo il tutorial da https://www.youtube.com/watch?v=GeO00YdJ3cE. In questo tutorial è necessario lo scambio di token di aggiornamento ma quando ho guardato da https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/ non è necessario aggiornare il token di swap.Come rinnovare la sessione spotify?

e io alla fine non si usa lo swap di token, quando rinfresco la mia sessione poi giocare canzone con rinnovata sessione, ho avuto sotto l'errore:

Error Domain=com.spotify.ios-sdk.playback Code=8 "Login to Spotify failed because of invalid credentials." UserInfo=0x7f840bf807b0 {NSLocalizedDescription=Login to Spotify failed because of invalid credentials.}

e sto usando questo codice qui sotto, per rinnovare il mio sessione:

let userDefaults = NSUserDefaults.standardUserDefaults() 

    if let sessionObj : AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("spotifySession") { 

     let sessionDataObj : NSData = sessionObj as! NSData 
     let session = NSKeyedUnarchiver.unarchiveObjectWithData(sessionDataObj) as! SPTSession 
     self.playUsingSession(session) 

     if !session.isValid() { 

      SPTAuth.defaultInstance().renewSession(session, callback: { (error : NSError!, newsession : SPTSession!) -> Void in 

       if error == nil { 

        let sessionData = NSKeyedArchiver.archivedDataWithRootObject(session) 
        userDefaults.setObject(sessionData, forKey: "spotifySession") 
        userDefaults.synchronize() 

        self.session = newsession 

        self.playUsingSession(newsession) 

       }else{ 

        println("renew session having problerm >>>>> \(error)") 

       } 
      }) 
     }else{ 

      println("session is still valid") 
      self.playUsingSession(session) 

     } 

    }else{ 

     spotifyLoginButton.hidden = false 

    } 

e sotto il codice per lo streaming di canzoni di Spotify:

func playUsingSession(sessionObj:SPTSession!){ 

    if spotifyPlayer == nil { 

     spotifyPlayer = SPTAudioStreamingController(clientId: kSpotifyClientID) 

    } 

    spotifyPlayer?.loginWithSession(sessionObj, callback: { (error : NSError!) -> Void in 
     if error != nil { 

      println("enabling playback got error : \(error)") 

      return 

     } 
     var spotifyTrackUri : NSURL = NSURL(string: "spotify:track:3FREWTEY2uFxOorJZMmZPX")! 
     self.spotifyPlayer!.playURIs([spotifyTrackUri], fromIndex: 0, callback: { (error : NSError!) -> Void in 
      if error != nil { 

       println("\(error)") 

      } 
     }) 

    }) 

} 

ho ancora bisogno di aggiornare lo scambio di token per l'ultimo sdk? O c'è qualcosa che manca con il mio codice?

risposta

6

Per impostazione predefinita, gli utenti devono effettuare il login una volta all'ora per le app che utilizzano Spotify SDK a meno che non si utilizzi il flusso del codice di autorizzazione. Per utilizzare questo flusso è necessario configurare un server per gestire il token di swap e aggiornare.

  1. Imposta un server gratuito con questo one-click-distribuire a Heroku https://github.com/adamontherun/SpotifyTokenRefresh

  2. Utilizzando l'URL del server creato in precedenza aggiungere il seguente durante la configurazione SPTAuth.defaultInstance():

    . SPTAuth.defaultInstance() tokenSwapURL = URL (stringa: "https://YOURSERVERNAME.herokuapp.com/swap ") SPTAuth.defaultInstance() tokenRefreshURL = URL (stringa:" https://YOURSERVERNAME.herokuapp.com/refresh").

  3. Prima di utilizzare il controllo della sessione se è valido:

    se SPTAuth.defaultInstance() session.isValid()

e se non si chiama

SPTAuth.defaultInstance().renewSession(SPTAuth.defaultInstance().session, callback: { (error, session) in 
         if let session = session { 
          SPTAuth.defaultInstance().session = session 
         } 
        }) 
+0

Come si può usare. codice herokuapp nell'app iOS? – Parthpatel1105

+0

questo è davvero fantastico. grazie mille per questo! ma sto ricevendo: 'Il testo JSON non iniziava con l'array o l'oggetto e l'opzione per consentire ai frammenti non impostati. Qualche idea? –

+0

'Usando l'URL del server creato sopra aggiungi quanto segue quando configuri il tuo SPTAuth.defaultInstance():' puoi spiegarci di più – Jack

Problemi correlati