2011-11-16 21 views
27

Tôi có một ứng dụng sử dụng API thư viện iPod để truy cập cơ sở dữ liệu bài hát trong iOS. Với việc phát hành iTunes Match, mọi bài hát không có trên thiết bị sẽ không tải được. Có cách nào tôi yêu cầu bài hát được tải xuống không? Có lẽ sử dụng API iCloud mới?MPMediaItem và iTunes Match

Chỉnh sửa: Để rõ ràng, tôi không hỏi cách tải xuống các bài hát có iTunes Match bằng iPhone. SDK iOS cho phép truy cập vào Thư viện iPod thông qua MPMediaQuery/MPMediaItems. Trên thiết bị iOS có iTunes Match bật các bài hát trong thư viện iTunes Match của bạn nhưng không phải cục bộ trên thiết bị được trả về thông qua MPMediaQuery, tuy nhiên MPMediaItems có cờ 'có thể xuất' được đặt thành false. Khi tôi truy cập các bài hát này trong ứng dụng Nhạc, chúng sẽ tự động được tải xuống. Tôi muốn kích hoạt tải xuống tự động tương tự thông qua MPMediaItem.

Tôi đã xem các mục trong iTunes Khớp với vai trò là một phần của iCloud và có phần iCloud mới của SDK iOS 5. Tuy nhiên, tôi hiểu rằng tôi chỉ có thể tải dữ liệu ứng dụng của mình như đã tải lên. Tôi đã hy vọng có một cách thông qua MPMediaItem hoặc sử dụng URL thông qua iCloud để kích hoạt tải xuống iTunes Match.

+0

Câu hỏi này có thể phù hợp hơn với Apple.SE – JW8

+1

Không phải là Apple.SE nhiều hơn cho việc sử dụng thiết bị chứ không phải để mã hóa trên thiết bị? – TurqMage

+0

bạn có thể làm rõ ý nghĩa của từ "cờ 'có thể xuất khẩu" của họ không? Tôi không biết về một tài sản có thể xuất khẩu. Bạn đang đề cập đến MPMediaItemPropertyAssetURL? – prendio2

Trả lời

13

Tôi đã tìm thấy điều gì đó, nhưng nó không phải là tuyệt vời. Nếu bạn chọn bài hát sẽ được phát thông qua trình phát nhạc iPod thì điều đó sẽ kích hoạt tải xuống. Bạn có thể truy cập trình phát iPod bằng MPMusicPlayerController.

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]; 

Không có phản hồi về nếu điều này thực sự bắt đầu tải về hay không, hoặc tiến bộ về việc tải xuống nhưng mục sẽ bắt đầu tải về và nếu kết nối của bạn là tốt, nó sẽ chơi lần đầu tiên (nếu không bạn có thể thư rác chơi và nó sẽ bắt đầu).

+0

iPodMusicPlayer không được dùng nữa. Thay vào đó chúng ta có thể sử dụng systemMusicPlayer. –

6

Tôi vừa nghe từ Apple về vấn đề này (tôi đã sử dụng một trong các Sự cố hỗ trợ kỹ thuật của mình).

Theo Apple, SDK iOS hiện không cung cấp bất kỳ API nào để bắt đầu tải xuống từ iCloud. Tôi đã được hướng dẫn gửi yêu cầu nâng cao cho tính năng này qua Apple's bug reporter tool. Tôi sẽ khuyến khích người khác làm như vậy.

của Apple thực sự cần hỗ trợ theo chương trình để tải về tài sản âm thanh từ iCloud xem xét rằng iCloud là một trong những tính năng xác định của iOS 5.

+1

Tôi cũng đã đăng một báo cáo lỗi cho nó (# 12736293), với mô tả sau: 'Không có API trong SDK iOS để xác định xem bản nhạc có sẵn cục bộ so với trên iCloud (trong iTunes Match) hay không có bất kỳ API nào để theo dõi trạng thái tải xuống của nó. Không có cách nào để phân biệt giữa các bản nhạc có sẵn cục bộ so với các bản nhạc chỉ có sẵn qua iCloud và nếu bạn bắt đầu phát một mục phương tiện cần tải xuống, không có cách nào để theo dõi tiến trình tải xuống (bắt đầu, không thành công, trong -progress, complete) ' – cleverbit

+0

Bất kỳ tiến trình nào trên báo cáo của bạn? (Xin chào từ năm 2015, vấn đề vẫn có vẻ như được đặt ra) – mojuba

2

Dưới đây là một cái gì đó để xem ra cho. Ứng dụng của tôi hoạt động bình thường [MPMediaQuery albumsQuery] để thu thập tất cả album và bài hát của họ. Điều này làm việc tốt ngay cả khi toàn bộ thư viện âm nhạc bao gồm các công cụ iTunes Match hầu hết trong số đó vẫn còn trong đám mây. Nhưng có một vấn đề:

Nếu bài hát đang được phát tại thời điểm đó và bài hát đó đang ở trên đám mây, để bài hát hiện đang được tải xuống, bài hát đó và bài hát tiếp theo trong album là mất tích từ kết quả của [MPMediaQuery albumsQuery]. Điều này có lẽ là do những bài hát đó "đang chuyển tiếp": cả hai đều được tải xuống một phần. (Tôi cho rằng hai bài hát luôn được tải xuống để khi lần đầu tiên kết thúc, bạn có thể tiếp tục tách biệt thành bài tiếp theo.)

Hơn nữa, chơi và do đó tải xuống bài hát sẽ kích hoạt MPMediaLibraryDidChangeNotification ngay cả khi "mục lục" của thư viện chưa thực sự thay đổi.

Tôi không thấy bất kỳ cách nào xung quanh việc này, vì không có cách nào khác để truy vấn thư viện. Apple cần sửa chữa hệ thống và các API để tính đến sự tồn tại của iTunes Match. Thật không may là tôi không có ý thức rằng họ đang làm việc này cho iOS 5.1 ...

+1

Vẫn chưa được sửa cho iOS 10 như tôi thấy. – amergin

+1

rất không may. Vẫn không có phản hồi nào từ nhóm Apple về vấn đề này .. :( –

7

MPMediaItem | iCloud or DRM Protected

Liên kết ở trên cho thấy làm thế nào bạn có thể sử dụng một tài sản được giới thiệu trong iOS 6 để xem nếu một MPMediaItem là trong đám mây.

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

Đó là sử dụng một macro để đảm bảo chỉ iOS 6 sử dụng mã đó đã được bổ sung với iOS 6. Dưới đây là vĩ mô.

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

Tuy nhiên, bạn không thể bắt đầu tải xuống theo như tôi có thể biết.

+0

Có ai biết về bản cập nhật không? Chúng tôi có thể truy cập dữ liệu trận đấu itunes và tải xuống không? –

Các vấn đề liên quan