Nem triviális feladat költséghatékonyan lecserélni egy alkalmazás alap funkcionalitását. Mi pontosan ezt a feladatok végeztük el akkor, amikor egy meglévő streaming szolgáltató mellé integráltunk egy újat anélkül, hogy bármely magasabb szintű logikához hozzányúltunk volna.
Cikksorozatunk előző részében részletesen beszéltünk arról, hogy egy zenelejátszó platformba hogyan integráltuk bele a Spotify Web API és Connect szolgáltatását. A cél az volt, hogy egy zenelejátszót szolgáltatást hozzunk létre amibe bármelyik nagyobb streaming platform felhasználója be tud jelentkezni. Ebben a cikkben a platformba általunk integrált másik nagy streaming szolgáltatójának keretrendszerét fogjuk elemezni.
Kis történelem
Az Apple 2000-es évek elején kavarta fel az állóvizet az akkor forradalminak számító iTunes zenelejátszójával és online zeneáruházával. Akkoriban az internetes fájlmegosztókon terjedő kalózmásolatok rengeteg pénzt vettek ki a kiadók zsebéből. A kezdeti üzleti modell az volt, hogy 99 centért bármilyen zeneszámot meg lehetett venni és ki lehetett írni CD-re vagy iPodra. Akkoriban a Napsteren és a hozzá hasonló fájlmegosztókon keresztül történt az online média anyagok cseréje, az Apple online áruháza egy minőségibb és mindenki számára kényelmesebben használható megoldással szolgált. Az iTunes bevált és az onlien zeneértekesítés etalonja volt az 2010-es években.

A 2011-es évben induló Spotify kezdte megváltoztatni a trendet és az előfizetéses modelljével. A fix áron kínált zeneszámok piaca megdőlni látszott, hisz ez a modell az offline zenelejátszókra, adathordozókra volt kitalálva. Az okostelefonok megjelenésével sokkal inkább előretört a szolgáltatás alapú modell ahol a felhasználó fix előfizetési díjért korlátlan zenekönyvtárral rendelkezhet. A Spotify megoldására az Apple-nek sokáig nem volt válasza, majd 2015-ben megnyílt az Apple Music ami leváltotta az iTunes klasszikus zeneértékesítési modelljét az új előfizetéses modellre.
Az Apple és a Spotify is kínál eszközöket azon fejlesztők számára akik integrálni szeretnék valamelyik szolgáltatót saját alkalmazásukba. Az előző cikkben láthattuk, hogy a Spotify Connect és a Web API hogyan integrálható bele egy webalkalmazásba. Ebben a cikkben elmeséljük, hogy milyen volt az Apple MusicKitJs megoldásával megvalósítani ugyanazt a funkcionalitást, mint amit a Spotify esetében.
Alapok
Az első dolog ami szembetűnt, hogy a Spotify eszközei rendkívül jól dokumentáltak. A fejlesztők számára rendelkezésre áll részletes API dokumentáció, példakód, példa kérés és válasz páros sőt, online konzolon ki is próbálható mind.
Ezzel szemben az MusicKitJs gyakorlatilag a képzeletünkre bízza az API működését. A dokumentációban szereplő példakódot könnyen érthetőek, de a hiányzó dokumentáció és a rendkívül sok megválaszolatlan probléma mellett nagyon nehéz volt folyamatosan haladni a fejlesztéssel.
Szerencsére könnyen rá lehet jönni, hogy hogyan kell integrálni a MusicKitet egy webes alkalmazásba.
MusicKitJs vs Spotify
A Spotify eszközeivel való munkáról az előző részben beszéltünk, most össze fogjuk mérni a két rendszert fejlesztői szempontból.
Röviden a Spotify zenelejátszója 2 különböző szolgáltatásból tevődik össze: egy vezérlő API-ból és egy lejátszó engine-ből. Ez azért van így mert alapvetően ez a rendszer lejátszók távoli vezérlésére lett kitalálva. Ezzel szemben az Apple megoldásában minden egyben van. Az engine-en keresztül kérhetjük le a felhasználó könyvtárát, állíthatunk össze lejátszási listákat és vezérelhetjük a lejátszást. Az Apple megoldása pontosan a mi felhasználásunkra kell kitalálva, azaz a böngészőbeli lejátszásra.
MusicKitJs-ben a lejátszások jelenlegi állapota közvetlenül lekérhető az engine-ből, ezzel szemben Spotify esetében ehhez API hívást kellett hívnunk, ami késleltetéssel adott választ a kérésünkre. Spotify esetében a friss lejátszás állapotának hiánya vezetett a szinkronizációs problémákhoz.
Felhasználó beléptetése
A felhasználó beléptetése lőtt konfigurálnunk kell az MusicKitJs engine-t melyhez létre kell hoznunk egy fejlesztői JWT tokent. A fejlesztői token létrehozásához adunk egy példakódot ami generálja majd teszteli számunkra a létrehozott kulcsot. Az Apple MusicKitJs engine konfigurációja után mindössze annyi dolgunk van, hogy elhelyezzünk egy gombot az Angular frontenden, amire kattintva az engine továbbítja a felhasználót a beléptetéshez.
Ezek után készen vagyunk. A felhasználó beléptetése után olvasni tudjuk a zenekönyvtárát és le tudjuk játszani a zenéit. A MusicKitJs használata során szembetalálhatjuk magunkat rosszul megfogalmazott, félrevezető hibaüzenetekkel, de kis keresés után meg lehetett oldani minden felmerülő problémát.
MusicKitJs konklúzió
Ha a Spotify rendelkezne egy közvetlenül vezérelhető lejátszóval, akkor biztosan azt a megoldást preferálnánk, mert könnyen lehet rá fejleszteni a kiforrott dokumentációnak köszönhetően. Sajnos az Apple MusicKit megoldsán látszik, hogy nem sok energiát fektettek a létrehozásába, de streaming szolgáltatás integrálására elégséges működést biztosít. Egyszer eljön annak az ideje amikor eljön a MusicKitJs második verziója, ami reményeink szerint magasabb szintű dokumentáltság mellett fog megtörténni lehetőleg minél hamarabb.
Platform születése
Nem triviális feladat költséghatékonyan lecserélni egy alkalmazás alap funkcionalitását. Mi pontosan ezt a feladatok végeztük el akkor, amikor egy meglévő streaming szolgáltató mellé integráltunk egy újat anélkül, hogy bármely magasabb szintű logikához hozzányúltunk volna.
Egy szoftver onnantól számít jól megtervezettnek, ha bármely alap szolgáltatását a jövőben költséghatékonyan bővíthetjük vagy akár le is cserélhetjük. Előbb utóbb minden szoftvert eléri a változtatás igénye és amennyiben részletesen dokumentált folyamatokon keresztül született a szoftverünk, akkor nem kell félnünk attól, hogy aránytalanul drága lesz a bővítésbe/módosításba való beruházás.
A kezdetektől fogva úgy terveztük streaming platformunkat, hogy egy új szolgáltató beépítése ne okozzon semmiféle fejfájást. Erről a folyamatról egy következő cikkben fogunk mesélni.