Spotify et ses outils d'intégration

Après avoir travaillé avec les technologies Deezer, nous allons voir quels outils sont proposés par Spotify pour une intégration web ou mobile. Spotify proposant une écoute gratuite sur son client ordinateur et depuis peu sur mobile (parsemé de publicité), il se démarque de Deezer qui nécessite d’avoir un compte Premium pour une utilisation sur smartphone.  L’intégration pour les développeurs est aussi différente, mais à quelle mesure? C’est ce que nous allons voir.

La liste des outils d’intégrations Spotify est plutot fournie, un outil défini par utilisation:

  • Spotify Widget (orienté web)
  • Spotify Apps (directement intégré dans le logiciel Spotify client) 
  • Metadata API (explorer la bilbliothèque Spotify par des requêtes)
  • libSpotify (SDK langage C)

Cet article ne présentera qu’une partie de ces outils.

Spotify Widget

Les Spotify Widgets permettent une intégration web de boutons d’interaction comme “Follow button” ou “Play button”.

Cette intégration se fait directement via une balise en HTML. Vous pouvez la configurer avec différents paramètres tels que la taille minimale, le thème de l’iframe (ses couleurs), le type de vue (cover ou liste), etc. La génération de widgets est gratuit pour les développeurs ainsi que leurs utilisations, ce sera différent avec la suite.

Vous pouvez directement générer vos propres boutons via le portail Spotify de développement: Spotify Widget.

LibSpotify

La librairie LibSpotify, développée en langage C, est un outil qui va directement faire la passerelle avec l’API Spotify. Elle vous permet d’ajouter les services de musique de Spotify dans votre propre application. Il vous faudra un compte Premium pour l’utiliser car elle nécessite une clé générée seulement pour les développeurs enregistrés. Vous pouvez retrouver ces informations par ici.

Vu que LibSpotify SDK est basé sur du C (une chance pour nous), l’équipe de Spotify nous a directement fait un wrapper open-source pour de l’Objective-C : CocoaLibSpotify. On y retrouve toutes les fonctions nécessaires pour faire des applications sur Mac ou iPhone. CocoaLibSpotify est directement disponible en téléchargement sur Github.

CocoaLibSpotify

Installation

Il y a quelques subtilités à savoir sur CocoaLibSpotify si vous ne voulez pas perdre du temps inutilement.

Il vous faudra inclure tout le projet CocoaLibSpotify comme dépendance de votre projet.

N’oubliez pas d’inclure les frameworks nécessaires au bon fonctionnement de la librairie, à savoir:

  • SystemConfiguration.framework
  • CFNetwork.framework
  • libstdc++
  • CoreAudio.framework
  • AudioToolbox.framework
  • AVFoundation.framework
  • Security.framework

La clé générée par Spotify pour l’utilisation de sa librairie, enregistrée comme le fichier “appkey.c”, doit se situer dans le même dossier que le contrôleur que vous utiliserez. Il n’est pas nécessaire de l’ajouter comme ressource dans le projet Xcode, il faudra juste l’inclure comme le montre le projet “Simple Player”.

Enfin, une chose à savoir, c’est l’utilisation des “Flags” au niveau de la compilation. En effet, si vous regardez la rubrique Build Settings > Linking > Other Linker Flags, via la documentation, vous devriez y ajouter celle suivante : “-all_load -ObjC”. Ce qui nous intéresse est la notion “-all_load”.

Pour rappel, cette ligne force votre projet à charger tous les fichiers des archives qu’il contient (entre autres CocoaLibSpotify). Si vous l’enlevez, vous aurez directement une erreur comme quoi il ne trouve pas la moitié des fichiers nécessaires.

Maintenant, imaginons que vous avez une autre librairie (à côté de CocoaLibSpotify) qui elle ne doit pas charger tous ses fichiers: la librairie Google Analytics ne nécessite pas de les charger par exemple, si vous laisser le flag en question, vous tomberez sur des erreurs de symboles dupliqués (charger deux fois le même fichier). Pour cela, il va nous falloir utiliser le flag “-force_load” avec le chemin correspondant que nous permet bien plus de granularité. Il ne chargera que le contenu que vous lui indiquerez.

La ligne de commande devrait ressembler à ça:

Utilisation

Pour connecter un utilisateur, un contrôleur est déjà prévu à cet effet. Le défaut de celui ci est le manque d’une gestion de session comme il en existe sur Deezer. Cela veut dire qu’il faudra à chaque fois que votre utilisateur se reconnecte pour utiliser les services de votre application. Une fois connecté, CocoaLibSpotify gère un écran intermédiaire qui met en avant des fonctionnalités Spotify (lier son compte avec Facebook etc.). Au bout de la 3eme utilisation, on aimerait bien ne plus le revoir mais si vous voulez “bypasser” cet écran, il faudra recoder une partie du projet car ce n’est pas aussi simple de le supprimer.

Pour le chargement du contenu musicale, tout se fait de façon asynchrone, et si vous regardez les exemples fournis, ce sont des bloques asynchrones les uns dans les autres comme celui-ci, une fonction de test d’ajout d’une playlist:

Concrètement, j’aurai préféré un système de délégué et de callback pour envoyer une requête et récupérer sa réponse comme le système Deezer. De plus, Deezer a l’avantage de passer ses réponses en format JSON que nous pouvons directement traité, ici il faut obligatoirement travailler avec les classes Spotify.

Conclusion

Spotify propose des outils plutôt intéressant mais qui manque de diversité ainsi que de simplicité. Comparé à son concurrent Deezer, je trouve que Spotify reste un peu derrière au niveaux de ces outils de développeurs:

  • Manque SDK Android ou Web
  • Compte Premium obligatoire pour développement et utilisation
  • Aucun aperçu musicale pour les utilisateurs non Premium (sur mobile)

Il y a cependant une bonne base pour faire des applications innovantes si on a pas peur d’y passer du temps. A voir comment leurs outils évolueront dans le temps.

© 2022 Benoit Pasquier. All Rights Reserved
Author's picture

Benoit Pasquier

iOS Software engineer 🇫🇷, writing about Swift, iOS and more.

ShopBack 💰

Singapore 🇸🇬