如何使用.NET MAUI从Apple Music应用中选取已购音乐?
在.NET MAUI中实现Apple Music已购音乐选取方案
目前没有直接的.NET MAUI官方组件或现成NuGet包专门处理Apple Music已购音乐选取,但可以通过**平台特定代码(iOS原生API调用)**实现,以下是可行方案:
核心思路
利用iOS原生的MediaPlayer框架(获取本地已购音乐)或MusicKit框架(获取云端已购音乐),通过.NET MAUI的依赖注入机制在共享项目中调用原生实现。
步骤1:配置iOS权限
在iOS项目的Info.plist中添加以下权限描述,否则无法访问媒体库:
<key>NSAppleMusicUsageDescription</key> <string>需要访问您的Apple Music已购音乐</string> <key>NSMediaLibraryUsageDescription</key> <string>需要访问您的本地媒体库</string>
步骤2:定义共享接口
在.NET MAUI共享项目中创建音乐选择服务的接口,统一跨平台调用逻辑:
public interface IMusicPickerService { Task<List<MusicItem>> GetPurchasedMusicAsync(); } // 音乐数据模型 public class MusicItem { public string Title { get; set; } public string Artist { get; set; } public string Album { get; set; } public string AssetUrl { get; set; } // 本地文件路径或云端播放链接 }
步骤3:iOS平台实现
在iOS项目中实现上述接口,分为两种场景:
场景1:获取本地已下载的已购音乐
使用MPMediaQuery查询本地媒体库中标记为已购的音乐:
[assembly: Dependency(typeof(iOSMusicPickerService))] namespace YourAppNamespace.iOS { public class iOSMusicPickerService : IMusicPickerService { public async Task<List<MusicItem>> GetPurchasedMusicAsync() { var musicList = new List<MusicItem>(); // 请求媒体库访问权限 var authStatus = await MPMediaLibrary.RequestAuthorizationAsync(); if (authStatus != MPMediaAuthorizationStatus.Authorized) { return musicList; } // 构建已购音乐查询条件 var songsQuery = MPMediaQuery.SongsQuery; var purchasedPredicate = MPMediaPropertyPredicate.CreatePredicateForProperty( MPMediaItemPropertyIsPurchased, NSObject.FromObject(true), MPMediaPredicateComparison.EqualTo); songsQuery.AddFilterPredicate(purchasedPredicate); // 转换为共享模型 foreach (var mediaItem in songsQuery.Items) { musicList.Add(new MusicItem { Title = mediaItem.Title, Artist = mediaItem.Artist, Album = mediaItem.AlbumTitle, AssetUrl = mediaItem.AssetURL?.AbsoluteString }); } return musicList; } } }
场景2:获取云端未下载的已购音乐
如果需要访问用户Apple Music账户中的云端已购音乐,需使用MusicKit框架:
- 在Apple Developer后台为应用启用MusicKit权限
- 在iOS项目中调用
SKCloudServiceController获取用户已购音乐列表(需用户登录Apple Music账户)
步骤4:在共享项目中调用
通过依赖注入获取服务实例并调用:
var musicPicker = DependencyService.Get<IMusicPickerService>(); var purchasedMusic = await musicPicker.GetPurchasedMusicAsync(); // 处理获取到的音乐列表
注意事项
- 仅支持iOS平台,Android无Apple Music相关功能
- 需在真实iOS设备测试,模拟器通常无媒体库数据
- 使用MusicKit时需确保用户已登录Apple Music账户,且应用已配置正确的开发者权限
内容的提问来源于stack exchange,提问作者Häkkebräker
相关产品推荐
相关产品推荐

