В App Purchase invalidProductIdentifier в 30% раз?

Я настроил IAP для своего проекта и, похоже, работает, поэтому мое приложение работает в магазине приложений, но я обнаружил, что примерно 30% запросов на ITunes, возвращающих invalidProductIdentifier по какой-либо причине, ниже - полный код:

class IAP: NSObject, SKProductsRequestDelegate {

    static let sharedInstance = IAP()

    func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
        response.invalidProductIdentifiers.forEach() { id in
            //here is the part that could fail sometimes
            print(id)
        }
    }

    //here how I setup IAP
    func canMakePayments() {
        if(SKPaymentQueue.canMakePayments()) {
            var productID = NSSet()
            productID = NSSet(object: "unlock")
            let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
            request.delegate = self
            request.start()
        }
    }
}

И вот как я использую его из AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        IAP.sharedInstance.canMakePayments()
        return true
    }

Ответ 1

Если вы получаете invalidProductIdentifiers на своем тестовом устройстве, может возникнуть множество причин, почему это происходит. Наиболее частые случаи:

  • Приложение
  • не было переустановлено с нуля перед проверкой: вам нужно удалить приложение с устройства и снова установить его;
  • старые идентификаторы продукта: если у вас есть идентификаторы продуктов, которые являются недопустимыми, они появятся в invalidProductIdentifiers;
  • jailbroken device: удалите AppSync из Cydia для отладки на джейлбрейк-устройстве;
  • с использованием профиля подготовки, который не связан с явным идентификатором приложения.

Здесь вы можете найти больше причин . Тем не менее, неверные идентификаторы продуктов на тестовом устройстве не обязательно означают, что ваши пользователи тоже испытывают эту проблему.

Ответ 2

Если у вас есть версия appstore этого приложения в вашем тестовом устройстве, и вы пытаетесь отладить этот IAP на одном устройстве, это может привести к этому. Перед тем, как попробовать что-либо, отмените установку apstore. Вторая возможная проблема заключается в том, что вы должны проверить IAP с подключенным USB-кабелем. Вы не можете протестировать его с помощью развертывания Ad-hoc.

Также я нашел отличную ссылку для проверки всех возможных сбоев:

http://troybrant.net/blog/2010/01/invalid-product-ids/