我正在使用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。我找到了这个答案:使用Swift检查应用是否已安装 结合 这个查找Apple Music的URL方案的资源,我得出结论,我可以通过以下方式检查用户是否同时拥有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,第一种情况仍会被调用,即打印“用户订阅了Apple Music并安装了Apple Music应用程序”。我相信我有正确的URL方案,因为当将“music://”更改为“musi://”时,第二种情况即打印“用户没有订阅或未安装Apple Music”被调用。
尝试通过“UIApplication.shared.open(URL(string:“music://”)!)”打开已删除Apple Music的“URL(string:“music://”)”,我遇到了以下警报: 所以,即使删除了Apple Music,设备为什么会显示我可以打开
URL(string: "music://")
?URL
是否能够被打开,但结果只是呈现上述警报?这是确认用户在设备上安装了Apple Music的正确方法吗?甚至有一种方法可以确认用户在设备上安装了Apple Music吗?如果Apple允许用户删除Apple Music应用程序,则还应该允许开发人员检查该应用程序是否已安装。
MPMusicPlayerController.prepareToPlay
的完成处理程序中进行检查,因此实际上直到用户尝试使用Apple Music(即播放歌曲)之前,您才能进行检查。@MartinMlostek - David ChopinMPMusicPlayerController.prepareToPlay
在iOS 10.1及以上版本中可用。https://developer.apple.com/documentation/mediaplayer/mpmusicplayercontroller/2582424-preparetoplay - David Chopin