2011-11-16 30 views
27

iPodライブラリAPIを使用してiOSの曲データベースにアクセスするアプリがあります。 iTunes Matchのリリースでは、デバイスにない曲は読み込まれません。歌がダウンロードされるように私に要求する方法はありますか?おそらく新しいiCloud APIを使用していますか?MPMediaItemとiTunesが一致する

編集: 私はiPhoneを使ってiTunesのマッチで曲をダウンロードする方法を求めていないのです明確にすること。 iOS SDKを使用すると、MPMediaQuery/MPMediaItems経由でiPodライブラリにアクセスできます。あなたのiTunes Matchライブラリにはあるが、デバイス上ではローカルではないiTunes Match対応のiOSデバイスでは、MPMediaQuery経由で返されますが、MPMediaItemの 'exportable'フラグはfalseに設定されています。音楽アプリでこれらの曲にアクセスすると、自動的にダウンロードされます。私はMPMediaItem経由で同じ自動ダウンロードをトリガーしたいと思います。

私はiTunes Matchでアイテムを見ましたが、iCloudの一部として審査され、iOS 5 SDKの新しいiCloudセクションがあります。しかし、私はそれを理解すると私はアップロードされたとして私のアプリを取得することができます。私は、MPMediaItem経由で、またはiCloud経由でURLを使ってiTunes Matchのダウンロードを開始する方法があることを期待していました。

+0

この質問はApple.SEの方が適しているかもしれません。 – JW8

+1

Apple.SEはデバイスを使用していて、デバイス上でコーディングするためのものではありませんか? – TurqMage

+0

「輸出可能な旗」の意味を明確にすることはできますか?私は輸出可能な財産を知らない。あなたはMPMediaItemPropertyAssetURLを参照していますか? – prendio2

答えて

13

私は何かを見つけましたが、それは素晴らしいことではありません。 iPodプレーヤーで再生する曲を選択すると、ダウンロードが開始されます。 MPMusicPlayerControllerを使ってiPodプレーヤーにアクセスできます。

MPMusicPlayerController *mDRMAudioPlayer; 
mDRMAudioPlayer = [MPMusicPlayerController iPodMusicPlayer]; 

MPMediaQuery *assetQuery = [[MPMediaQuery alloc] init]; 
NSNumber *persistentID = [mediaItem valueForProperty: MPMediaItemPropertyPersistentID]; 
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue: persistentID 
                     forProperty: MPMediaItemPropertyPersistentID]; 
[assetQuery addFilterPredicate: predicate]; 

[mDRMAudioPlayer setQueueWithQuery: assetQuery]; 
[mDRMAudioPlayer play]; 

これは本当にダウンロードを開始したかどうか、またはダウンロードの進捗状況が、アイテムのダウンロードが開始され、接続が良好であれば、それは最初の時間を再生します(そうでない場合は、あなたがプレイをスパムすることができますし、それならば上のノーフィードバック開始に回ります)。

+0

iPodMusicPlayerは推奨されていません。むしろsystemMusicPlayerを使うことができます。 –

6

私はAppleからこの問題に関して聞いたことがあります(私はテクニカルサポートインシデントを使用しました)。

Appleによると、iOS SDKは現在、iCloudからダウンロードを開始するためのAPIを提供していません。私はApple's bug reporter tool経由でこの機能の拡張要求を提出するよう指示されました。私は他の人に同じことを勧めます。

Appleが本当にのiCloudはiOSの5

+1

また、バグレポートを投稿しました。(#12736293)、次のような記述があります。iOS SDKにトラックがローカルで利用可能かどうかを判断するAPIはありません。そのダウンロード状況を追跡するAPIがあります。ローカルで使用できるトラックとiCloudでのみ使用できるトラックを区別する方法はなく、ダウンロードが必要なメディアアイテムを再生する場合は、ダウンロードの進行状況を監視する方法はありません(開始、失敗、 -progress、complete) ' – cleverbit

+0

レポートの進捗状況は? (こんにちは2015年、問題はまだそこにあるようです) – mojuba

2

の決定的な特徴の一つであることはここに気を付けるべきものだと考えるのiCloudからオーディオアセットをダウンロードするためのプログラム的なサポートを提供する必要があります。私のアプリは普通の[MPMediaQuery albumsQuery]を使ってすべてのアルバムとその曲を集めています。これは音楽ライブラリ全体がiTunes Matchのもので構成されていても大丈夫ですが、そのほとんどはまだクラウドに残っています。曲はその時点で再生されている場合は、その曲が雲の中にいたならば、今それがダウンロードされているように、アルバムでその曲と次の曲はからが欠落している

:しかし、一つ問題があります[MPMediaQuery albumsQuery]の結果です。これはおそらく、これらの曲が「転送中」であるためです。両方とも部分的にダウンロードされているためです。 (私は2曲が常にダウンロードされるので、最初の曲が終わると次の曲にシームレスにつなげることができます)

さらに、曲を再生してダウンロードすると、MPMediaLibraryDidChangeNotificationの "目次"ライブラリは実際には変更されていません。

これを回避する方法はありません。ライブラリを照会する方法は他にありません。 AppleはiTunes Matchの存在を考慮してシステムとAPIを修正する必要があります。残念ながら、私は彼らがiOS 5.1のためにこれに取り組んでいるという感覚を得ていません...

+1

私が見る限り、まだiOS 10では修正されていません。 – amergin

+1

非常に不幸です。それでもAppleチームからの回答はありません。:( –

7

MPMediaItem | iCloud or DRM Protected

上記のリンクを使用すると、MPMediaItemがクラウドであるかどうかを確認するためのiOS 6で導入されたプロパティを使用する方法を示します。唯一のiOS 6は、以下のiOS 6を添加し、そのコードがそのマクロで使用を保証するためにマクロを使用している

MPMediaItemPropertyIsCloudItem

BOOL isCloud = FALSE; 

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) { 
    NSNumber *isCloudNumber = [mediaItem valueForProperty:MPMediaItemPropertyIsCloudItem]; 
    isCloud = [isCloudNumber boolValue]; 
} 
if (isCloud) { 
    DebugLog(@"Cloud Asset URL: %@", assetURL); 
} 

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

まだ私が知る限り、ダウンロードを開始することはできません。

+0

誰かがアップデートを聞いたことがありますか?iTunesでデータにアクセスしてダウンロードを強制することはできますか? –

関連する問題