Einleitende Worte
Unabhängig davon, wie sehr sie Apple für die geschlossene Natur der Plattform und des Ökosystems selbst schelten, sind einige ihrer Lösungen eine Ausnahme. Es gibt viele Streaming-Dienste auf dem Markt, aber die Bereitstellung eines vollwertigen SDK für das Streaming von Produkten von Drittanbietern ist äußerst klein. Für den russischen Markt ist die Liste der offiziell verfügbaren SDKs auf Deezer und Apple Music beschränkt. Wenn Spotify auf unseren Markt kommt, werden natürlich mehr SDKs verfügbar sein, aber bisher gibt es zwei Player, von denen nur einer eine breite Anwenderbasis hat.
So kam es, dass ich Erfahrung mit dem Deezer SDK für Android hatte und gerade aktiv mit dem Apple Music SDK ( MusicKit ) für iOS arbeite . Der Hauptunterschied zu den Erfahrungen mit Deezer besteht darin, dass MusicKit die Spitze des Eisbergs ist und auch eine öffentlich verfügbare API ist. Im Gegensatz zu Deezer, bei dem das Wiederholen der meisten Funktionen der offiziellen Anwendung nur ein langwieriger Prozess ist, ist es unmöglich, die Funktionen von Apple Music-Webseiten nur mit der öffentlichen API zu wiederholen. Selbst wenn Apple MusicKit in seinen Lösungen verwendet, verwendet es zusätzlich eine Vielzahl von undokumentierten API-Anforderungen und privaten APIs, die von Sterblichen nicht verwendet werden dürfen.
In dem Artikel werde ich über die Arbeit mit MusicKit aus der Sicht des Entwicklers im Zusammenhang mit der Implementierung recht „ einfacher Aufgaben “ sprechen: Durchsuchen Sie den Katalog, zeigen Sie Bilder in den Suchergebnissen an, holen Sie sich Songs, Empfehlungen und spielen Sie sogar Musik. Mit Blick auf die Zukunft werde ich sagen, dass ein Großteil der oben genannten Punkte für die Arbeit mit Apple Music in Android und Javascript gilt.
Bei Bedarf bin ich bereit, detaillierte Antworten mit einem Code für Fragen in den Kommentaren zu geben.
Fliegen von Schnitzel trennen
Wenn Sie mit MusicKit unter iOS arbeiten, müssen Sie mit den folgenden Entitäten interagieren:
- StoreKit für die Autorisierung in Apple Music und das Anbieten eines Abonnements für den Dienst ( Verweis, wenn Sie das Partnerprogramm abonnieren können )
- HTTP-API zum Suchen und Abrufen verschiedener Informationen aus einem Verzeichnis
- iTunes Search API zum Durchsuchen des iTunes-Verzeichnisses (eine sehr nützliche Alternative zur HTTP-API ). Apple gibt ein Limit von maximal 20 Anfragen pro Minute an. Dies ist häufig ausreichend, wenn Anfragen von Geräten der Benutzer gestellt werden
- Media Player zum Abspielen und Verwalten der Warteschlange
Wenn Sie eine Verbindung zu einem Partnerprogramm herstellen , können Sie außerdem den Zugriff auf den Metadaten-Dump für Enterprise Partner-Feeds anfordern, den Apple anstelle häufiger Anfragen an die iTunes-Such-API empfiehlt.
Und für alle Fälle ist Music.app die Musik-App auf iOS-Geräten, die der offizielle Apple Music Player ist.
Informationsquellen in absteigender Reihenfolge ihres Nutzens:
- Offizielle Dokumentation
- Durchsuchen Sie die gesamte Apple- Dokumentation
- Wissenschaftliches Experiment Methode 1 mit HTTP API
- Entwicklerkonsole in Ihrem bevorzugten Browser, angeheftet an die Webseite des Unternehmens, das an Apple Music interessiert ist
- Apple Entwicklerforen
- Stapelüberlauf
Suche. Bilder
Der naheliegendste Weg, um zu überprüfen, ob in Ihrer Bewerbung etwas getan werden kann, ist die Tatsache, dass so etwas in der offiziellen Bewerbung verfügbar ist. Hier nehmen wir zum Beispiel eine Suche. Wir suchen die Gruppe "The Police" und in Music.app
wir ein Foto der Gruppe mit einem lächelnden Sting:

