Apple Music Api Detect Подписка Apple Music не работает

Apple предлагает метод в рамках StoreKit, чтобы определить, есть ли у пользователей подписка на Apple Music, хотя он просто не работает. У меня есть подписка на 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». Я пытался удалить/переустановить, наверное, дюжину раз - каждый раз одно и то же.

Обратите внимание: я действительно могу получить свой токен пользователя и добавить песни в свою библиотеку через API Apple Music.

Кто-нибудь еще сталкивался с этим, и есть ли другой обходной путь, чтобы узнать, есть ли у пользователя подписка на Apple Music?


person joey    schedule 14.01.2019    source источник
comment
Пожалуйста, проверьте мой ответ ниже   -  person CrazyPro007    schedule 27.01.2019


Ответы (2)


capability — это OptionSet, поскольку пользователь может иметь musicCatalogPlayback или addToCloudMusicLibrary или обе возможности.

Необработанное значение, которое вы видите, представляет собой побитовое 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, а также может добавлять в свою музыкальную библиотеку

person Paulw11    schedule 14.01.2019

Вы можете использовать функцию ниже, чтобы проверить, что подписка 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")
                }
            }
        })
    }
}
person CrazyPro007    schedule 17.01.2019