Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

627
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda