iOS 中的应用内购买测试

Posted

技术标签:

【中文标题】iOS 中的应用内购买测试【英文标题】:In app purchase testing in iOS 【发布时间】:2016-11-29 07:27:08 【问题描述】:

我正在使用 Xcode 8.0、Swift 3.0 并在我的 iPad 上测试应用购买。 我想使用沙盒用户测试应用内购买。

设备设置中没有添加帐号

问题是我没有响应产品请求代码获得产品列表。 请看我的代码:

let PRODUCT_ID_MY_PRODUCT = "com.company.ProjectName.MyProduct"
// The ProducID in this code and ProducID on iTunes are the SAME. ✔️

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)

    if productID == nil 
        productID = PRODUCT_ID_MY_PRODUCT
    
    SKPaymentQueue.default().add(self)



override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)

    startPurchases()


func startPurchases() 
    if (SKPaymentQueue.canMakePayments())
    
        let productIDs = NSSet(object: self.productID!)

        let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productIDs as! Set<String>)
        productsRequest.delegate = self
        productsRequest.start()
    



// Delegate Methods for SKProductsRequest
func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) 
    let count : Int = response.products.count
       // THE PROBLEM IS HERE.. I AM GETTING COUNT IS ZERO.. MEANS response.products returning null ARRAY
    if (count>0) 
        let validProducts = response.products
        for aProduct in validProducts 
            print(aProduct.productIdentifier)
        
     else 
        DispatchQueue.main.async(execute: 
            UIAlertView(title: "Purchase !", message: "Product not available", delegate: nil, cancelButtonTitle: "OK").show()
            return
        )
    

所以.....这就是问题所在:我得到 response.products null(数组中没有数据)所以请帮助我找到解决方案。您可以在代码中看到 cmets: // 问题在这里.. 我得到的计数为零.. 意味着 response.products 返回 null 数组

我通过 iTunes Connect 创建产品。你可以看到下面的图片。所有产品都处于“准备提交”状态。

iTunes 上有一些警告

Your first In-App Purchase must be submitted with a new app version. 
Select it from the app’s In-App Purchases section and click Submit.


Once your binary has been uploaded and your first In-App Purchase 
has been submitted for review, additional In-App Purchases can be 
submitted using the table below.

还有

我还创建了 Sendbox 用户用于测试应用内购买。见下图:

我错过了什么吗?或者是什么错误?错误在哪里? 我想使用沙盒用户测试应用内购买

【问题讨论】:

你解决了吗? 是的@MaximShoustin ...请在下面查看我的答案。如果您面临同样的问题,我认为您缺少一些小部分。 【参考方案1】:

我解决了这个问题。有几点需要注意。见下文:

确保您的开发者帐户履行了付费应用合同。见下图: 在 iTunes Connect 上创建产品。 实施应用内购买代码和配置设置。 使用分发配置文件创建一个构建。 在商店上传构建。将构建添加到当前版本。将应用内购买添加到 iTunes Connect 上的版本。 然后尝试测试,如果仍然没有,则提交应用程序一次然后取消它。然后尝试在您的设备上进行测试。 确保在使用沙盒用户进行测试时,您需要从设备设置中退出已登录的帐户,并使用沙盒 ID 登录。 一些屏幕截图可能会有所帮助。

【讨论】:

对我来说是一个绊脚石的一件事是我没有完成我的银行信息。完成该步骤后,产品 ID 开始起作用。 我们必须上传二进制文件然后提交吗?【参考方案2】:

请检查这些设置 功能 --> 应用内购买 --> 设置为“开启” 并在 developer.apple.com--> 为 App ID 启用应用内购买。

请在设备而不是模拟器上测试应用。

【讨论】:

感谢 Mahial Singh 的回复。但我已经在证书和配置文件中的 iTunes 中启用了应用内购买。我还在 xCode -> 功能中启用了应用内购买。 . 这已经完成了。 那么您必须检查产品标识符。产品标识符匹配区分大小写。因此,如果您在 Apple 上创建了一个标识符为 com.yourcompany.product1 的产品,并且您使用产品标识符 com.yourcompany.Product1 调用产品请求,那么您的列表将返回零个产品。 或者您可以尝试使用 productID = "MyProduct" let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productIDs as!Set) 而不是 productID = "com.company.ProjectName.MyProduct"跨度> // 此代码中的 ProducID 和 iTunes 上的 ProducID 相同。 ✔️ .....我已经在代码注释中提到过。见第二行。两者都是一样的......我很清楚:产品标识符匹配区分大小写......我认为问题是关于那个警告............

以上是关于iOS 中的应用内购买测试的主要内容,如果未能解决你的问题,请参考以下文章

ios - 活动应用程序中的应用内购买失败

读书笔记iOS-应用内购买

可以使用iOS 8模拟器测试应用内购买吗?

如何测试推广您的应用内购买

在 ios 中测试应用内购买

在 iOS 上测试应用购买