MPMediaItem et iTunes Match

j'ai une application qui utilise L'API de bibliothèque iPod pour accéder à la base de données song dans iOS. Avec la sortie de iTunes Match, toute chanson qui n'est pas sur le périphérique ne se chargera pas. Est-il possible que je demande que la chanson être téléchargé? Peut-être en utilisant la nouvelle API iCloud?

Edit: Pour être clair, Je ne demande pas comment télécharger des chansons avec iTunes Match en utilisant l'iPhone. Le SDK iOS permet l'accès à la bibliothèque iPod via le MPMediaQuery / MPMediaItems. Sur un périphérique iOS avec iTunes Match les chansons activées qui sont dans votre bibliothèque de correspondances iTunes mais qui ne sont pas locales sur le périphérique sont retournées via un MPMediaQuery mais les MPMediaItems ont leur drapeau 'exportable' mis à false. Lorsque j'accède à ces chansons dans l'application Musique, ils sont automatiquement téléchargées. Je voudrais déclencher le même téléchargement automatique via le MPMediaItem.

j'ai vu des articles dans iTunes Match arbitré dans le cadre de iCloud et il est une nouvelle section iCloud du SDK iOS 5. Cependant, comme je le comprends, je ne peut obtenir les données de mes applications téléchargées. J'espérais qu'il y avait un moyen via le MPMediaItem ou en utilisant L'URL via iCloud pour déclencher le téléchargement d'une correspondance iTunes.

27
demandé sur TurqMage 2011-11-16 05:23:51

4 réponses

j'ai trouvé quelque chose, mais ce n'est pas génial. Si vous sélectionnez la chanson à être jouée par le joueur d'iPod alors qui va déclencher un téléchargement. Vous pouvez accéder au lecteur iPod avec un contrôleur 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];

pas de commentaires sur si cela a vraiment commencé un téléchargement ou pas, ou la progression sur le téléchargement, mais l'élément va commencer à télécharger et si votre connexion est bonne, il jouera la première fois (autrement, vous pouvez spam Jouer et il se déplacer à commencer.)

13
répondu TurqMage 2016-11-29 08:43:33

MPMediaItem / iCloud or DRM Protected

le lien ci-dessus montre comment vous pouvez utiliser une propriété introduite dans iOS 6 pour voir si un MPMediaItem est dans le nuage.

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

qui utilise une macro pour s'assurer que seul iOS 6 utilise ce code qui a été ajouté avec iOS 6. Ci-dessous, c'est que la macro.

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

Still vous ne pouvez pas lancer un téléchargement pour autant que je peux dire.

7
répondu Brennan 2017-05-23 11:33:24

je viens d'avoir une réponse D'Apple concernant cette question (j'ai utilisé un de mes Incidents de Support technique).

selon Apple, le SDK iOS ne fournit actuellement aucun API pour initier un téléchargement à partir d'iCloud. J'ai été chargé de déposer une demande d'amélioration pour cette fonctionnalité via L'outil de bug reporter D'Apple . J'encourage les autres à faire de même.

Apple devrait vraiment fournir un soutien programmatique pour télécharger des ressources audio à partir d'iCloud étant donné que iCloud est l'une des caractéristiques de iOS 5.

6
répondu Zachary Kulis 2012-01-06 15:34:53

voici quelque chose à surveiller. Mon application fait un [MPMediaQuery albumsQuery] ordinaire pour rassembler tous les albums et leurs chansons. Cela fonctionne bien même si toute la bibliothèque de musique se compose de iTunes Match stuff dont la plupart est encore dans le nuage. Mais il y a un problème:

si une chanson est jouée à ce moment-là, et si cette chanson était dans le nuage, de sorte que maintenant il est téléchargé, cette chanson et la chanson suivante dans l'album sont manquant de la résultat de [MPMediaQuery albumsQuery] . C'est probablement parce que ces chansons sont "en transit": elles sont toutes les deux partiellement téléchargées. (Je suppose que deux chansons sont toujours téléchargées de sorte que lorsque la première se termine, il est possible de suivre sans couture dans la suivante.)

de plus, Jouer et donc télécharger une chanson déclenche un MPMediaLibraryDidChangeNotification même si la" table des matières " de la bibliothèque n'a pas en fait changé.

Je ne vois pas comment contourner cela, puisqu'il y a pas d'autre moyen de la requête de la bibliothèque. Apple doit réparer le système et les API pour tenir compte de l'existence d'iTunes Match. Malheureusement, je n'ai pas l'impression qu'ils travaillent là-dessus pour iOS 5.1...

2
répondu matt 2012-01-31 16:53:20