2015-07-12 15 views
5

Tôi có một ứng dụng cho phép người dùng truyền phát bài hát từ spotify. Vì vậy, để đạt được điều đó, tôi cần phải gia hạn phiên theo thời gian bất cứ khi nào người dùng muốn phát bài hát từ spotify. Tôi đang sử dụng sdk spotify mới nhất (beta-9) và tôi hiện đang theo dõi hướng dẫn từ https://www.youtube.com/watch?v=GeO00YdJ3cE. Trong hướng dẫn đó, chúng tôi cần trao đổi mã thông báo làm mới nhưng khi tôi xem từ https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/ không cần phải làm mới trao đổi mã thông báo.Làm cách nào để gia hạn phiên spotify?

và tôi kết thúc không sử dụng hoán đổi mã thông báo, khi tôi làm mới phiên của tôi sau đó chơi bài hát với phiên mới, tôi có dưới đây lỗi:

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

Và tôi đang sử dụng mã này dưới đây, để đổi mới của tôi phiên:

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 

    } 

và dưới mã để dòng nhạc 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)") 

      } 
     }) 

    }) 

} 

tôi vẫn cần phải làm mới mã thông báo hoán đổi cho sdk mới nhất? Hoặc có cái gì đó thiếu với mã của tôi?

Trả lời

6

Theo mặc định, người dùng cần phải đăng nhập một lần mỗi giờ cho các ứng dụng sử dụng SDK Spotify trừ khi bạn sử dụng quy trình Mã ủy quyền. Để sử dụng luồng này, bạn cần thiết lập máy chủ để xử lý trao đổi và làm mới mã thông báo.

  1. Thiết lập một máy chủ miễn phí với điều này One-Click-triển khai đến Heroku https://github.com/adamontherun/SpotifyTokenRefresh

  2. Sử dụng URL của máy chủ đã tạo ở trên thêm sau khi cấu hình SPTAuth.defaultInstance của bạn():

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

  3. Trước khi sử dụng kiểm tra phiên của bạn nếu nó là hợp lệ:

    nếu SPTAuth.defaultInstance() session.isValid()

và nếu nó không được gọi

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

Làm thế nào có thể sử dụng. mã herokuapp trong ứng dụng iOS? – Parthpatel1105

+0

điều này khá tuyệt vời. Cám ơn rất nhiều vì cái đó! nhưng tôi nhận được: 'JSON văn bản đã không bắt đầu với mảng hoặc đối tượng và tùy chọn để cho phép fragments không set.' bất kỳ ý tưởng? –

+0

'Sử dụng URL của máy chủ được tạo ở trên thêm các thông tin sau khi định cấu hình SPTAuth.defaultInstance():' u có thể giải thích thêm – Jack

Các vấn đề liên quan