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

633
Views
Cómo avanzar o retroceder 10 segundos en el reproductor de Spotify

Estoy tratando de agregar (avanzar) 10 segundos de duración de la canción o menos (mover hacia atrás) 10 segundos en el reproductor de Spotify, pero estoy realmente confundido sobre cómo agregar o restar.

Cuando intento usar este código, la duración de la canción no cambia

 // 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) }) }

Estamos creando una aplicación de música usando el mismo SDK en ambas plataformas (Android e iOS), el método seekToPosition del SDK de Spotify funciona correctamente en la versión de Android, sin embargo, no funciona en la de iOS. El método de delegado llama pero la música se detiene.

¿Puede decirnos por qué sucede este escenario y qué debemos hacer para ejecutarlo también en los dispositivos iOS?

¿Puede alguien explicarme cómo resolver esto, he intentado resolver esto pero aún no tengo resultados?

Cualquier ayuda sería muy apreciada.

Gracias por adelantado.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No uso esta API, por lo que mi respuesta se basará en su código y en la documentación de referencia de Spotify.

Creo que hay algunas cosas mal con tu flujo:

  1. Como comentó Robert Dresler , (aproximadamente) nunca debe llamar a un delegado directamente, un delegado lo llama a usted.
  2. Estoy bastante seguro de que su acción actualmente da como resultado un salto de exactamente 10 segundos, no de 10 segundos.

(Aparte, sugeriría cambiar el nombre de su función moveFrdBtnAction para al menos agregar más vocales)

De todos modos, aquí está mi mejor suposición de lo que quieres:

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

Tenga en cuenta que no he manejado la búsqueda antes del inicio de la pista, ni después del final, lo que podría suceder con una simple position + interval . La API puede manejar esto por usted, o no.

over 4 years ago · Santiago Trujillo Report

0

Puede echar un vistazo a los ejemplos aquí: spotify/ios-sdk . En el ejemplo de NowPlayingView usan ' seekForward15Seconds ', ¿quizás podrías usar eso? Si aún necesita 10, he agregado una función a continuación. La posición está en milisegundos.

"posición: la posición a buscar en milisegundos" documentos

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:

Para que esto funcione, debe seguir Prepare su entorno :

marco

Agregue SpotifyiOS.framework a su proyecto Xcode

¡Espero eso ayude!

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!