Anu*_*hra 6 itunes ios itunes-search-api apple-music
我在我的应用程序中使用iTunes Search API并使用在应用程序内播放previewUrl歌曲
AVPlayer
如果用户想要播放完整的歌曲,他/她需要从iTunes商店购买该歌曲,然后他/她才能从应用程序播放完整的歌曲.
随着Apple发布了Apple Music并为每个人提供试用版或正式会员资格并允许播放完整的歌曲,是否可以通过使用 我的应用程序Like Previewurl播放Apple Music完整歌曲
avplayer或mpmovieplayercontroller
@“特德·霍斯曼”感谢您的回复。
我想分享这里的一些代码
视图控制器.m
@import StoreKit;
-(void) submitAppleMusicTrackWithProductID: (NSString *) productID // productID in US is the last numbers after i= in the share URL from Apple Music
{
NSLog(@"submitAppleMusic has been called for productID: %@", productID);
[SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) {
NSLog(@"status is %ld", (long)status);
SKCloudServiceController *cloudServiceController;
cloudServiceController = [[SKCloudServiceController alloc] init];
[cloudServiceController requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) {
NSLog(@"%lu %@", (unsigned long)capabilities, error);
if (capabilities >= SKCloudServiceCapabilityAddToCloudMusicLibrary)
{
NSLog(@"You CAN add to iCloud!");
[[MPMediaLibrary defaultMediaLibrary] addItemWithProductID:productID completionHandler:^(NSArray<__kindof MPMediaEntity *> * _Nonnull entities, NSError * _Nullable error)
{
NSLog(@"added id%@ entities: %@ and error is %@", productID, entities, error);
NSArray *tracksToPlay = [NSArray arrayWithObject:productID];
[[MPMusicPlayerController systemMusicPlayer] setQueueWithStoreIDs:tracksToPlay];
[[MPMusicPlayerController systemMusicPlayer] play];
[self performSelectorOnMainThread:@selector(getInfoFromAddedAppleMusicTrack:) withObject:productID waitUntilDone:YES];
}];
}
else
{
NSLog(@"Blast! The ability to add Apple Music track is not there. sigh.");
}
}];
}];
}
-(void) getInfoFromAddedAppleMusicTrack: (NSString *) productID
{
NSLog(@"FYI - musicplayer duration is: %f", [[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] playbackDuration]);
//need to check for both the nowPlaying item and if there is a reported playbackDuration, as there is a variable time between a storeMediaItema and a concreteMediaItem
if (([[MPMusicPlayerController systemMusicPlayer] nowPlayingItem]) && ([[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] playbackDuration]))
{
NSLog(@"Media item is playing: %@",[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem]);
NSLog(@"appleProductIDURL: %@",productID);
NSLog(@"Ending time: %d",[[[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] valueForProperty:MPMediaItemPropertyPlaybackDuration] intValue]);
NSLog(@"Track Name: %@", [[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] valueForProperty:MPMediaItemPropertyTitle]);
NSLog(@"Artists Name: %@", [[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] valueForProperty:MPMediaItemPropertyArtist]);
}
else
{
NSLog(@"seems the track is not fully loaded so try again in 1 second");
[self performSelector:@selector(getInfoFromAddedAppleMusicTrack:) withObject:productID afterDelay:1.0];
// count loops and jump out if something is wrong - I've never seen more that 7 seconds needed
}
}
Run Code Online (Sandbox Code Playgroud)