Gut, wir verwenden die Such-API . Bei der Ausgabe haben wir den artwork
Schlüssel mit einem eingebetteten url
Link für alles außer für Künstler. Es ist seltsam. Überprüfen Sie noch einmal, in Music.app ist alles da. Darüber hinaus verfügt die Weboberfläche auch über ein Foto, und ein Link zur Webseite ist in der json-Suchmaschinen-API verfügbar.
Die iTunes-Such-API artistLinkUrl
Bild auch nicht, enthält jedoch auch die Adresse der Webseite mit dem artistLinkUrl
Schlüssel in der artistLinkUrl
.
Nun, was zu tun ist, Sie müssen die Webseite herunterladen und die Bildadresse daraus abrufen. Glücklicherweise haben die Entwickler darauf geachtet und die Bildadresse in den Metainformationen registriert:
<meta property="og:image" content="https://is5-ssl.mzstatic.com/image/thumb/Features113/v4/bb/a2/66/bba266dd-570b-bff7-d7c6-777982582964/mzl.tdrwskof.jpg/1200x630cw.png" id="ember52310559" class="ember-view">
Formal haben wir bereits gegen die Apple-Regeln verstoßen, die das "Scrapen" ihrer Webseiten verbieten. Tatsächlich tun dies alle Anwendungen von Drittanbietern, mit Ausnahme derjenigen, die Bilder mit Diensten von Drittanbietern suchen.
Es gibt noch ein Minus: Wir fordern eine Seite mit einer Größe von mehreren hundert Kilobyte an. Für eine Anwendung, die bereits große Datenmengen steuert ( Musik abspielen ), ist dies tolerierbar ( insbesondere wenn Sie bedenken, dass die Daten in komprimierter Form übertragen werden ), im Allgemeinen jedoch nicht sehr.
Die Größe der Bilder kann an Ihre Bedürfnisse angepasst werden: In der url
befinden sich Vorlagen zum Ersetzen ( {w}
, {h}
), und der Link zum Bild auf der Webseite hat dasselbe Format, sodass es nicht schwierig ist, das Bild mit der richtigen Größe zu erhalten. Wenn Sie ein abgerundetes Bild erhalten möchten, müssen Sie vor der Erweiterung cw
hinzufügen.
Bonus für Bilder, die im Player angezeigt werden sollen
Während der Wiedergabe arbeitet der Player von Media Player
mit dem MPMediaItem
Konstrukt, das insbesondere ein Artwork
Objekt bereitstellt. Es ist sehr praktisch, um ein Bild eines Titels im Player anzuzeigen. Das einzige Problem ist, dass dieses Objekt in der Praxis, wie auch immer man sagen mag, keine Bilder für das Streamen von Musik bereitstellt ( dies ist Musik von Apple Music ). Sie müssen also das MPMediaItem
"abspielen", das mit Titeln MPMediaItem
, die der Warteschlange hinzugefügt und heruntergeladen wurden Bild ist ähnlich wie Alben.
Suche nach Genre
ITunes und die Apple Music App enthalten Listen mit Genres und Top-Songs. Ein Genre zu finden sollte nicht schwierig sein, weil wir nach irgendetwas suchen können?
Dies ist weit davon entfernt. Die API sucht nicht nach Genre und bietet keine Liste von Genres. Es ist möglich, Informationen ( vom nützlichen Namen ) eines Genres über seine Kennung anzufordern.
Die meisten Informationen in der API enthalten jedoch nur den Namen des Genres, nicht die Kennung.
Der Vorteil für iTunes ist das Entladen aller Genres ( alle, einschließlich der "Genres" mobiler Anwendungen ). Kennungen von Genres ( wie andere Kennungen von iTunes ) entsprechen vollständig den Kennungen in Apple Music. Das Entladen ist für alle Regionen verfügbar (die Region wird im Schlüssel cc
, nicht in der storefront
wie in der Apple Music API ), aber tatsächlich unterscheiden sich nur die Namen ( sie werden übersetzt ). Die Struktur der Genres ist hierarchisch und es gibt Wiederholungen der Namen der Genres.
Im Allgemeinen muss eine Suche nach Genres vor Ort durchgeführt werden. Beachten Sie dabei, dass Funk Jazz, Jazz Funk und Jazz Funk ein und dasselbe sind. Nicht schwierig, aber nicht so einfach, wie die Such-API zu bitten, nach Genre zu suchen.
Nachdem Sie ein Genre gefunden haben, können Sie eine Tabelle (eine Liste der beliebtesten Songs ) für dieses Genre anfordern . Für seltene Genres ist es durchaus möglich, nur 3 Songs zu veröffentlichen.
Unterhaltsame Tatsache: Für einige Alben und Künstler ( Ed Sheeran von den berühmten ) zeigt nur eines der Genres einfach das Top-Level-Genre von "Musik" an. Wenn Sie Empfehlungen basierend auf Genres abgeben möchten, sollte dieses Genre ignoriert werden.
Künstlerlieder
Wenn eine Anwendung am häufigsten Songs eines Künstlers (einer Musikgruppe ) abspielen muss, bedeutet dies, dass beliebte Songs dieser Gruppe abgespielt werden müssen. Apple Music ermöglicht es, Songs als "Songs" 2- Link für den Künstler anzufordern. Die Ausgabe hat maximal 20 Songs 3 , die eindeutig nach Beliebtheit sortiert sind.
Manchmal möchten Sie immer noch ein bisschen mehr Songs bekommen. Bei sehr beliebten Gruppen besteht die Möglichkeit, Wiedergabelisten wie " [Künstlername]: Essentials " und " [Künstlername]: Details " (" [Künstlername]: Nächste Schritte ") abzurufen Im Allgemeinen ist diese Option nicht geeignet. Eine weitere Option: Nehmen Sie 20 beliebte Songs und erledigen Sie den Rest der Alben. Der Vorteil von Apple Music ermöglicht es, sofort alle Künstleralben ( Links wie albums
) und alle darin enthaltenen Songs ( include="tracks"
) in einer Anfrage abzurufen.
Wenn Sie jedoch alle Songs des Künstlers erhalten, tritt ein anderes Problem auf: Sie müssen die beliebtesten aus all diesen Songs auswählen. Leider bietet die API für Beliebtheitsinformationen keine 4 . Sie können zufällige Songs aus der gesamten Liste entnehmen. In der Praxis führt dieser Ansatz jedoch dazu, dass häufig völlig uninteressante Aufnahmen ( Live-Transkripte, Probenaufnahmen, Einsiedeleien usw. ) abgespielt werden, was sich besonders in sehr beliebten Gruppen bemerkbar macht 5 .
Lassen Sie uns versuchen, populäre Songs auf eine andere Art und Weise zu bekommen. Bereits vor dem Aufkommen von MusicKit begann Apple, Such-APIs im iTunes Store bereitzustellen. Wie bereits erwähnt, sind der Katalog im Apple Music und im iTunes Store identisch 6 und dementsprechend sind auch die Kennungen der Titel identisch. Diese API gibt standardmäßig 50 Songs zurück, Sie können jedoch bis zu 200 Songs anfordern. Die Ergebnisse sind auch nach Beliebtheit sortiert.
Interessanterweise verwendet Apple selbst keine dieser Optionen in seiner eigenen Weboberfläche. Sie verwenden die undokumentierte ( gelesene, private ) API 7 , bei deren Ausgabe alles fehlt, einschließlich der Kennung ( und nicht nur des Namens ) des Genres und des Beliebtheitsindex. Ich habe es nicht gewagt, diese API in der Praxis 8 zu verwenden , da Genre-IDs durch umgekehrte Suche nach Genre-Namen 9 erhalten werden können und der numerische Beliebtheitsindex nicht so wichtig ist, wenn Sie eine nach Beliebtheit sortierte Liste von Songs erhalten.
Die lustige Tatsache, die ich das " Hugh Laurie-Problem " nenne, ist, dass der Apple Music-Katalog Tonnen von nicht-musikalischen Inhalten enthält. Insbesondere verschiedene Zusammenstellungen aus Comedy-Shows und Stand-Ups. Dies ist einerseits in Ordnung ( wir haben für die Musik bezahlt, aber wir haben auch lustige Dialoge mit Stephen Fry, die Sie sich vor dem Schlafengehen anhören können ), und andererseits führt es zu einer Art Geschwätz, wenn Sie aufgefordert werden, die Musik einzuschalten. Wenn der Betriebskontext der Anwendung direkt anzeigt, dass der Benutzer Musik hören möchte, muss er dementsprechend diejenigen aus der Liste der " Songs " entfernen, deren Genres als " gesprochenes Wort " und " Komödie " bezeichnet werden.
Empfehlungen
Das Spielen von Empfehlungen (es handelt sich auch um „ ähnliche Songs “, „ Radiosender “, „ Sie werden es mögen “ usw.) ist zur Grundfunktionalität von Streaming-Playern geworden. Herkömmlicherweise können die Empfehlungen in zwei Typen 10 unterteilt werden : für den Benutzer ( basierend auf dem Hörverlauf, den Einkäufen und Vorlieben ) und für das Musikobjekt ( Künstler, Titel, seltener Album und Wiedergabeliste ).
Mit den Einstellungen des Benutzers in Apple Music 11 ist formal alles in Ordnung: Sie können eine Liste persönlicher Empfehlungen anfordern , die " persönliche Mixe " ( Wiedergabelisten ) und empfohlene Alben enthält. Aus Alben kann eine Liste von Titeln unter Verwendung der API ( tracks
) für Wiedergabelisten ähnlich abgerufen werden. Beachten Sie, dass Tracks nicht nur Songs ( type = "songs"
), sondern auch Videoclips enthalten können, sodass eine zusätzliche Filterung der empfangenen Daten nicht schadet.
Bei anderen Empfehlungen ist alles etwas komplizierter. Wenn Sie sich Music.app ansehen, werden dort " ähnliche Künstler " angezeigt und Sie können den " Radiosender " für diesen Künstler einschalten. Letzterer verliert die Mischung aus dem Künstler und Empfehlungen an ihn.

