Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

625
Views
How to 10 second forward or backward in Spotify player

I am trying to add(move forward) 10 second song duration or minus(move backward) 10 second in Spotify player but i am really confused how to add or minus.

When i m trying to use this code the song is not changed duration

// forward button action 
@IBAction func moveFrdBtnAction(_ sender: Any) {
  SpotifyManager.shared.audioStreaming(SpotifyManager.shared.player, didSeekToPosition: TimeInterval(10))
}

// spotify delegate method seekToPosition
func audioStreaming(_ audioStreaming: SPTAudioStreamingController!, didSeekToPosition position: TimeInterval) {
    player?.seek(to: position, callback: { (error) in
        let songDuration = audioStreaming.metadata.currentTrack?.duration as Any as! Double
        self.delegate?.getSongTime(timeCount: Int(songDuration)+1)
    })
}

We are making a music application using the same SDK in both the platforms (Android & iOS), the seekToPosition method of the Spotify SDK is working correctly in the Android version, however, it is not working in the iOS one.The delegate method calls itself but the music stops.

Can you kindly let us know why this scenario is happening, and what should we do to run it on the iOS devices as well.

Can someone please explain to me how to solve this , i've tried to solve this but no results yet.

Any help would be greatly appreciated.

Thanks in advance.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

I don't use this API so my answer will be based your code and Spotify's reference documentation.

I think there are a few things wrong with your flow:

  1. As Robert Dresler commented, you should (approximately) never call a delegate directly, a delegate calls you.
  2. I'm pretty sure your action currently results in jumping to exactly 10 seconds, not by 10 seconds.

(As an aside, I'd suggest changing the name of your function moveFrdBtnAction to at least add more vowels)

Anyway, here's my best guess at what you want:

// forward button action 
@IBAction func moveForwardButtonAction(_ sender: Any) {
   skipAudio(by: 10)
}

@IBAction func moveBackButtonAction(_ sender: Any) {
   skipAudio(by: -10)
}

func skipAudio(by interval: TimeInterval) {
   if let player = player {
      let position = player.playbackState.position // The documentation alludes to milliseconds but examples don't.
         player.seek(to: position + interval, callback: { (error) in
         // Handle the error (if any)
      })
   }
}

// spotify delegate method seekToPosition
func audioStreaming(_ audioStreaming: SPTAudioStreamingController!, didSeekToPosition position: TimeInterval) {
   // Update your UI
}

Note that I have not handled seeking before the start of the track, nor after the end which could happen with a simple position + interval. The API may handle this for you, or not.

over 4 years ago · Santiago Trujillo Report

0

You could take a look at the examples here: spotify/ios-sdk. In the NowPlayingView example they use the 'seekForward15Seconds', maybe you could use that? If you still need 10s I have added a function below. The position is in milliseconds.

"position: The position to seek to in milliseconds" docs

ViewController.swift

var appRemote: SPTAppRemote {
    get {
        return AppDelegate.sharedInstance.appRemote
    }
}

fileprivate func seekForward15Seconds() {
    appRemote.playerAPI?.seekForward15Seconds(defaultCallback)
}

fileprivate seekBackward15Seconds() {
    appRemote.playerAPI?.seekBackward15Seconds(defaultCallback)
}

// TODO: Or you could try this function
func seekForward(seconds: Int){
    appRemote.playerAPI?.getPlayerState({ (result, error) in
        // playback position in milliseconds
        let current_position = self.playerState?.playbackPosition
        let seconds_in_milliseconds = seconds * 1000

        self.appRemote.playerAPI?.seek(toPosition: current_position + seconds_in_milliseconds, callback: { (result, error) in
            guard error == nil else {
                print(error)
                return
            }
        })
    })
}

var defaultCallback: SPTAppRemoteCallback {
        get {
            return {[weak self] _, error in
                if let error = error {
                    self?.displayError(error as NSError)
                }
            }
        }
    }

AppDelegate.swift

lazy var appRemote: SPTAppRemote = {
        let configuration = SPTConfiguration(clientID: self.clientIdentifier, redirectURL: self.redirectUri)
        let appRemote = SPTAppRemote(configuration: configuration, logLevel: .debug)
        appRemote.connectionParameters.accessToken = self.accessToken
        appRemote.delegate = self
        return appRemote
    }()

    class var sharedInstance: AppDelegate {
        get {
            return UIApplication.shared.delegate as! AppDelegate
        }
    }

Edit1:

For this to work you need to follow the Prepare Your Environment:

framwork

Add the SpotifyiOS.framework to your Xcode project

Hope it helps!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!