30

iPodLibraryAPIを使用してiOSの曲データベースにアクセスするアプリがあります。iTunes Matchのリリースにより、デバイス上にない曲はロードに失敗します。曲のダウンロードをリクエストする方法はありますか?おそらく新しいiCloudAPIを使用していますか?

編集: 明確にするために、私はiPhoneを使用してiTunesMatchで曲をダウンロードする方法を尋ねていません。iOS SDKを使用すると、MPMediaQuery/MPMediaItemsを介してiPodライブラリにアクセスできます。iTunes Matchライブラリにあるがデバイス上でローカルではないiTunesMatchが有効になっているiOSデバイスでは、MPMediaQueryを介して返されますが、MPMediaItemsの「exportable」フラグはfalseに設定されています。ミュージックアプリでこれらの曲にアクセスすると、自動的にダウンロードされます。MPMediaItemを介して同じ自動ダウンロードをトリガーしたいと思います。

iTunes MatchのアイテムがiCloudの一部として参照されているのを見たことがあり、iOS5SDKの新しいiCloudセクションがあります。ただし、理解しているように、アプリがアップロードしたデータしか取得できません。私は、MPMediaItemを介して、またはiCloudを介してURLを使用してiTunesMatchのダウンロードをトリガーする方法があることを望んでいました。

4

4 に答える 4

15

私は何かを見つけましたが、それは素晴らしいことではありません。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];

これが実際にダウンロードを開始したかどうか、またはダウンロードが進行したかどうかについてのフィードバックはありませんが、アイテムはダウンロードを開始し、接続が良好な場合は最初に再生されます(そうでない場合は、スパム再生が可能で、開始に戻ります)。

于 2011-12-05T23:24:58.967 に答える
7

この問題についてAppleから連絡がありました(テクニカルサポートインシデントの1つを使用しました)。

Appleによると、iOS SDKは現在、iCloudからのダウンロードを開始するためのAPIを提供していません。Appleのバグレポーターツールを使用して、この機能の拡張リクエストを提出するように指示されました。私は他の人にも同じことをするように勧めます。

iCloudがiOS5の定義機能の1つであることを考えると、Appleは実際にiCloudからオーディオアセットをダウンロードするためのプログラムによるサポートを提供する必要があります。

于 2012-01-06T15:34:53.970 に答える
7

MPMediaItem | iCloudまたはDRMで保護

上記のリンクは、iOS 6で導入されたプロパティを使用して、MPMediaItemがクラウドにあるかどうかを確認する方法を示しています。

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);
}

これは、iOS6でのみ追加されたコードをiOS6のみが使用するようにマクロを使用しています。以下はそのマクロです。

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

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

于 2013-03-10T21:09:26.813 に答える
3

ここに注意すべきことがあります。私のアプリは通常[MPMediaQuery albumsQuery]、すべてのアルバムとその曲を収集します。これは、音楽ライブラリ全体がiTunes Matchのもので構成されていても、そのほとんどがまだクラウドにある場合でも正常に機能します。しかし、1つの問題があります。

その時点で曲が再生されていて、その曲がクラウドにあり、現在ダウンロードされている場合、その曲とアルバム内の次の曲はの結果から欠落[MPMediaQuery albumsQuery]しています。これはおそらく、これらの曲が「転送中」であるためです。両方とも部分的にダウンロードされています。(最初の曲が終わったときに次の曲にシームレスにセグエできるように、常に2つの曲がダウンロードされると思います。)

MPMediaLibraryDidChangeNotificationさらに、ライブラリの「目次」が実際には変更されていなくても、曲を再生してダウンロードするとトリガーされます。

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

于 2012-01-31T16:44:46.947 に答える