Desarrollo iOS: Incorporemos Spotify en nuestras aplicaciones, parte 1

¿Usas Spotify? ¿Sabías que hay una librería llamada libspotify para usar en iOS? En su blog de desarrollo la última novedad data de hace un mes: Spotify actualiza su librería iOS para que los desarrolladores incorporemos Spotify en nuestras aplicaciones. ¿Cómo se hace eso?. La idea es...

¿Usas Spotify? ¿Sabías que hay una librería llamada libspotify para usar en iOS? En su blog de desarrollo la última novedad data de hace un mes: Spotify actualiza su librería iOS para que los desarrolladores incorporemos Spotify en nuestras aplicaciones. ¿Cómo se hace eso?.

La idea es que cualquier aplicación que necesite música, no se limite a la librería iTunes local del dispositivo, sino que se conecte a Spotify, a través de la cuenta del usuario, y pase a disponer de los millones de canciones del servicio.

La verdad es que suena muy interesante, tanto del lado nuestro, que puede darle valor agregado a las apps, como desde el punto de vista del usuario, que ve integrada semejante cantidad de música en las apps. La noticia mala (para el desarrollador) es que la licencia es solo para apps gratuitas. Sin embargo, parece que esto puede negociarse y usarlo en apps comerciales.

Vayamos a lo nuestro, a experimentar con la librería.

Antes que nada, vamos a necesitar tener una cuenta Spotify Premium. Esto es obvio debido a que Spotify en móviles solo funciona con una de estas cuentas.

Lo primero es bajarse libspotify para iOS, que al momento de escribir este artículo esta en la versión 9.1.56 y se puede descargar de http://developer.spotify.com/en/libspotify/overview/.

A continuación hay que obtener un “AppKey” del sitio de desarrollo. Este código identifica a nuestras app; sin él el servicio no funciona. En este paso registramos nuestra app en Spotify y descargamos el archivo appkey.c, que tendremos que incorporar en los proyectos XCode (tanto en nuestra App como en los ejemplos que compilemos).

Lo siguiente es leer el Readme, apartado 4.1 y configurar XCode según se detalla. No crean que es como usar un Framework de Apple que uno lo inserta y listo. Lamentablemente hay que hacer varios ajustes para enlazar a la librería.

Mi sugerencia es hacer la configuración sobre el proyecto de ejemplo de «docexamplesMobileRandomify» porque con solo darle Run sabremos si todo quedo configurado correctamente. Si la app de ejemplo no compila, menos lo hará una hecha por nosotros.

La librería funciona con el simulador, así que no hace falta usar el dispositivo para el desarrollo.

Hecho esto, estamos en condiciones de comenzar un pequeño desarrollo propio.

Comencemos por algo simple, una app que haga login y muestre la lista de favoritos. ¿Les parece?

Mi cliente Spotify

Creamos un nuevo proyecto en XCode basado en UITableView

La libspotify está enteramente desarrollada en C. No hay un solo fuente cocoa.

Existe una librería wrapper cocoalibspotify pero no la he probado y no la usaré en este artículo.

En este punto tenemos dos caminos:

  1. O usamos libspotify «a la C», con toda su fauna de tipos y callbacks, sin objetos…
  2. O hacemos un poco de trampa y tomamos algunos fuentes del ejemplo «Randomify», que tiene varios objetos wrappers ya escritos.

Opto por 2 sin dudarlo, je!.

Ahora, momento de incluir varios fuentes de Randomify que los podemos agrupar en “Spotify Shared”:

  • SpotifySession que simplifica el login, la obtención de las listas, el play de un tema, etc
  • SpotifyPlaylist que wrappea las listas
  • SpotifyTrack que wrappea a un tema
  • audio.c y las demás, que vienen en cascada
  • Luego, insertamos los frameworks de AudioToolbox, CFNetwork y SystemConfiguration. También el appkey.c. Para terminar, configuremos el proyecto tal cual lo hicimos con «MobileRandomify». Compilamos y debería ejecutarse, aunque no haga nada!

    Ahora, momento de escribir código, al fin!

    SpotifySession

    No podremos usar nada de Spotify a menos que hagamos un login, para ello el objeto SpotifySession nos provee el método loginUser.

    Por simplicidad, todo el código lo pondré en el RootViewController.

    Creo una property session y en viewDidLoad creo un SpotifySession.

    Para el login lo lógico sería crear un controller que nos permita ingresar usuario y password, pero no hace falta tanto esfuerzo para hacer una prueba!:

    – (void)viewDidLoad

    {

    [super viewDidLoad];

    NSError *err = nil;

    self.session = [[[SpotifySession alloc] initError:&err] autorelease];

    self.session.delegate = self;

    if( self.session)

    [self.session loginUser:@»usuario» password:@»password»];

    else {

    UIAlertView *alert =

    [[UIAlertView alloc] initWithTitle:@»Error en SpotifySession»

    message:[err localizedDescription]

    delegate:nil

    cancelButtonTitle:@»OK»

    otherButtonTitles:nil];

    [alert show];

    }

    }

    El resultado de la operación llegará por el delegate. Es necesario implementar algunos métodos que se ejecutarán una vez procesadas nuestras credenciales.

    Si el login fue correcto es el momento justo para obtener la lista de favoritos o starred que la asignamos a una property del tipo SpotifyPlaylist.

    -(void)sessionLoggedIn:(SpotifySession*)session_ error:(NSError*)err;

    {

    if(err) {

    UIAlertView *alert =

    [[UIAlertView alloc] initWithTitle:@»Error en login»

    message:[err localizedDescription]

    delegate:nil

    cancelButtonTitle:@»OK»

    otherButtonTitles:nil];

    [alert show];

    }

    else

    {

    self.starred = self.session.starred;

    self.starred.delegate = self;

    }

    }

    Starred es una colección de SpotifyTracks que vamos a mostrar en cellForRowAtIndexPath con el nombre y el álbum en una celda del tipo UITableViewCellStyleSubtitle

    SpotifyTrack *track = [self.starred objectInTracksAtIndex:indexPath.row];

    cell.textLabel.text = track.name;

    cell.detailTextLabel.text = track.artistName;

    Importante: las operaciones sobre las listas y tracks corren en otro thread., Puede suceder que al solicitar la data de un track, ella no este disponible y en la celda se vea el texto «[loading]». Si desplazamos la pantalla con el dedo, aparecerán los datos de los temas. Es un detalle a mejorar!.

    Bueno, dejo para el próximo artículo cómo implementar el Play de un track.

    Me interesaría conocer sus opiniones al respecto, los invito a que comenten el artículo volcando sus experiencias o ideas al respecto.

    Un artículo de Angel Traversi

    Enlaces relacionados

    Desarrollo iOS: Incorporemos Spotify en nuestras aplicaciones, parte 1

    Desarrollo iOS: Incorporemos Spotify en nuestras aplicaciones, parte 2

    In this article

    Join the Conversation

    3 comments

    1. Anónimo

      Son unos artículos increíbles de ayuda, Angel. Te los agradezco mucho, es material de primera.

      Muchas gracias a ti y a Faq-mac por publicarlos. Sois la caña.

    2. Anónimo

      Muchas gracias, que bueno que te sea útil!!

    3. Anónimo

      No, Angel. Muchas gracias a ti. Son unos pedazo de artículos y a mi me están sirviendo también de gran ayuda. No hay nada como tener ejemplos para jugar y aprender. Te has ganado unos galones en el Mac por compartir tus conocimientos.

      Muchas gracias también a la gente de faqmac. No se donde lo leí en los comentarios pero si, esto es la Librería de Alejandría.