我正在快速制作音乐应用。该应用程序允许用户通过其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,第一种情况(即打印的user has Apple Music subscription and has the apple music app installed
情况)仍然被调用。我相信我有正确的网址方案,因为更改"music://"
为"musi://"
,对于第二种情况,即一个打印user does not have subscription or doesn't have apple music installed
被调用。
尝试打开URL(string: "music://")
通过删除的Apple Music时UIApplication.shared.open(URL(string: "music://")!)
,我收到以下警告:
那么,为什么该设备说URL(string: "music://")
即使删除Apple Music后也可以打开?是否URL
可以打开,但结果只是上述警报的提示?这是确认用户设备上已安装Apple Music的正确方法吗?甚至还可以确认用户在其设备上安装了Apple Music吗?如果Apple为用户提供了删除Apple Music应用程序的选项,则他们还应该使开发人员能够检查该应用程序是否已安装。
URL(string: "music://trackId=1377813289")!
,URL(string: "music://track=1377813289")
,URL(string: "music://artist=562555")!
,URL(string: "music://artistId=562555")!
。我能够进行深度链接的唯一方法是通过,例如URL(string: "https://music.apple.com/us/artist/562555")!
,但这显然无济于事,因为这是HTTP。
UIApplication.shared.canOpenURL(URL(string: "music://")!)
返回true
。false
删除应用程序后,我需要它返回。将网址方案列入白名单无法解决此问题(我尝试了)。
URL(string: "music://trackID=3214534")
。可能会以通常的方式处理此显式url方案,但不会触发app restore
警报。