iOS中应用内购买测试

3

我正在使用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为空(数组中没有数据),请帮我找到解决方案。您可以在代码注释中看到:

// 问题就在这里... 我得到的计数为零... 这意味着response.products返回了空数组

我在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.

In-App Purchases iOS iTunes Connect提交状态

此外,我还为测试创建了 Sendbox 用户以进行应用内购买。请查看下面的图像:

Sendbox测试用户进行iOS应用内购买

我是否遗漏了什么?或者有什么错误?错误在哪里?我想使用沙盒用户来测试应用内购买


你解决了吗? - Maxim Shoustin
是的 @MaximShoustin... 请看下面我的回答。如果你遇到了同样的问题,我认为你可能漏掉了一些小细节。 - Gaurav Rami
2个回答

8
我已经修复了这个问题。有一些需要注意的地方,请参见以下内容:
  • 确保您的开发者账户已签署付费应用合同。请参考下面的图片:
  • 在iTunes Connect中创建产品。
  • 实现应用内购买代码和配置设置。
  • 使用分发配置文件创建一个构建版本。
  • 将构建版本上传到商店。将构建版本添加到当前版本。将应用内购买添加到iTunes Connect上的该版本中。
  • 尝试测试,如果仍然无法,请先提交应用程序,然后再取消它。然后再尝试在您的设备上测试。
  • 请务必在使用沙盒用户进行测试时,在设备设置中注销您已登录的帐户,并使用沙盒ID登录。
  • 一些屏幕截图可能会有所帮助。

enter image description here

enter image description here

enter image description here

enter image description here


有一件事是让我遇到了困难的,那就是我没有填完我的银行信息。在完成这一步之后,产品ID才开始工作。 - One In a Million Apps
1
我们必须先上传二进制文件然后提交吗? - R.Kaka

2
请检查以下设置: 能力 --> 应用内购买 --> 设置为“开启” 并在 developer.apple.com 上为 App ID 启用应用内购买。
请使用设备而不是模拟器测试应用程序。

Xcode-->capabilities

developer.apple.com--> enable In-App purchase


感谢您的回复,Mahial Singh。但是我已经在证书和配置文件中启用了iTunes中的应用内购买,并且我还在xCode -> Capabilities中启用了应用内购买...这已经完成了。 - Gaurav Rami
那么你需要检查产品标识符。产品标识符的匹配区分大小写。 因此,如果您在苹果上创建了一个标识符为 com.yourcompany.product1的产品, 并且您使用 com.yourcompany.Product1作为产品标识符调用产品请求, 则您的列表将返回零个产品。 - MAhipal Singh
或者你可以尝试使用:productID = "MyProduct"let productsRequest: SKProductsRequest = SKProductsRequest(productIdentifiers: productIDs as! Set<String>)而不是productID = "com.company.ProjectName.MyProduct" - MAhipal Singh
// 这段代码中的ProducID和iTunes上的ProducID是相同的。✔️ .....我已经在代码注释中提到了。请看第二行。两者是相同的...我知道:产品标识符匹配是区分大小写的...我认为问题就在于那个警告...... - Gaurav Rami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接