2011-11-16 13 views
27

Ho un'app che utilizza l'API dell'iPod Library per accedere al database dei brani in iOS. Con il rilascio di iTunes Match, non verrà caricato alcun brano che non si trova sul dispositivo. C'è un modo per chiedere che il brano venga scaricato? Forse usando la nuova API iCloud?MPMediaItem e iTunes Match

Edit: Per essere chiari io non sto chiedendo come scaricare canzoni con iTunes Match utilizzando l'iPhone. L'SDK iOS consente l'accesso a iPod Library tramite MPMediaQuery/MPMediaItems. Su un dispositivo iOS con i brani abilitati per iTunes Match presenti nella libreria iTunes Match ma non sul dispositivo locale vengono restituiti tramite MPMediaQuery, tuttavia gli MPMediaItem hanno il flag "esportabile" impostato su false. Quando accedo a questi brani nell'app Music, vengono scaricati automaticamente. Vorrei attivare lo stesso download automatico tramite MPMediaItem.

Ho visto articoli in iTunes Match come membro di iCloud e c'è una nuova sezione iCloud dell'SDK di iOS 5. Tuttavia, a quanto ho capito, posso solo ottenere i dati della mia app come caricati. Speravo che ci fosse un modo tramite MPMediaItem o usando l'URL tramite iCloud per attivare un download di iTunes Match.

+0

Questa domanda potrebbe essere più adatta per Apple.SE – JW8

+1

Non è più Apple.SE per l'utilizzo del dispositivo e non per la codifica del dispositivo? – TurqMage

+0

potresti chiarire cosa intendi con "la loro" bandiera esportabile "? Non sono a conoscenza di una proprietà esportabile. Ti riferisci a MPMediaItemPropertyAssetURL? – prendio2

risposta

13

Ho trovato qualcosa, ma non è eccezionale. Se selezioni il brano da riprodurre tramite il lettore iPod, questo attiverà il download. Puoi accedere al lettore iPod con un 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]; 

Nessun feedback su se questo davvero iniziato un download o no, o il progresso sul download, ma la voce inizierà a scaricare e se la connessione è buona si giocherà la prima volta (altrimenti si può spammare il gioco ed è andrà in giro per iniziare).

+0

iPodMusicPlayer è obsoleto. Piuttosto, potremmo usare systemMusicPlayer. –

6

Ho appena ricevuto risposta da Apple in merito a questo problema (ho utilizzato uno dei miei Incidenti di supporto tecnico).

Secondo Apple, l'SDK per iOS al momento non fornisce alcuna API per avviare un download da iCloud. Mi è stato richiesto di presentare una richiesta di miglioramento per questa funzione tramite Apple's bug reporter tool. Vorrei incoraggiare gli altri a fare lo stesso.

di Apple in realtà dovrebbe fornire un sostegno programmatico per il download di risorse audio da iCloud considerando che iCloud è una delle caratteristiche della nozione di iOS 5.

+1

Ho anche postato un bug report (# 12736293), con la seguente descrizione: 'Non ci sono API nell'SDK per iOS per determinare se una traccia è disponibile localmente o su iCloud (in iTunes Match), né lo è c'è qualche API per tracciare il suo stato di download. Non c'è modo di distinguere tra tracce disponibili localmente rispetto a quelle che sono disponibili solo tramite iCloud e se si inizia a riprodurre un elemento multimediale che richiede il download, non c'è modo di monitorare lo stato del download (avviato, non riuscito, in -progress, complete) ' – cleverbit

+0

Qualche progresso sul tuo rapporto? (Ciao dal 2015, il problema sembra ancora essere a posto) – mojuba

2

Ecco qualcosa a cui prestare attenzione. La mia app fa un ordinario [MPMediaQuery albumsQuery] per raccogliere tutti gli album e i loro brani. Funziona bene anche se l'intera libreria musicale è costituita da brani iTunes Match la maggior parte dei quali è ancora nel cloud. Ma c'è un problema:

Se un brano viene riprodotto in quel momento, e se quella canzone era in the cloud, in modo che ora è in fase di download, quella canzone e la canzone successiva nell'album sono manca da il risultato di [MPMediaQuery albumsQuery]. Questo è presumibilmente perché quelle canzoni sono "in transito": sono entrambi parzialmente scaricati. (Suppongo che due canzoni vengano sempre scaricate in modo tale che quando il primo termina sia possibile proseguire senza interruzioni nel successivo.)

Inoltre, giocando e quindi scaricando una canzone si innesca un MPMediaLibraryDidChangeNotification anche se il "sommario" del la biblioteca non è di fatto cambiata.

Non vedo alcun modo intorno a questo, dal momento che non c'è altro modo per interrogare la libreria. Apple deve risolvere il sistema e le API per tenere conto dell'esistenza di iTunes Match. Sfortunatamente non ho la sensazione che stiano lavorando su questo per iOS 5.1 ...

+1

Ancora non è stato risolto per iOS 10, per quanto posso vedere. – amergin

+1

molto sfortunato. Ancora nessuna risposta da parte del team Apple in merito a questo: :( –

7

MPMediaItem | iCloud or DRM Protected

Il link qui sopra mostra come è possibile utilizzare una proprietà introdotto in iOS 6 per vedere se un MPMediaItem è nella nuvola.

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

che utilizza una macro per assicurare che solo iOS 6 utilizza il codice che è stato aggiunto con iOS 6. Sotto è quella macro.

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

Ancora non non è possibile avviare un download, per quanto posso dire.

+0

Qualcuno ha mai sentito parlare di un aggiornamento? Saremo in grado di accedere ai dati delle corrispondenze di iTunes e forzare i download? –