El marco Spotify iOS permite que su aplicación interactúe con la aplicación Spotify que se ejecuta en segundo plano en el dispositivo de un usuario. Las capacidades incluyen autorizar, obtener metadatos para la pista y el contexto que se están reproduciendo actualmente, así como emitir comandos de reproducción.
Tenga en cuenta: al utilizar las herramientas para desarrolladores de Spotify, acepta nuestros Términos de uso para desarrolladores.
El SDK de Spotify para iOS es un conjunto de objetos livianos que se conectan con la aplicación Spotify y te permiten controlarla mientras todo el trabajo pesado de la reproducción se descarga en la propia aplicación Spotify. La aplicación Spotify se encarga de la reproducción, la creación de redes, el almacenamiento en caché sin conexión y la integración de la música en el sistema operativo, permitiéndole concentrarse en su experiencia de usuario. Pasar de su aplicación a la aplicación Spotify y viceversa es una experiencia optimizada en la que la reproducción y los metadatos siempre permanecen sincronizados.
Características clave
Errores de archivo
Componentes
¿Cómo funcionan las llamadas remotas de aplicaciones?
Condiciones de uso
Tutorial
Preguntas frecuentes
Nos encantan los comentarios de la comunidad de desarrolladores, así que no dudes en informar sobre las funciones faltantes o los errores en nuestro rastreador de problemas. Asegúrese de buscar problemas existentes antes de crear otros nuevos.
Abrir tickets de error | Abrir solicitudes de funciones
El marco de Spotify iOS requiere un objetivo de implementación de iOS 12 o superior. Las siguientes arquitecturas son compatibles con el SDK:
SPTAppRemoteAlbum
SPTAppRemoteArtist
SPTAppRemoteLibraryState
SPTAppRemotePlaybackRestrictions
SPTAppRemotePlaybackOptions
SPTAppRemotePlayerState
SPTAppRemoteTrack
SPTAppRemoteContentItem
SPTAppRemoteUserCapabilities
SPTAppRemoteImageRepresentable
SPTConfiguration
El punto de entrada principal para conectarse a la aplicación Spotify y recuperar componentes API. Utilícelo para establecer, monitorear y finalizar la conexión.
Envíe comandos relacionados con la reproducción, como:
Obtener una imagen para un SPTAppRemoteImageRepresentable
Obtener/suscribirse/establecer datos relacionados con el usuario, tales como:
SPTAppRemoteUserCapabilities
Obtener contenido recomendado para el usuario.
Cuando interactúa con cualquiera de las API de App Remote, pasa un bloque SPTAppRemoteCallback
que se invoca con el elemento de resultado esperado o un NSError
si la operación falla. El bloqueo se activa después de que la aplicación Spotify recibe el comando (o si no se pudo establecer la conexión).
A continuación se muestra un ejemplo que utiliza SPTRemotePlayerAPI
para omitir una canción:
[appRemote.playerAPI skipToNext: ^( id _Nullable result, NSError * _Nullable error) {
if (error) {
// Operation failed
} else {
// Operation succeeded
}
}];
Proporcionamos algunos proyectos de muestra para ayudarlo a comenzar con iOS Framework en la carpeta DemoProjects. Consulte el archivo Léame en la carpeta DemoProjects para obtener más información sobre lo que hace cada muestra.
Para comunicarse con la aplicación Spotify, su aplicación deberá obtener primero el permiso de un usuario para controlar la reproducción mediante el uso de la autorización integrada para App Remote. Para hacerlo, deberá solicitar la vista de autorización cuando se conecte a Spotify. El marco solicitará automáticamente el alcance app-remote-control
y mostrará la vista de autenticación si el usuario aún no la ha aceptado.
Tenga en cuenta que al utilizar las herramientas para desarrolladores de Spotify, acepta nuestros Términos de uso para desarrolladores.
Este tutorial lo guía paso a paso a través de la creación de una aplicación simple que utiliza el SDK de Spotify para iOS para reproducir una pista de audio y suscribirse al estado del reproductor. Recorrerá el flujo de autorización.
Siga estos pasos para asegurarse de estar preparado para comenzar a codificar.
Agrega el paquete SpotifyiOS a tu proyecto. Puede hacer esto a través de Swift Package Manager (SPM) o agregando SpotifyiOS.xcframework
a su proyecto Xcode directamente.
En su info.plist agregue su URI de redireccionamiento que registró en Mis aplicaciones. Deberá agregar su URI de redireccionamiento en "Tipos de URL" y "Esquemas de URL". Asegúrese de establecer también un "identificador de URL" único.
Agregue la biblioteca a sus archivos fuente.
Rápido
import SpotifyiOS
Objetivo-c
# import < SpotifyiOS/SpotifyiOS.h >
Para poder utilizar la parte de control de reproducción del SDK, el usuario debe autorizar su aplicación. Si no lo han hecho, la conexión fallará con el error No token provided
. Para permitir que el usuario autorice su aplicación, puede utilizar el flujo de autorización integrado.
Inicialice SPTConfiguration
con su ID de cliente y redirija el URI.
Rápido
let configuration = SPTConfiguration (
clientID : " YOUR_CLIENT_ID " ,
redirectURL : URL ( string : " your_redirect_uri " ) !
)
Objetivo-c
SPTConfiguration *configuration = [[SPTConfiguration alloc ] initWithClientID: @" your_client_id "
redirectURL: [ NSURL URLWithString: @" your_redirect_uri " ]];
Inicialice SPTAppRemote
con su SPTConfiguration
Rápido
self . appRemote = SPTAppRemote ( configuration : configuration , logLevel : . debug )
Objetivo-c
self.appRemote = [[SPTAppRemote alloc ] initWithConfiguration: configuration logLevel: SPTAppRemoteLogLevelDebug];
Inicie el flujo de autenticación (para conocer otras formas de detectar si Spotify está instalado, además de atribuir instalaciones, consulte nuestra Guía de vinculación de contenido).
Rápido
// Note: A blank string will play the user's last song or pick a random one.
self . appRemote . authorizeAndPlayURI ( " spotify:track:69bp2EbF7Q2rqc5N3ylezZ " ) { spotifyInstalled in
if !spotifyInstalled {
/*
* The Spotify app is not installed.
* Use SKStoreProductViewController with [SPTAppRemote spotifyItunesItemIdentifier] to present the user
* with a way to install the Spotify app.
*/
}
}
Objetivo-c
// Note: A blank string will play the user's last song or pick a random one.
[ self .appRemote authorizeAndPlayURI: @" spotify:track:69bp2EbF7Q2rqc5N3ylezZ " completionHandler: ^( BOOL spotifyInstalled) {
if (!spotifyInstalled) {
/*
* The Spotify app is not installed.
* Use SKStoreProductViewController with [SPTAppRemote spotifyItunesItemIdentifier] to present the user
* with a way to install the Spotify app.
*/
}
}];
Configure su AppDelegate
para analizar el accessToken en application:openURL:options:
y configúrelo en los parámetros de conexión SPTAppRemote
.
Objetivo-c
- ( BOOL )application:(UIApplication *)app openURL:( NSURL *)url options:( NSDictionary <UIApplicationOpenURLOptionsKey, id > *)options
{
NSDictionary *params = [ self .appRemote authorizationParametersFromURL: url];
NSString *token = params[SPTAppRemoteAccessTokenKey];
if (token) {
self. appRemote . connectionParameters . accessToken = token;
} else if (params[SPTAppRemoteErrorDescriptionKey]) {
NSLog ( @" %@ " , params[SPTAppRemoteErrorDescriptionKey]);
}
return YES ;
}
Si está utilizando UIScene, entonces necesita utilizar el método apropiado en su delegado de escena.
Rápido
func scene ( _ scene : UIScene , openURLContexts URLContexts : Set < UIOpenURLContext > ) {
guard let url = URLContexts . first ? . url else {
return
}
let parameters = appRemote . authorizationParameters ( from : url ) ;
if let access_token = parameters ? [ SPTAppRemoteAccessTokenKey ] {
appRemote . connectionParameters . accessToken = access_token
self . accessToken = access_token
} else if let error_description = parameters ? [ SPTAppRemoteErrorDescriptionKey ] {
// Show the error
}
}
Configure su delegado de conexión e intente conectarse.
Rápido
self . appRemote . delegate = self
self . appRemote . connect ( )
// MARK: AppRemoteDelegate
func appRemoteDidEstablishConnection ( _ appRemote : SPTAppRemote ) {
// Connection was successful, you can begin issuing commands
}
func appRemote ( _ appRemote : SPTAppRemote , didFailConnectionAttemptWithError error : Error ? ) {
// Connection failed
}
func appRemote ( _ appRemote : SPTAppRemote , didDisconnectWithError error : Error ? ) {
// Connection disconnected
}
Objetivo-c
self.appRemote.delegate = self;
[ self .appRemote connect ];
- ( void )appRemoteDidEstablishConnection:(SPTAppRemote *)appRemote
{
// Connection was successful, you can begin issuing commands
}
- ( void )appRemote:(SPTAppRemote *)appRemote didFailConnectionAttemptWithError:( NSError *)error
{
// Connection failed
}
- ( void )appRemote:(SPTAppRemote *)appRemote didDisconnectWithError:(nullable NSError *)error
{
// Connection disconnected
}
Establece un delegado y suscríbete al estado del jugador:
Rápido
self . appRemote . playerAPI ? . delegate = self
appRemote . playerAPI ? . subscribe ( toPlayerState : { result , error in
// Handle Errors
} )
// MARK: SPTAppRemotePlayerStateDelegate
func playerStateDidChange ( _ playerState : SPTAppRemotePlayerState ) {
print ( " track name ( playerState . track . name ) " )
}
Objetivo-c
appRemote.playerAPI.delegate = self;
[appRemote.playerAPI subscribeToPlayerState: ^( id _Nullable result, NSError * _Nullable error) {
// Handle Errors
}];
- ( void )playerStateDidChange:( id <SPTAppRemotePlayerState>)playerState
{
NSLog ( @" Track name: %@ " , playerState. track . name );
}
Como cortesía, siempre debes desconectar App Remote cuando tu aplicación entre en estado de fondo. Esto le indica a Spotify que es seguro desactivar la transmisión activa. Si su aplicación no llama correctamente a la desconexión, Spotify no tiene forma de saber que no debe mantener la conexión, y esto puede provocar problemas de conexión en el futuro.
Si desea que su aplicación se vuelva a conectar automáticamente después de eventos de interrupción, como llamadas entrantes o interacciones con Siri, puede usar las devoluciones de llamada willResignActive
y didBecomeActive
para desconectarse y volver a conectarse de forma segura. Si no desea volver a conectarse directamente, normalmente es suficiente cerrar la conexión en las devoluciones de llamada didEnterBackground
.
Rápido
func sceneWillResignActive ( _ scene : UIScene ) {
self . appRemote . disconnect ( )
}
func sceneDidBecomeActive ( _ scene : UIScene ) {
self . appRemote . connect ( )
}
Objetivo-c
- ( void )applicationWillResignActive:(UIApplication *)application
{
[ self .appRemote disconnect ];
}
- ( void )applicationDidBecomeActive:(UIApplication *)application
{
[ self .appRemote connect ];
}
// If you're using UIWindowSceneDelegate
- ( void )sceneDidBecomeActive:(UIScene *)scene
{
[ self .appRemote connect ];
}
- ( void )sceneWillResignActive:(UIScene *)scene
{
[ self .appRemote disconnect ];
}
¿Por qué es necesario reproducir música para conectarse con SPTAppRemote
?
La música debe estar reproduciéndose cuando se conecta con SPTAppRemote
para garantizar que la aplicación Spotify no esté suspendida en segundo plano. Las aplicaciones de iOS solo pueden permanecer activas en segundo plano durante unos segundos, a menos que estén haciendo algo activo como navegación o reproduciendo música.
¿Es seguro el hilo SpotifyiOS.framework?
No, el marco actualmente espera ser llamado desde el hilo principal. Descargará la mayor parte de su trabajo a un hilo en segundo plano internamente, pero también se producirán devoluciones de llamada a su código en el hilo principal.
¿Qué pasa si necesito autorizar sin iniciar la reproducción?
Existe un método de autorización alternativo. Puedes encontrar más información al respecto aquí.