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.
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:
(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.
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 :
Agregue SpotifyiOS.framework a su proyecto Xcode
¡Espero eso ayude!