Es scheint, dass alles einfach ist: Für Künstler gibt es wahrscheinlich eine Verbindung von " ähnlichen Künstlern ". Ich beeile mich zu verärgern, es gibt keine solche Verbindung. Es gibt auch keine Ähnlichkeitsinformationen im Enterprise Partner Feed-Datenschema.
Okay, also können wir einen " Radiosender " für den Künstler anfordern und eine Liste der Songs bekommen? Und wieder, nein, wir können wirklich einen Radiosender anfordern, dessen Kennung in der Ausgabe der Verbindungen des Künstlers liegt. In den playParams
gibt es jedoch keine Informationen zu den Songs, Alben oder Künstlern, die abgespielt werden. Es gibt nur ein Serviceobjekt mit Informationen zum Abspielen von playParams
. Die Idee mit playParams
einfach: Wir geben dieses Wörterbuch 12 in die Wiedergabewarteschlange ein und hören zu.
Dies ist alles gut, wenn Sie nur einen Radiosender abspielen möchten ( wie es Music.app tut ), aber was ist, wenn Sie Songs von Radiosender 13 mit etwas anderem mischen möchten? Natürlich brauchen wir irgendwie eine Liste ähnlicher Künstler.
In Media Player
spielen Wiedergabewarteschlangen eine wichtige Rolle, insbesondere MPMusicPlayerControllerMutableQueue . In der Warteschlange können Sie: Deskriptoren nach einem bestimmten abspielbaren Objekt einfügen, bestimmte Objekte löschen und eine Liste aller Objekte in der Warteschlange abrufen. Wenn wir Objekte nach Ausgabe abfragen, sollten wir ein Array von MPMediaItem
. Insbesondere MPMediaItem
enthält die Kennung des Songs . Es gibt nur ein Problem: Warteschlangenkonstruktoren sind keine öffentliche API. Ich werde übersetzen: Media Player
kann eine vorgefertigte Warteschlange (manchmal bearbeitbar ) bereitstellen, aber es ist unmöglich, sie selbst zu erstellen 14 .
Nun, ein wenig in Richtung Krücken zu graben kann hilfreich sein. Wenn Media Player
mir eine variable Warteschlange geben kann, muss ich sie nehmen. Dazu müssen Sie mit dem aktuellen ( Singleton- ) Player arbeiten, also müssen Sie schnell handeln, da der Benutzer sonst möglicherweise etwas falsches verliert und der Player noch Zeit hat, die bisher nicht benötigten Songs vorzuladen. Wir ändern die aktuelle Wiedergabewarteschlange ( fügen den Stationsdeskriptor hinzu ), schauen uns an, was passiert ist, setzen die Änderungen in der Warteschlange mit einer neuen Transaktion zurück ( löschen, was tatsächlich zur Warteschlange hinzugefügt wurde ).
Leider stellen wir fest, dass nur zwei MPMediaItem
Objekte zur Warteschlange MPMediaItem
. Beide sehen aus wie Songs ( es gibt den Namen des Künstlers, den Namen des Tracks, die Länge des Tracks ), enthalten jedoch nicht die Kennung des Songs. Wenn Sie sich Music.app ansehen, stellen wir fest, dass dort alles zusammenläuft: Wenn Sie den Radiosender einschalten, wird das Lied abgespielt, und in der Warteschlange wird nur ein Lied abgespielt. Wenn Sie zum nächsten Titel wechseln, wird die Warteschlange aktualisiert.
Es macht keinen Sinn, Krücken mit Radiosendern weiter zu bauen, Sie müssen andere Optionen verwenden.
Denken Sie daran, dass in Music.app und der Weboberfläche ähnliche Künstler angezeigt werden. Ähnliche Künstler gibt es nur für die beliebtesten Bands 15 . Auch hier müssen Sie auf die verbotene Methode zum Parsen einer Webseite zurückgreifen. Von den Profis: Wir laden bereits eine Webseite herunter, um ein Bild zu erhalten, sodass wir sofort ähnliche Künstler daraus abrufen können.
Im HTML-Seitencode sehen wir ein großes json-Objekt, von dem wir zuerst die Kennungen ähnlicher Künstler ( ["data"]["relationships"]["artistContemporaries"]
) ["data"]["relationships"]["artistContemporaries"]
:

