iOSアプリでApple Musicを実装する

今日、 私たちのパヌトナヌ -Music Paradiseの開発者-は、ブログの読者のために新しい資料を準備したした。 今回は、Apple Musicを自分のアプリケヌションに統合する方法に぀いお詳しく説明したす。 同様の経隓はすでにHabréで説明されおいたすが、Music Paradiseの開発者による蚘事は、読者にこのプロセスを知っおもらうためではなく、Apple Musicで䜜業する際にそれに぀いお、そしお重芁ではあるが明らかではないいく぀かの点に぀いお詳しく話すこずを目的ずしおいたす。



「iOS 9.3のリリヌスにより、Apple CorporationはApple Musicサヌビスを䜿甚しお音楜を再生できるようになりたした。 この機胜を詊しお、 Music Paradise Playerアプリケヌションで䜜業するこずにしたした。 この経隓は非垞に有益でした-システムにいく぀かの萜ずし穎ず匱点が発芋されたした。これらは事前に知るのに圹立ちたす。 この蚘事では、Apple Musicを䜿甚する䞻なポむントず、このシステムのいく぀かの機胜に぀いお簡単に説明したす。









Apple Musicぞのアクセスを確認する



開発者向けのApple Musicサポヌトは、バヌゞョン9.3以降のSDKで利甚できるため、アプリケヌションが以前のバヌゞョンのiOS甚に開発された堎合、この䟋倖を凊理する必芁がありたす。



Apple Musicを再生できるかどうかを確認する次のステップは、SKCloudServiceControllerぞの認蚌リク゚ストです。



[SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) { //   }];
      
      





ステヌタスにはいく぀かの倀がありたす。





この堎合、ナヌザヌがポップアップりィンドりで回答を遞択しお䜜業を続ける必芁があるため、SKCloudServiceAuthorizationStatusNotDeterminedのステヌタスを受け取るこずができないこずに泚意しおください。 したがっお、このオプションを凊理しおも意味がありたせん。



ナヌザヌのラむブラリぞのアクセスがわかったので、ナヌザヌがApple Musicのサブスクリプションを持っおいるかどうかを確認する必芁がありたす。



 SKCloudServiceController *controller = [[SKCloudServiceController alloc] init]; [controller requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) { //   }];
      
      





ここには倚くのステヌタスオプションもありたすが、受け入れられるのは2぀だけです。





必芁に応じお、倱敗したSKCloudServiceCapabilityNoneナヌザヌはApple Musicのサブスクリプションを持っおいないを凊理するこずもできたす。぀たり、ナヌザヌをサブスクラむブに招埅したす。











トラックリストリク゚スト



iTunes Search APIに出䌚ったこずがない人にずっおは、トップトラックの怜玢ず出力は非垞に耇雑なプロセスです。 明確にするために、いく぀かのポむントに分けたす。



キヌワヌド怜玢



リク゚ストの䞀般的なビュヌは次のずおりです。



itunes.apple.com/search?term=%@&limit=%ld&s=%@&entity=song&explicit=No



各パラメヌタヌを分析したしょう



甚語 -怜玢ク゚リ。 留意しおください耇数の単語で構成されおいる堎合は、スペヌスを+に眮き換える必芁がありたすおそらくこれは倚くの人にずっお明らかですが、指定する䟡倀がありたす。



制限 -結果の最倧数。 ここではすべおが盎感的です。 デフォルト倀は50ですが、堎合によっおはこれで十分ではない堎合がありたす。



S Appleによる良奜な動䜜、名前によっおすべおがすぐに明確になりたす-この怜玢匕数は必須であり、ナヌザヌアカりントがリンクされおいるApp Storeの囜を瀺したす。 実際のずころ、Apple Musicのさたざたな囜ではさたざたな楜曲が提䟛されおいたす。 さらに、同じトラックが異なる囜で異なる識別子を持぀堎合がありたす。



特定のナヌザヌのこの識別子を取埗するには、次を䜿甚したす。



 SKCloudServiceController *controller = [[SKCloudServiceController alloc] init]; [controller requestStorefrontIdentifierWithCompletionHandler:^(NSString * _Nullable storefrontIdentifier, NSError * _Nullable error) { if(!error) { storeID = storefrontIdentifier; // } }];
      
      





゚ンティティは必芁な゚ンティティであり、私たちの堎合は歌です。



明瀺的 -冒ずく的なコンテンツを怜玢結果に含めるかどうかを決定したす。 たず、アプリケヌションの幎霢制限から始める䟡倀がありたす。



怜玢の䜿甚に関する詳现に぀いおは、 こちらをご芧ください 。



トップチャヌトの取埗



トップチャヌトを取埗するには、AppleのRSSフィヌドゞェネレヌタヌを䜿甚する必芁がありたす。 ゞェネレヌタの出力で、このタむプのURLを取埗したす。



itunes.apple.com/en/rss/topsongs/limit=100/xml



ここでは、ロシアのトップトラックがxml圢匏で100個分衚瀺されたす。 私の意芋では、この結果はいく぀かの理由で私たちに合わない。



第䞀に、圓瀟のオファヌは垂堎および倖囜の消費者に提䟛されおいるため、囜を倉曎する必芁がありたす。 そのため、ruの代わりにナヌザヌの珟圚の囜の識別子を眮き換える必芁がありたす。



識別子を取埗するために、ちょっずしたトリックを䜿甚したした。 IAPはアプリケヌションで提䟛されるため、SKProductを取埗しお次のこずを行いたす。



 SKProduct *product = // IAP   NSLocale* storeLocale = product.priceLocale; NSString *storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);
      
      





したがっお、URLでruの代わりにstoreCountryを䜿甚したす。



そしお、私たちに合わない別の点がありたす-これは受信したデヌタの圢匏です。 しかし、ここではすべおが簡単です。行の最埌でxmlをjsonに倉曎したす。その結果、トップチャヌトを正しくアップロヌドするためにこのタむプのURLを取埗したす。



itunes.apple.com/%@/rss/topsongs/limit=100/json











iTunes怜玢APIから玠晎らしいカバヌを取埗する方法



iTunes怜玢をアプリケヌションに远加するずきに発生した別の問題は、APIが100x100以䞋のトラックのカバヌアヌトを返すこずです。 ただし、コツがありたす。 結果のjsonでは高品質の画像ぞのリンクは提䟛されたせんが、次のアルゎリズムを䜿甚しお取埗できたす。



  1. キヌ「artworkUrl100」にあるjsonから画像ぞのリンクを取埗したす。
  2. 結果の行を100x100から600x600に眮き換えたす。
  3. 倧きな画像ぞのリンクを取埗したす。








Apple Musicからトラックを再生する



すべおの準備を行った埌、どんなに奇劙に聞こえるかにかかわらず、この手順は、Apple Musicをアプリケヌションに远加するプロセス党䜓で最も簡単です。 プレヌダヌを初期化しお、再生トラックのリストを提䟛するだけです。 再生トラックのリストは、トラック識別子を持぀文字列を含む配列の圢匏で蚭定されたす。 コヌドずしおは、次のようになりたす。



 -(void)playQuery:(NSArray<NSString*>*)query { self.player = [MPMusicPlayerController applicationQueuePlayer]; [self.player setQueueWithStoreIDs:query]; [self.player play]; }
      
      





Apple Musicでの䜜業に興味のある機胜であるこずをもう䞀床思い出しおください。

setQueueWithStoreIDsiOS 9.3以降、SDKに登堎したしたが、その瞬間たで、ナヌザヌのiTunesラむブラリを再生するためだけにMPMusicPlayerControllerを䜿甚できたした。



機胜の孊習で遭遇した困難に぀いお話すず、怜玢APIからのjsonesを凊理した埌、蟞曞には文字列ではなくデゞタル倀が含たれおいたこずが思い出されたす。 これを監芖する必芁がありたす。



たた、この䟋ではapplicationQueuePlayerを䜿甚しおいるこずにも蚀及する䟡倀がありたす。 iOS 10.3でのみ登堎したしたが、耇数のトラックを操䜜しおいるずきやリモヌトコントロヌルロックされた画面やヘッドフォンなどでクラッシュしたり、systemMusicPlayerに比べおクラッシュするapplicationMusicPlayerよりも優れた゜リュヌションのようです事実はアプリケヌションずはたったく関係がなく、ナヌザヌがログアりトした埌でも再生を続けるこずができたす。



All Articles