You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用.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框架:

  1. 在Apple Developer后台为应用启用MusicKit权限
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:40:36