gpt4 book ai didi

ios - 如何检查用户的设备上是否安装了 Apple Music?

转载 作者:行者123 更新时间:2023-12-01 18:10:06 25 4
gpt4 key购买 nike

我正在用 swift 制作一个音乐应用程序。该应用程序允许用户通过 Apple Music 应用程序订阅 Apple Music 来播放音乐。我可以通过以下方式检查用户是否订阅了 Apple Music:

SKCloudServiceController().requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in

guard err == nil else {
print("error in capability check is \(err!)")
return
}

if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) {
print("user has Apple Music subscription")
}

if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) {
print("user does not have subscription")
}

}

但是:在某些情况下,某人出于某种原因订阅了 Apple Music,但没有在其设备上下载 Apple Music 应用。如果用户有订阅但没有设备,我想基本上将这种情况视为他们根本没有订阅,即我们无法通过 Apple Music 播放音乐。

因此,我开始寻找添加 Apple Music 是否在用户设备上的检查的方法。我找到这个答案:Check whether an app is installed using Swiftthis resource for finding Apple Music's url scheme 结合并得出结论,我可以通过以下方式检查用户是否同时订阅了 Apple Music 并且在其设备上安装了 Apple Music 应用:

SKCloudServiceController()requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in

guard err == nil else {
print("error in capability check is \(err!)")
return
}

if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) && UIApplication.shared.canOpenURL(URL(string: "music://")!) {
print("user has Apple Music subscription and has the apple music app installed")
}

if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) || !UIApplication.shared.canOpenURL(URL(string: "music://")!) {
print("user does not have subscription or doesn't have apple music installed")
}

}

问题是,即使从我的设备中删除 Apple Music 后,第一种情况,即打印 user has Apple Music subscription and has the apple music appinstalled 的情况仍然被调用。我相信我有正确的网址方案,因为将 "music://" 更改为 "musi://" 时,是第二种情况,即打印 用户没有订阅或没有安装Apple Music 正在被调用。

尝试打开 URL(string: "music://") 并通过 UIApplication.shared.open(URL(string: "music://") 删除 Apple Music 时!),我收到以下警报:

enter image description here

那么为什么即使在删除 Apple Music 后,设备仍显示我可以打开 URL(string: "music://")URL 是否能够打开,但结果只是显示上述警报?这是确认用户在其设备上安装了 Apple Music 的正确方法吗?有没有办法确认用户的设备上安装了 Apple Music? 如果 Apple 为用户提供删除 Apple Music 应用的选项,那么他们还应该让开发者能够检查该应用是否已安装。

最佳答案

尽管我希望有更好的解决方案,但我得到的最好的解决方案是使用 MPMusicPlayer.prepareToPlay(completionHandler:) 来检查尝试播放时是否有错误轨道:

SKCloudServiceController().requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in

guard err == nil else {
print("error in capability check is \(err!)")
return
}

if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) {
print("user has Apple Music subscription")
MPMusicPlayerController.systemMusicPlayer.setQueue(with: ["1108845248"])
systemMusicPlayer.prepareToPlay { (error) in
if error != nil && error!.localizedDescription == "The operation couldn’t be completed. (MPCPlayerRequestErrorDomain error 1.)" {
//It would appear that the user does not have the Apple Music App installed
}
}
}

if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) {
print("user does not have subscription")
}

}

我不确定这如何适用于在应用程序中使用 Apple Music 进行除播放轨道以外的其他任何操作的人,但这似乎绝对可以在您要播放支票时作为支票使用。每当我遇到这个错误时,我都会创建一个警报,告诉用户他们订阅了 Apple Music,但没有安装该应用程序。

不过,如果能够在没有完成处理程序的情况下进行检查,那就太好了,因为这将允许将 bool 检查集成到条件语句中(通过 if Capability.contains(SKCloudServiceCapability.musicCatalogPlayback) && hasAppleMusicAppInstalled {//做某事})。

关于ios - 如何检查用户的设备上是否安装了 Apple Music?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58772482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com