und dann erhalten wir unter Verwendung dieser Bezeichner die Künstlerdaten von demselben json ( ["included"]
mit dem Typ lockup/artist
):

Mit den Identifikatoren der Künstler können wir ihre Tracks anfordern. Mit der API können Sie mehrere Künstler anhand ihrer Kennungen in einer einzigen Anforderung mit aktivierten Links anfordern. Leider gibt die API in der Praxis einen Fehler zurück, der darauf hinweist, dass es unmöglich ist, dem Ergebnis eine Liste von Spuren hinzuzufügen. Dies kann nur erfolgen, indem Künstler einzeln oder direkt Songs für einen einzelnen Künstler angefordert werden . In diesem Fall können Sie die bereits erwähnte iTunes-Such-API verwenden, die einige nützlichere Informationen liefert.
Die Listen der " ähnlichen Künstler " in Apple Music sind ziemlich gut, aber in der Praxis erweisen sie sich oft als leer. Bei einer leeren Liste von Empfehlungen müssen Sie Dienste von Drittanbietern verwenden. Klassiker - Last.fm, etwas raffinierter - Spotify. Die Ergebnisse beider müssen mit Objekten im Apple Music-Katalog übereinstimmen. Die Lösung "in der Stirn" besteht darin, nach jedem Künstler mit Namen mit genau einem Ergebnis zu suchen und dann die Songs wie oben beschrieben zu erhalten. Die Lösungen sind etwas interessanter, aber es ist teurer, musicbrainz für das Matching zu verwenden. Musicbrainz liefert Informationen zu Kennungen 16 in anderen Diensten, d.h. Sie können eine Kennung in Spotify einer Kennung in Apple Music zuordnen. Die Situation mit Last.fm ist noch besser: Last.fm gibt Bezeichner von musicbrainz in der Liste der Empfehlungen zurück. Der Overhead liegt in den Grenzen der Verwendung von musicbrainz. Bei viel Verkehr müssen Sie Ihren eigenen Klon von musicbrainz erstellen (gut, es ist möglich ) oder eine eigene API für eine Datenbank entwickeln , deren Speicherauszüge einfach heruntergeladen werden können.
Für neue Gruppen gibt selbst Last.fm keine Empfehlungen, alternative Optionen sind "Genre" -Empfehlungen. Wir nehmen die Genres des Künstlers (basierend auf dem Namen, den wir aus der bereits geladenen Liste aller Genres erhalten ), wir erhalten die Tabelle für jedes Genre, wir mischen die empfangenen Songs. Das ist besser als nichts.
Zwei Dinge sind untrennbar miteinander verbunden: Spieler und Warteschlange
Media Player ist für die Wiedergabe in iOS von Apple Music verantwortlich und ermöglicht Ihnen die Arbeit mit Musik von Apple Music und dem persönlichen Verzeichnis des Benutzers 17 . Das Framework ist auf hoher Ebene und in der Situation, mit Streaming-Inhalten auf eine Ebene unter 18 zu arbeiten , funktioniert dies nicht.
Das Framework bietet zwei Playern eine gemeinsame Softwareschnittstelle: Einer spielt Musik direkt in der Music.app-Anwendung ab und der andere arbeitet mehr oder weniger unabhängig. Das erste für etwas Ernstes zu verwenden ist sinnlos 19 . Und die Dokumentation liegt dreist 20, dass der zweite Spieler nicht im Hintergrund arbeitet
Von der architektonischen Seite aus ist die Arbeit mit dieser Angelegenheit einfach: Wir teilen dem Spieler mit, was er spielen soll ( z. B. Füllen der Warteschlange basierend auf einer Reihe von Song-IDs ) und steuern die Wiedergabe ( Wiedergabe, Pause, Weiter, Zurück ).
Es gibt keine direkte Steuerung der Wiedergabewarteschlange. Sie müssen eine Transaktionsänderung durchführen , die einige Zeit in Anspruch nimmt. Außerdem wird der completionHandler
Handler häufig mit einem Timeout-Fehler aufgerufen, der übersetzt bedeutet: " Ich weiß nicht, ob ich etwas tun konnte oder ob ich etwas anderes tue, aber ich bin es leid, auf mich selbst zu warten ." Meistens läuft die Transaktion gut und Fehler, die beim Handler auftreten, müssen ignoriert werden. Einige der Änderungen können auf einer etwas höheren Ebene vorgenommen werden. Wenn Sie jedoch bereits Transaktionsänderungen verwenden mussten, ist es besser, sie für alles zu verwenden.
Im Allgemeinen sind Warteschlangen sehr flexibel, und wenn es nicht wahrscheinlich ist, dass Ihre Anwendung einmal mit anderen Streaming-Diensten 21 funktioniert, können Sie mit Warteschlangen viele interessante Dinge tun, insbesondere angeben, zu welcher Zeit und wie lange das Element abgespielt wird.
Von den anderen " Minuspunkten " eines solchen Ansatzes auf hoher Ebene ist die Unfähigkeit zu erwähnen, Benutzeraktionen zu verarbeiten. Durch Drücken des Benutzers auf das Headset der Taste " Nächster Titel " wird das Programm " Was soll ich tun ? " Nicht angefordert. Der Spieler weiß besser, was zu tun ist, und wechselt den Titel selbst. Sie können also nur die tatsächlich abgeschlossenen Änderungen im Status des Spielers erfassen und nachträglich einige Entscheidungen treffen.
Auf der anderen Seite müssen Sie nicht viel tun: Die Informationen zum Abspielen auf dem Sperrbildschirm sind einfach vorhanden und alle darin enthaltenen Tasten funktionieren. Apple Watch und Siri können die Wiedergabe steuern, und das Streaming über AirPlay zu Apple TV funktioniert ab Box 22 .
Es ist möglich, die Funktionalität und die Benutzeroberfläche der Music.app-Warteschlange in Ihrer Anwendung zu wiederholen, aber die scheinbare Einfachheit von Drag'n'Drop-Elementen der Warteschlange stellt sich tatsächlich als Jonglieren von Transaktionen heraus, um die Warteschlange zu ändern und die gewünschte Warteschlange und die reale Warteschlange von 23 Spielern zu synchronisieren.
Tatsächlich ist die Arbeit mit der API auf anderen Plattformen nicht anders, aber die SDKs werden mit iOS nicht vollständig kopiert und sind an einigen Stellen bequemer 24 , obwohl die allgemeine Idee einer Tandemwarteschlange und eines Players erhalten bleibt.
Unter Android können Sie also die aktuelle Warteschlange abrufen und die Elemente der Warteschlange ohne Tricks mit einer Transaktionsänderung verschieben ( aus der Warteschlange entfernen und mit gekreuzten Fingern an die richtige Stelle hinzufügen ).
MusicKit JS bietet auch spezielle Wrapper-Methoden für die Arbeit mit der Apple Music API.
Bei Verwendung von Wrappern können Sie jedoch nicht auf die Dokumentation der API selbst verzichten. Das Arbeiten mit der Warteschlange und dem Player ist nicht bequemer als das iOS SDK , aber mit kleinen Add-Ons kann es erträglich werden .
Ein paar Worte zum Simulator
Sie können im Simulator mit MusicKit nur im Zusammenhang mit der Kommunikation mit der HTTP-API arbeiten. Selbst in diesem Fall müssen Sie das Token des Benutzers für die Ausführung von Anforderungen stabilisieren und dürfen es nicht über StoreKit abrufen . Es ist völlig unmöglich, Musik von Apple Music im Simulator abzuspielen, da die Anwendung Music.app fehlt.
Tatsächlich müssen Sie Ihre eigenen Add-Ons über das SDK entwickeln und beim Ausführen im Simulator alternative ( Schein- ) Implementierungen verwenden. Tatsächlich ist der Simulator während der Entwicklung nur für die Arbeit an der Benutzeroberfläche nützlich. Eine eigene Abstraktion ist auch in automatisierten Screenshots für die Anwendung nützlich ( und tatsächlich beim Erstellen von Screenshots mit einem Simulator ), da es äußerst unrentabel und dumm ist, beide Generationen von „großen“ iPad-Profis im Arsenal zu haben, um nur Screenshots Ihres Players auf beiden zu machen .
Als interessantes, aber nicht sehr nützliches Experiment können Sie eine alternative Implementierung Ihres eigenen High-Level-Players basierend auf MusicKit JS vornehmen.
Informationen zu Enterprise Partner Feed
Einerseits stellt Apple auf Anfrage einen Metadaten-Dump zur Verfügung und fordert ihn auf, ihn zu verwenden, um die Belastung der API zu verringern und Informationen abzurufen, über die die API nicht verfügt. Auf der anderen Seite haben wir ein klares Problem mit Hühnchen und Eiern: Der Zugriff auf das Partnerprogramm wird durch Angabe eines Links zur Anwendung bereitgestellt. Es ist ziemlich schwierig, eine Anwendung mit den Daten zu entwickeln, die nur mit der im App Store veröffentlichten Anwendung abgerufen werden können.
Und natürlich geben die Daten nicht die erste Ecke. Jeder Antrag wird innerhalb von fünf Werktagen geprüft. Zum Zeitpunkt dieses Schreibens ist es mir nicht gelungen, einen Speicherauszug mit Metadaten in meine Hände zu bekommen. Apple hat meine Bewerbung ohne Angabe der genauen Gründe verpackt. , - " Apple Music " , Apple . - , -, . , Apple , , .
, , . Apple Music ( , ), . , , Apple Music . , , .
Enterprise Partner Feed :
- Apple Music API iTunes Search API
- (" "), -
, - :
- . , , .
, . , - - - , , . , - , -.
- , SDK , . Apple 25 SDK 26 , , , API , SDK .
- , " code level " . " Q&A " " Tech Notes ", , - .
- . , , . API ( Last.fm, musicbrainz, iTunes Search API ) IP . Apple Music . " " , 27 .
- , Apple Music API, , . - App Store , ( ) , , ( ). 28 , , , 29 . Apple 30 .
- , - Apple Music — Ember. , , html DOM Javascript.
- -, , . , .
SDK, batch API, , « » Apple Music. , , SDK . SDK, .
, .
1 ( )
2 ,
3 , Music.app - ( ), API ( "" )
4 limit
: Specified limit for relationship 'songs' exceeds maximum of 20
5 The Beatles
6 , Apple Music iTunes Store. API iTunes Store `isStreamablez, Apple Music .
7 : https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewArtistSeeAll?cc=ru&ids=424279384§ion=0
8 , , , iTunes ( ) iTunes Store
9
10 , !
11 , Apple Music : , ,
12 , MPMusicPlayerPlayParametersQueueDescriptor
13 Apple Music , ( ) . .
14 , , App Store
15 ( ) ( ) ( ) ( ) . .
16 -,
17 , iTunes Store iTunes Match
18 API URL
19 — -, . , .
20 : ( When your app moves to the background, the music player stops playing the current media. ). AVPlayer
, , Info.plist
.
21 .
22 , MPMediaItem
23
24 , SDK , , . iOS Media Player
, API .
25 , — , .
26 SDK , Apple Music. Apple , .
27 , — . , Enterprise Partner Feed, musicbrainz, API. , ( ) . , .
28 RIP
29 API Bing
30