在应用程序中购买invalidProductIdentifier的时间为30%?

时间:2016-08-15 19:59:24

标签: ios swift in-app-purchase

我为我的项目配置了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
    }

2 个答案:

答案 0 :(得分:2)

如果您在测试设备上收到invalidProductIdentifier,可能会有很多原因导致这种情况发生。最常见的情况是:

  • 应用程序在检查之前未从头开始重新安装:您需要 从设备中删除应用并重新安装;
  • 旧产品ID:如果您的产品ID无效,它们将显示在invalidProductIdentifiers中;
  • 越狱设备:从Cydia中移除AppSync以在越狱设备上进行调试;
  • 使用与显式应用程序ID无关的配置文件。

您可以找到更多原因here。 但是,测试设备上的无效产品ID问题并不一定意味着您的用户也会遇到此问题。

答案 1 :(得分:0)

如果您的测试设备中有该应用程序的appstore版本,并且您尝试在同一设备上调试该IAP,则可能会导致此问题。在尝试任何操作之前,请先卸载apstore版本的应用程序。 第二个可能的问题是,您应该在插入USB电缆的情况下检查IAP。您无法通过Ad-hoc部署对其进行测试。

此外,我找到了一个很好的链接来检查所有可能的失败:

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