2015-07-12 21 views
5

Mam aplikację, która pozwala użytkownikom na strumieniowe przesyłanie utworów z spotify. Aby to osiągnąć, muszę odnawiać sesję od czasu do czasu, gdy użytkownicy chcą odtwarzać utwory z Spotify. Korzystam z najnowszej wersji sredytacji spotify (beta-9) i obecnie obserwuję samouczek od https://www.youtube.com/watch?v=GeO00YdJ3cE. W tym samouczku musimy odświeżyć token wymiany , ale gdy spojrzałem z https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/, nie ma potrzeby odświeżania tokena.Jak odnowić sesję spotify?

a ja w końcu nie za pomocą tokena swapa, gdy odświeżam mój sesja następnie odtworzyć utwór z nową sesję, mam poniżej błędu:

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

i używam poniżej tego kodu, do odnowienia mój sesja:

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 

    } 

i poniżej kod do strumienia Spotify piosenki:

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

      } 
     }) 

    }) 

} 

Czy nadal trzeba odświeżyć tokena dla najnowszego sdk? A może czegoś brakuje w moim kodzie?

Odpowiedz

6

Domyślnie użytkownicy muszą logować się raz na godzinę w aplikacjach korzystających z pakietu SDK Spotify, chyba że korzystasz z przepływu kodu autoryzacji. Aby użyć tego przepływu, musisz skonfigurować serwer do obsługi wymiany tokena i odświeżania.

  1. Konfiguracja darmowy serwer z tym jednym kliknięciem wdrożyć do Heroku https://github.com/adamontherun/SpotifyTokenRefresh

  2. Korzystanie URL serwera utworzonego powyżej dodać następujące podczas konfigurowania SPTAuth.defaultInstance():

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

  3. Przed użyciem czeku sesji, jeśli jest on ważny:

    jeśli SPTAuth.defaultInstance() session.isValid()

i jeśli nie jest zadzwonić

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

Jak można używać. kod herokuapp w aplikacji na iOS? – Parthpatel1105

+0

to jest całkiem niesamowite. Bardzo ci za to dziękuję! ale otrzymuję: 'JSON tekst nie zaczął się od tablicy lub obiektu i opcji, aby umożliwić fragmenty nie ustawione." jakiś pomysł? –

+0

'Używając adresu URL serwera utworzonego powyżej, dodaj następujące ustawienia podczas konfigurowania SPTAuth.defaultInstance():' can u plz explain more – Jack