【问题标题】:Apple Music Api -- Detect Apple Music subscription not workingApple Music Api - 检测 Apple Music 订阅不起作用
【发布时间】:2019-01-14 04:14:03
【问题描述】:

Apple 在 StoreKit 框架中提供了一种方法来检测用户是否订阅了苹果音乐,尽管它根本不起作用。我订阅了 Apple Music,既可以在我的应用程序中收听歌曲,也可以从我的应用程序中将项目添加到我的资料库中——但是,当我请求我的功能时,它并没有说我也有。这是我的代码:

let serviceController = SKCloudServiceController()
serviceController.requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in
    print("error in capability check is \(err)")
    switch capability {
    case SKCloudServiceCapability.musicCatalogPlayback:
        print("user has Apple Music subscription and can play music from apple music api")
    case SKCloudServiceCapability.addToCloudMusicLibrary:
        print("user has an Apple Music subscription, can play music from api, also can add to their music library")
    case SKCloudServiceCapability.musicCatalogSubscriptionEligible:
        print("user does not have subscription")
    default:
        print("default and capability is \(capability.rawValue)")
    }
}

每次我运行我的应用程序时,它都会打印“默认和能力为 257”。我已经尝试卸载/重新安装了十多次——每次都一样。

注意,我确实可以通过 Apple Music api 获取我的用户令牌并将歌曲添加到我的库中。

还有其他人遇到过这种情况,是否有其他解决方法可以查看用户是否订阅了 Apple Music?

【问题讨论】:

  • 请在下方查看我的回答

标签: ios apple-music


【解决方案1】:

capability 是一个OptionSet,因为用户可能拥有musicCatalogPlaybackaddToCloudMusicLibrary 或两者兼有。

您看到的原始值是实际值的按位OR,因为正如您所说,您拥有这两种能力。

您可以使用一系列if 语句或特定的if 语句来检查您需要的功能:

let serviceController = SKCloudServiceController()
serviceController.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 and can play music from apple music api")
    }

    if capability.contains(SKCloudServiceCapability.addToCloudMusicLibrary) {
        print("user has an Apple Music subscription, can play music from api, also can add to their music library")
    }

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

给予

用户订阅了 Apple Music,可以通过 Apple Music api 播放音乐

用户订阅了 Apple Music,可以通过 api 播放音乐,也可以添加到他们的音乐库中

【讨论】:

    【解决方案2】:

    您可以使用以下功能检查 Apple Music 订阅无效/用户没有订阅。

    var cloudServiceController: SKCloudServiceController? var cloudServiceSetUpController: SKCloudServiceSetupViewController?

    内部函数 appleMusicRequestCapabilities(){

        if let aController = AppleMusicSharedInstance.shared.cloudServiceController{
    
            aController.requestCapabilities { (capabilities, error) in
    
                if error != nil{
                    debugPrint("Error", error ?? "Unexpected Error")
                }else{
                    if capabilities.contains(SKCloudServiceCapability.musicCatalogPlayback){
                        debugPrint("musicCatalogPlayback")
                    }
                    if capabilities.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible){
                        debugPrint("musicCatalogSubscriptionEligible")
                        DispatchQueue.main.async {
                            self.setUpSubscriptionView()
                        }
                    }
                    if capabilities.contains(SKCloudServiceCapability.addToCloudMusicLibrary){
                        debugPrint("addToCloudMusicLibrary")
                    }
                }
            }
        }
    }
    

    以下方法可用于显示音乐订阅视图,用户可以在其中选择订阅。

    内部函数 setUpSubscriptionView(){

        if let aController = AppleMusicSharedInstance.shared.cloudServiceSetUpController{
            aController.load(options: [SKCloudServiceSetupOptionsKey.action: SKCloudServiceSetupAction.subscribe], completionHandler: { (success, error) in
                DispatchQueue.main.async {
                    if success{
                        AppDelegate.delegate().window?.rootViewController?.present(aController, animated: true, completion: nil)
                    }
                    else if (error != nil){
                        debugPrint("Error", error ?? "Unexpected Error")
                    }
                }
            })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 2020-07-15
      • 2018-11-08
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多