Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

626
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda