كلمات تمهيدية
بغض النظر عن مدى تأنيب Apple على الطبيعة المغلقة للمنصة والنظام الإيكولوجي نفسه ، فإن بعض حلولها هي استثناء. هناك الكثير من خدمات البث في السوق ، لكن توفير SDK كامل الدفق للتدفق في منتجات الجهات الخارجية صغير للغاية ، وبالنسبة للسوق الروسية ، فإن قائمة SDKs المتاحة رسميًا مقصورة على Deezer و Apple Music. بطبيعة الحال ، عندما يأتي Spotify إلى السوق لدينا ، سيكون هناك المزيد من SDKs المتاحة ، ولكن حتى الآن هناك لاعبين واحد فقط لديه قاعدة مستخدمين واسعة.
لقد حدث أن واجهت تجربة مع Deezer SDK لنظام Android والآن أعمل بنشاط مع Apple Music SDK ( MusicKit ) لنظام iOS. والفرق الرئيسي من تجربة Deezer هو أن MusicKit هو قمة الجبل الجليدي ، بل هو أيضًا واجهة برمجة تطبيقات متوفرة للجمهور. على عكس Deezer ، حيث يعد تكرار معظم وظائف التطبيق الرسمي مجرد عملية طويلة ، فمن المستحيل تكرار وظيفة حتى صفحة الويب Apple Music باستخدام واجهة برمجة التطبيقات العامة فقط. حتى إذا كانت Apple تستخدم MusicKit في حلولها ، فبالإضافة إلى ذلك ، تستخدم الكثير من طلبات API غير الموثقة وواجهات برمجة التطبيقات الخاصة التي لا يُسمح للبشر باستخدامها.
سأتحدث في المقال عن العمل مع MusicKit من وجهة نظر المطور في سياق تنفيذ " مهام بسيطة " تمامًا: البحث في الفهرس ، وعرض الصور في نتائج البحث ، والحصول على الأغاني والتوصيات وحتى تشغيل بعض أنواع الموسيقى. في المستقبل ، سأقول أن الكثير مما سبق سيكون صحيحًا للعمل مع Apple Music في Android و Javascript.
إذا لزم الأمر ، فأنا مستعد لتقديم إجابات مفصلة مع رمز للأسئلة في التعليقات.
فصل الذباب من شرحات
عند العمل مع MusicKit ضمن نظام التشغيل iOS ، سيتعين عليك التفاعل مع الكيانات التالية:
- StoreKit للحصول على ترخيص في Apple Music وتقديم اشتراك في الخدمة ( إحالة إذا كان بإمكانك الاشتراك في البرنامج التابع )
- HTTP API للبحث عن المعلومات المختلفة واستردادها من الدليل
- واجهة برمجة تطبيقات بحث iTunes للبحث في دليل iTunes ( بديل مفيد جدًا لواجهة برمجة تطبيقات HTTP ). تشير Apple إلى حد أقصى قدره 20 طلبًا في الدقيقة ، وهذا غالبًا ما يكون كافيًا عند تقديم الطلبات من أجهزة المستخدمين
- مشغل الوسائط لتشغيل وإدارة قائمة الانتظار
أيضًا ، عند الاتصال ببرنامج تابع ، يمكنك طلب الوصول إلى تفريغ بيانات تعريف Enterprise Partner Feed ، الذي توصي Apple باستخدامه بدلاً من الطلبات المتكررة إلى واجهة برمجة تطبيقات iTunes Search API.
وفي الحال ، Music.app هو تطبيق Music على أجهزة iOS ، وهو مشغل Apple Music الرسمي.
مصادر المعلومات ، بترتيب تناقص فائدتها:
- الوثائق الرسمية
- البحث في جميع وثائق أبل
- تجربة العلوم الطريقة 1 مع HTTP API
- Developer Console في متصفحك المفضل ، مثبت على صفحة الويب الخاصة بالكيان محل الاهتمام في Apple Music
- منتديات المطور
- ستاكوفيرفلوو
البحث. الصور
إن أكثر الطرق وضوحًا للتحقق مما إذا كان يمكن القيام بشيء ما في التطبيق الخاص بك هي حقيقة أن شيئًا كهذا متاح في التطبيق الرسمي. هنا نأخذ ، على سبيل المثال ، البحث. نحن نبحث عن مجموعة "The Police" وفي Music.app
لدينا صورة للمجموعة مع Sting مبتسمة:

رائع ، سنستخدم واجهة برمجة تطبيقات البحث . في الإصدار ، لدينا مفتاح artwork
مع url
مضمن لكل شيء ما عدا الفنانين. هذا غريب. تحقق مرة أخرى ، في Music.app كل شيء هناك. علاوة على ذلك ، تحتوي واجهة الويب أيضًا على صورة فوتوغرافية ، كما يتوفر رابط لصفحة الويب في واجهة برمجة تطبيقات محرك البحث json.
واجهة برمجة تطبيقات iTunes Search API لا artistLinkUrl
الصورة أيضًا ، ولكنها تتضمن أيضًا عنوان صفحة الويب مع مفتاح artistLinkUrl
في artistLinkUrl
.
حسنًا ، ما عليك فعله ، عليك تنزيل صفحة الويب والحصول على عنوان الصورة منها ، لحسن الحظ ، اهتم المطورون بتسجيل عنوان الصورة في المعلومات الوصفية:
<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">
من الناحية الرسمية ، انتهكنا بالفعل قواعد Apple التي تحظر "إلغاء" صفحات الويب الخاصة بهم. في الواقع ، تقوم جميع تطبيقات الجهات الخارجية بذلك ، باستثناء أولئك الذين يبحثون عن الصور باستخدام خدمات الجهة الخارجية.
هناك ناقص واحد: نطلب صفحة بحجم مئات الكيلوبايت. بالنسبة للتطبيق الذي يحرك بالفعل كميات كبيرة من البيانات ( تشغيل الموسيقى ) ، يكون مقبولًا ( خاصة عندما تفكر في أن البيانات يتم نقلها في شكل مضغوط ) ، ولكن في الحالة العامة ، فهي ليست غاية.
يمكن ضبط أحجام الصور وفقًا لاحتياجاتك: في url
توجد قوالب للاستبدال ( {w}
، {h}
) ، وعلى صفحة الويب يكون للرابط الخاص بالصورة نفس التنسيق ، لذلك لا توجد صعوبة في الحصول على الصورة بالحجم الصحيح. إذا كنت ترغب في الحصول على صورة مقربة ، فستحتاج إلى إضافة cw
قبل التمديد.
مكافأة عن الصور لعرضها في اللاعب
أثناء التشغيل ، يعمل المشغل من Media Player
على بناء MPMediaItem
، والذي يوفر ، على وجه الخصوص ، كائن عمل Artwork
. إنه مناسب جدًا لعرض صورة مقطوعة في المشغل. المشكلة الوحيدة هي أنه في الممارسة العملية ، لا يوفر هذا الكائن ، بغض النظر عن ما يقوله الشخص ، صورًا لبث الموسيقى ( أي موسيقى من Apple Music ) ، لذلك عليك "تشغيل" MPMediaItem
تشغيله بأغاني تم إضافتها إلى قائمة الانتظار وتنزيلها الصورة تشبه الألبومات.
البحث حسب النوع
يحتوي تطبيق ITunes وتطبيق Apple Music على قوائم الأنواع والأغاني العليا فيها. لا ينبغي أن يكون العثور على نوع ما أمرًا صعبًا ، لأنه يمكننا البحث عن أي شيء؟
هذا أبعد ما يكون عن القضية. لا تبحث واجهة برمجة التطبيقات حسب النوع ولا توفر قائمة بالأنواع. من الممكن طلب معلومات ( من اسم مفيد - ) من هذا النوع بواسطة معرفه ،
لكن معظم المعلومات في واجهة برمجة التطبيقات تحتوي فقط على اسم النوع وليس المعرف.
تتمثل فائدة iTunes في تفريغ جميع الأنواع ( جميعها ، بما في ذلك "الأنواع" من تطبيقات الأجهزة المحمولة ). تتوافق معرفات الأنواع ( مثل معرفات أخرى من iTunes ) معرفات في Apple Music بشكل كامل. يتوفر التفريغ لجميع المناطق ( يشار إلى المنطقة في مفتاح cc
، وليس storefront
كما هو الحال في Apple Music API ) ، ولكن في الواقع تختلف الأسماء فقط ( يتم ترجمتها ). هيكل الأنواع هرمية وهناك تكرارات لأسماء الأنواع.
بشكل عام ، يجب إجراء البحث حسب النوع محليًا ، وتذكر أن موسيقى الجاز فونك والجاز فونك والجاز فونك واحدة ومتماثلة. ليس بالأمر الصعب ، ولكن ليس بالبساطة مثل طلب واجهة برمجة تطبيقات البحث للبحث حسب النوع.
بعد العثور على النوع ، يمكنك طلب مخطط ( قائمة الأغاني الأكثر شعبية ) لهذا النوع. بالنسبة للأنواع النادرة ، من الممكن تمامًا الحصول على 3 أغانٍ فقط.
حقيقة ممتعة: بالنسبة لبعض الألبومات والفنانين ( Ed Sheeran من الفنان الشهير ) ، يشير أحد الأنواع فقط ببساطة إلى المستوى الأعلى من النوع "Music". إذا كنت ترغب في تقديم توصيات بناءً على الأنواع ، فيجب تجاهل هذا النوع.
أغاني الفنان
عندما يحتاج أحد التطبيقات إلى تشغيل أغاني فنان ( مجموعة موسيقية ) ، فهذا يعني في أغلب الأحيان أن من الضروري تشغيل الأغاني الشعبية لهذه المجموعة. يجعل تطبيق Apple Music من الممكن طلب الأغاني كرابط "أغاني" للفنان. يحتوي الإخراج على 20 أغنية كحد أقصى 3 ، مرتبة بوضوح حسب الشعبية.
في بعض الأحيان لا تزال ترغب في الحصول على المزيد من الأغاني. مع المجموعات الشائعة جدًا ، هناك خيار للحصول على قوائم التشغيل مثل " [اسم الفنان]: أساسيات " و " [اسم الفنان]: التفاصيل " (" [اسم الفنان]: الخطوات التالية ") ، ولكن بشكل عام ، هذا الخيار غير مناسب. خيار آخر: أخذ 20 أغنية شعبية ، وإنهاء الباقي من الألبومات ، تتيح ميزة Apple Music إمكانية الحصول على جميع ألبومات الفنانين على الفور ( روابط مثل albums
) وجميع الأغاني الموجودة فيها ( include="tracks"
) في طلب واحد.
ولكن إذا حصلت على جميع أغاني الفنان ، فثمة مشكلة أخرى: عليك أن تختار الأغاني الشعبية من كل هذه الأغاني. لسوء الحظ ، لا توفر واجهة برمجة تطبيقات معلومات الشعبية 4 . يمكنك أن تأخذ أغاني عشوائية من القائمة بأكملها ، لكن في الممارسة العملية يؤدي هذا الأسلوب إلى التشغيل المتكرر للتسجيلات غير المهتمة تمامًا ( النصوص الحية ، وتسجيلات البروفات ، والنسج ، وما إلى ذلك ) ، وهو أمر ملحوظ بشكل خاص في المجموعات الشائعة جدًا 5 .
دعنا نحاول الحصول على الأغاني الشعبية بطريقة مختلفة. حتى قبل ظهور MusicKit ، بدأت Apple في توفير واجهات برمجة التطبيقات للبحث في iTunes Store. كما ذكرنا سابقًا ، فإن الكتالوج الموجود في متجر Apple Music و iTunes Store متماثلان 6 ، وبالتالي ، فإن مُعرّفات الأغاني هي نفسها أيضًا. تُرجع واجهة برمجة التطبيقات هذه 50 أغنية بشكل افتراضي ، ولكن يمكنك طلب ما يصل إلى 200 أغنية. يتم فرز النتائج أيضا حسب الشعبية.
ومن المثير للاهتمام أن Apple نفسها لا تستخدم أيًا من هذه الخيارات في واجهة الويب الخاصة بها. يستخدمون واجهة برمجة التطبيقات (API) الخاصة 7 ( للقراءة ، والخاصة ) ، والتي يصدر فيها كل ما هو مفقود ، بما في ذلك معرف ( وليس فقط اسم ) النوع وفهرس الشعبية. لم أكن أجرؤ على استخدام واجهة برمجة التطبيقات هذه في التمرين 8 ، نظرًا لأنه يمكن الحصول على معرفات الأنواع من خلال البحث العكسي بأسماء الأنواع 9 ، ولا يعد مؤشر الشعبية العددية مهمًا للغاية عندما تحصل على قائمة الأغاني مرتبة حسب الشعبية.
الحقيقة المضحكة التي أسميها " مشكلة هيو لوري " هي أن كتالوج Apple Music يحتوي على الكثير من المحتوى غير الموسيقي. على وجه الخصوص ، مجموعات مختلفة من العروض الكوميدية والمواقف. هذا جيد من ناحية ( لقد دفعنا ثمن الموسيقى ، ولكن حصلنا أيضًا على حوارات مضحكة مع ستيفن فراي يمكنك الاستماع إليها قبل الذهاب إلى السرير ) ، ومن ناحية أخرى ، تؤدي إلى نوع من الأحاديث عندما يُطلب منك تشغيل الموسيقى. وفقًا لذلك ، عندما يشير سياق تشغيل التطبيق مباشرةً إلى أن المستخدم يرغب في الاستماع إلى الموسيقى ، يتعين على المرء أن يحذف بشكل مستقل من قائمة " الأغاني " أولئك الذين تم تصنيف أنواعهم على أنها " كلمة منطوقة " و " كوميديا ".
توصيات
أصبح تشغيل التوصيات (وهي أيضًا " أغاني متشابهة " و " محطات إذاعية " و " ستعجبك " وما إلى ذلك) الوظيفة الأساسية لمشغلات البث. تقليديًا ، يمكن تقسيم التوصيات إلى نوعين 10 : بالنسبة للمستخدم ( استنادًا إلى تاريخ الاستماع والمشتريات والإعجابات ) وللكائن الموسيقي ( فنان ، مقطوعة ، الألبوم وقائمة التشغيل في كثير من الأحيان ).
مع تفضيلات المستخدم في Apple Music ، بشكل رسمي ، 11 كل شيء على ما يرام: يمكنك طلب قائمة بالتوصيات الشخصية ، والتي تشمل " مزيج شخصي " ( قوائم التشغيل ) وألبومات موصى بها. من الألبومات ، يمكن الحصول على قائمة الأغاني باستخدام API ( tracks
) لقوائم التشغيل بشكل مشابه. ضع في اعتبارك أن المقطوعات يمكن أن تشمل ليس فقط الأغاني ( type = "songs"
) ، ولكن أيضًا مقاطع الفيديو ، لذلك لن تؤذي عملية التصفية الإضافية للبيانات المستلمة.
مع توصيات أخرى ، كل شيء أكثر تعقيدًا بقليل. إذا نظرت إلى Music.app ، فسيتم عرض " فنانين مشابهين " هناك ويمكنك تشغيل " محطة الراديو " لهذا الفنان. هذا الأخير يفقد المزيج من الفنان والتوصيات له.

يبدو أن كل شيء بسيط: فبالنسبة للفنانين ربما يكون هناك صلة بين " فنانين مشابهين ". أسارع بالضيق ، لا يوجد مثل هذا الاتصال. لا يوجد أيضًا أي معلومات تشابه في مخطط بيانات موجز شركاء Enterprise.
حسنًا ، حتى نتمكن من طلب " محطة إذاعية " للفنان والحصول على قائمة الأغاني؟ ومرة أخرى ، لا ، يمكننا حقًا طلب محطة إذاعية ، معرفها هو في إصدار اتصالات الفنان. ولكن في معلومات المحطة لا توجد معلومات حول الأغاني أو الألبومات أو الفنانين الذين يتم playParams
، لا يوجد سوى كائن خدمة به معلومات لتشغيل playParams
. الفكرة بسيطة مع playParams
: نحن نطعم هذا القاموس 12 في قائمة انتظار الاستماع والاستماع.
كل هذا جيد إذا كنت تريد تشغيل محطة راديو فقط ( كما يفعل Music.app ) ، ولكن ماذا لو كنت ترغب في مزج الأغاني من محطة الراديو 13 مع شيء آخر؟ من الواضح أننا بحاجة بطريقة ما إلى الحصول على قائمة بالفنانين المشابهين.
في Media Player
، تلعب قوائم التشغيل دورًا مهمًا ، لا سيما MPMusicPlayerControllerMutableQueue . تسمح لك قائمة الانتظار بما يلي: إدراج واصفات بعد كائن معين قابل للعب ، وحذف الكائنات المحددة ، وكذلك الحصول على قائمة بجميع الكائنات في قائمة الانتظار. عند الاستعلام عن كائنات الإخراج ، يجب أن نحصل على صفيف من MPMediaItem
. و MPMediaItem
، على وجه الخصوص ، يتضمن معرف الأغنية . هناك مشكلة واحدة فقط: مُنشئو قائمة الانتظار ليسوا واجهة برمجة تطبيقات عامة ، وسأترجم: يمكن لـ Media Player
تقديم قائمة انتظار جاهزة ( قابلة للتحرير أحيانًا) ، لكن من المستحيل إنشاءها بنفسك 14 .
حسنًا ، يمكن أن يكون الحفر قليلاً نحو العكازات مفيدًا. إذا كان بإمكان Media Player
إعطائي قائمة انتظار متغيرة ، فأنا بحاجة إلى أخذها. للقيام بذلك ، سيتعين عليك العمل مع المشغل الحالي ( المفرد ) ، لذلك عليك أن تتصرف بسرعة ، وإلا فقد يفقد المستخدم شيئًا ما خطأ ، وسيظل لدى المشغل وقت لتحميل الأغاني غير الضرورية حتى الآن. نقوم بتغيير قائمة انتظار التشغيل الحالية ( إضافة واصف المحطة ) ، ونلقي نظرة على ما حدث ، ونعيد التغييرات في قائمة الانتظار بمعاملة جديدة ( احذف ما تمت إضافته بالفعل إلى قائمة الانتظار ).
لسوء الحظ ، نجد أنه لا تتم MPMediaItem
سوى كائنين MPMediaItem
إلى قائمة الانتظار. كلاهما يشبه الأغاني ( يوجد اسم الفنان ، اسم المسار ، طول المسار ) ، لكن لا يتضمن معرف الأغنية. إذا نظرت إلى Music.app ، وجدنا أن كل شيء يتقارب هناك: تشغيل مشغل الراديو سوف يشغل الأغنية ، وفي قائمة الانتظار سيكون هناك أغنية واحدة فقط لتشغيلها. عندما تنتقل إلى الأغنية التالية ، يتم تحديث قائمة الانتظار.
ليس من المنطقي محاولة بناء عكازات بمحطات إذاعية أخرى ؛ عليك استخدام خيارات أخرى.
تذكر أنه في Music.app وواجهة الويب ، يتم عرض فنانين مماثلين. يتوفر فنانين مشابهين فقط للفرق الأكثر شعبية 15 . مرة أخرى ، عليك أن تلجأ إلى الطريقة المحرمة المتمثلة في تحليل صفحة الويب. من الايجابيات: نقوم بالفعل بتنزيل صفحة ويب للحصول على صورة ، حتى نتمكن من الحصول على فنانين مماثلين منها على الفور.
في شفرة صفحة html ، نرى كائنًا كبيرًا json ، ننتقل منه أولاً معرفات الفنانين المتشابهين ( ["data"]["relationships"]["artistContemporaries"]
):

ثم باستخدام هذه المعرفات ، نحصل على بيانات الفنان من نفس json ( ["included"]
مع type lockup/artist
):

وجود معرفات الفنانين ، يمكننا طلب مساراتهم. تسمح لك واجهة برمجة التطبيقات (API) بطلب العديد من الفنانين من خلال معرّفاتهم في طلب واحد مع تمكين الروابط. للأسف ، في الممارسة العملية ، تقوم واجهة برمجة التطبيقات بإرجاع خطأ يشير إلى استحالة إضافة قائمة المسارات إلى النتيجة. يمكن القيام بذلك فقط من خلال طلب الفنانين واحدة في كل مرة أو عن طريق طلب الأغاني مباشرة لفنان واحد. في هذه الحالة ، يمكنك استخدام واجهة برمجة تطبيقات iTunes Search API التي سبق ذكرها ، والتي ستقدم معلومات أكثر فائدة.
قوائم " فنانين مشابهين " في Apple Music جيدة جدًا ، لكن في الممارسة العملية ، غالبًا ما يتبين أنها فارغة. في حالة وجود قائمة فارغة من التوصيات ، يتعين عليك استخدام خدمات الجهات الخارجية. الكلاسيكية - Last.fm ، قليلا أكثر تطورا - سبوتيفي. يجب أن تتطابق نتائج كلاهما مع الكائنات الموجودة في كتالوج Apple Music. يكمن الحل "في المقدمة" في البحث عن كل فنان بالاسم بنتيجة واحدة تمامًا ثم استلام الأغاني كما هو موضح أعلاه. تعد الحلول أكثر إثارة للاهتمام قليلاً ، ولكنها أغلى من استخدام musicbrainz للمطابقة. يوفر Musicbrainz معلومات عن المعرفات 16 في خدمات أخرى ، أي يمكنك ربط معرف في Spotify بمعرف في Apple Music. الموقف مع Last.fm أفضل: Last.fm بإرجاع معرفات من musicbrainz في قائمة التوصيات. تكمن النفقات العامة في القيود المفروضة على استخدام musicbrainz ، مع وجود الكثير من حركة المرور لديك لرفع استنساخك من musicbrainz (لحسن الحظ ، هذا ممكن ) أو تطوير واجهة برمجة التطبيقات (API) الخاصة بك حول قاعدة بيانات ، والتي يمكن تنزيلها بسهولة.
بالنسبة للمجموعات الجديدة ، لن تقدم Last.fm توصيات ؛ الخيارات البديلة ستكون توصيات "النوع". نأخذ أنواع الفنان ( على أساس الاسم الذي نحصل عليه معرفات من القائمة المحملة بالفعل لجميع الأنواع ) ، نحصل على الرسم البياني لكل نوع ، نمزج الأغاني المستلمة. هذا أفضل من لا شيء.
شيئان لا ينفصلان: لاعب وقائمة الانتظار
Media Player مسؤول عن تشغيل iOS من Apple Music ؛ فهو يتيح لك العمل مع الموسيقى من Apple Music والدليل الشخصي للمستخدم 17 . إطار العمل رفيع المستوى وفي حالة العمل مع دفق المحتوى للنزول إلى مستوى أقل من 18 لن يعمل.
يوفر إطار العمل لمشغلين اثنين مع واجهة برنامج مشتركة: أحدهما يقوم بتشغيل الموسيقى مباشرة في تطبيق Music.app ، والآخر يعمل بشكل أو بآخر بشكل مستقل. استخدام الأول لشيء خطير لا معنى له 19 . والتوثيق بوقاحة يكمن 20 أن اللاعب الثاني لا يعمل في الخلفية
من الجانب المعماري ، يكون التعامل مع هذه المسألة بسيطًا: فنحن نخبر اللاعب بما يجب تشغيله ( على سبيل المثال ، ملء قائمة الانتظار ، استنادًا إلى مجموعة من معرفات الأغنية ) والتحكم في التشغيل (التشغيل ، الإيقاف المؤقت ، التالي ، السابق ).
لا يوجد التحكم المباشر في قائمة انتظار التشغيل ، تحتاج إلى إجراء تغيير في المعاملات ، الأمر الذي يستغرق بعض الوقت. في الوقت نفسه ، غالبًا ما يتم استدعاء معالج completionHandler
مع وجود خطأ في المهلة ، والذي يترجم إلى " لا أعرف إذا كنت قادرًا على فعل شيء ما أو ما إذا كنت أفعل شيئًا آخر ، لكنني تعبت من انتظار نفسي ". في أغلب الأحيان ، تسير العملية بشكل جيد ، ويجب تجاهل الأخطاء التي تظهر إلى المعالج. يمكن إجراء بعض التغييرات بمستوى أعلى قليلاً ، ولكن إذا كان عليك بالفعل استخدام تغييرات المعاملات ، فمن الأفضل استخدامها في كل شيء.
بشكل عام ، تكون قوائم الانتظار مرنة جدًا ، وإذا لم يكن من المحتمل أن يعمل التطبيق الخاص بك مع خدمات البث الأخرى 21 في وقت ما ، فيمكنك القيام بالكثير من الأشياء المثيرة للاهتمام مع قوائم الانتظار ، على وجه الخصوص ، أشر في أي وقت يبدأ العنصر في التشغيل وإلى متى.
من بين " السلبيات " الأخرى لهذا النهج رفيع المستوى ، تجدر الإشارة إلى عدم القدرة على معالجة إجراءات المستخدم. لن يؤدي الضغط على المستخدم على سماعات الرأس الخاصة بالزر " المسار التالي " إلى طلب برنامج " ماذا علي أن أفعل " ، ويعرف اللاعب بشكل أفضل ما يجب فعله وسيغير الأغنية بنفسه. بحيث يمكنك فقط التقاط التغييرات المكتملة بالفعل في حالة اللاعب واتخاذ بعض القرارات بعد حدوثها.
من ناحية أخرى ، ليس عليك القيام بالكثير: المعلومات الموجودة عن التشغيل على شاشة القفل موجودة ببساطة ويعمل كل الأزرار الموجودة فيه ، ويمكن لـ Apple Watch و Siri التحكم في التشغيل ، والبث عبر AirPlay إلى Apple TV يعمل خارج الصندوق 22 .
من الممكن تكرار وظيفة واجهة قائمة Music.app وواجهة تطبيقك ، ولكن تبين أن بساطة عناصر drag'n'drop في قائمة الانتظار هي في الواقع معاملات لتغيير قائمة الانتظار ومزامنة قائمة الانتظار المطلوبة وقائمة انتظار حقيقية لـ 23 مشغلاً.
في الواقع ، لا يختلف العمل مع واجهة برمجة التطبيقات عن الأنظمة الأساسية الأخرى ، ولكن لا يتم نسخ SDK بالكامل من خلال نظام التشغيل iOS ، وفي بعض الأماكن تكون 24 أكثر ملاءمة ، على الرغم من أن الفكرة العامة لقائمة الانتظار جنبًا إلى جنب مع بقاء المشغل.
لذلك ، ضمن Android ، يمكنك الحصول على قائمة الانتظار الحالية ونقل عناصر قائمة الانتظار دون الحيل مع تغيير المعاملات لها ( إزالة من قائمة الانتظار وإضافة إلى المكان الصحيح مع تقاطع الأصابع ).
يوفر MusicKit JS أيضًا طرق تجميع خاصة للعمل مع واجهة برمجة تطبيقات Apple Music ،
ولكن عند استخدام الأغلفة ، لا يمكنك القيام بذلك دون قراءة الوثائق الخاصة بواجهة برمجة التطبيقات نفسها. العمل مع قائمة الانتظار والمشغل ليس أكثر ملاءمة من iOS SDK ، ولكن مع الوظائف الإضافية الصغيرة يمكن أن تصبح محتملة .
بضع كلمات عن جهاز محاكاة
يمكنك العمل في جهاز محاكاة مع MusicKit فقط في سياق التواصل مع HTTP API ، ولكن حتى في هذه الحالة سيكون عليك تثبيت رمز المستخدم الخاص بالقيام بإجراء الطلبات ، وليس الحصول عليه من خلال StoreKit . من المستحيل تمامًا تشغيل الموسيقى من Apple Music في جهاز المحاكاة ، لأن تطبيق Music.app مفقود.
في الواقع ، يجب عليك تطوير الوظائف الإضافية الخاصة بك على SDK واستخدام تطبيقات بديلة ( وهمية ) عند تشغيلها في جهاز المحاكاة. في الواقع ، أثناء التطوير ، يكون جهاز المحاكاة مفيدًا فقط للعمل على واجهة المستخدم. سيكون التجريد الخاص مفيدًا أيضًا في لقطات شاشة تلقائية للتطبيق ( وفي الواقع عند إنشاء لقطات شاشة باستخدام جهاز محاكاة ) ، لأن امتلاك جيلين من "إيجابيات iPad" الكبيرة في الترسانة لمجرد أخذ لقطات من المشغل على كليهما أمر غير مربح للغاية وغبي .
كتجربة مثيرة للاهتمام ، ولكنها ليست مفيدة للغاية ، يمكنك إجراء تطبيق بديل لمشغل المستوى الرفيع الخاص بك استنادًا إلى MusicKit JS.
حول خلاصة شريك المؤسسة
من ناحية ، توفر Apple تفريغ بيانات التعريف عند الطلب وتقول إنها تستخدم من أجل تقليل الحمل على واجهة برمجة التطبيقات والحصول على المعلومات التي لا تحتوي عليها واجهة برمجة التطبيقات. من ناحية أخرى ، لدينا مشكلة واضحة مع الدجاج والبيض: يتم توفير الوصول إلى البرنامج التابع من خلال تحديد رابط للتطبيق. من الصعب جدًا تطوير تطبيق باستخدام البيانات التي يمكن الحصول عليها فقط مع التطبيق المنشور على متجر التطبيقات.
وبالطبع ، فإن البيانات لا تعطي القادم الأول. يتم فحص كل تطبيق في غضون خمسة أيام عمل. في وقت كتابة هذا التقرير ، لم أتمكن من التخلص من البيانات الوصفية في يدي. اختتم Apple طلبي دون تحديد الأسباب بالضبط. , - " 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