iOS 中的应用内购买测试

2024-02-01

我在用Xcode 8.0、斯威夫特 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(数组中没有数据),所以请帮助我找到解决方案。可以看到代码中的注释: // 问题就在这里..我得到的计数为零..意味着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.

And

我还创建了用于测试的发送箱用户应用内购买。见下图:

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


我修好了这个。有几点需要注意。见下文:

  • 确保您的开发者帐户执行了付费应用程序合同。见下图:
  • 在 iTunes Connect 上创建产品。
  • 实施应用内购买代码和配置设置。
  • 使用分发配置文件创建一个版本。
  • 上传商店构建。将构建添加到当前版本。将应用内购买添加到 iTunes Connect 上的版本。
  • 然后尝试测试,如果仍然不行则提交一次应用程序然后取消它。然后尝试在您的设备上进行测试。
  • 确保当您使用沙箱用户进行测试时,您需要从设备设置中退出已登录的帐户,然后使用沙箱 ID 登录。
  • 一些屏幕截图可能会有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 中的应用内购买测试 的相关文章

随机推荐

  • Mysql,SUM 列和 GROUP BY HOUR

    情况 简化 tableA id date val 0 2018 02 19 00 01 00 10 1 2018 02 19 00 02 00 10 2 2018 02 19 00 03 00 10 2018 02 19 23 59 00
  • 如何使用 Cef4Delphi 从 JavaScript 调用 Delphi 函数

    我是德尔福的初学者 目前使用Delphi Berlin 版本 我正在尝试从 JavaScript 调用 Delphi 函数 方法 例如 我想在单击带有附加数据属性的 html 按钮时打开一个新的 Delphi 表单 HTML代码
  • 如何禁用选项卡栏中的特定选项卡才能单击?

    有没有办法禁用选项卡栏中的特定选项卡 这样除非再次启用 否则无法单击它 感谢任何帮助 谢谢 编辑 吸收 忽略指针的代码不起作用 class MyTabbedPage extends StatefulWidget const MyTabbed
  • 如何将具有像 ResNet 这样的非序列架构的 Keras 模型拆分为子模型?

    我的模型是 resnet 152 我想将其切成两个子模型 问题是第二个子模型 我不知道如何构建从中间层到输出的模型 我尝试了这段代码这个回应 https stackoverflow com questions 52800025 keras
  • 元组列表的列表,按第一个元素分组并添加第二个元素

    假设我有以下元组列表 tuples 2017 04 11 2000000 00 2017 04 12 1000000 00 2017 04 13 3000000 00 2017 04 12 472943 00 2017 04 13 1000
  • JavaScript 浮点好奇心

    我尝试进行一些浮点比较 这是我发现的 130 130 000000000000014210854715 true 130 130 000000000000014210854716 false 9 9 00000000000000088817
  • 我可以在猫鼬聚合之前使用填充吗?

    我有两种模型 一种是用户 userSchema new Schema userID String age Number 另一个是所有用户每天多次记录的分数 ScoreSchema new Schema userID type String
  • C++中继承私有成员

    假设一个类具有私有数据成员 但 setter 和 getter 位于公共范围内 如果从此类继承 您仍然可以调用这些 setter 和 getter 从而能够访问基类中的私有数据成员 既然提到派生类不能继承私有数据成员 这怎么可能 派生类不继
  • 将多个变量传递给内容脚本 chrome

    我正在编写我的第一个 chrome 扩展 几个小时前才开始 当硬编码时一切都运行良好 本质上 我正在填写一份 8 页的表格 表单的每个页面对应一个单独的内容脚本 内容脚本过去看起来像这样 查找字段有点困难 因为它们不是标准的 但我并不担心
  • 按照惯例,Java .class 文件存储在哪里?

    我有一个 Java src 文件夹 在其中存储 java 文件 然后 我使用终端编译它们 并最终在同一目录中获取 class 文件 这不一定会困扰我 但我从未见过专业人士这样做过 按照专业惯例 如果存在 应将编译后的 class 文件存储在
  • 如何在flutter中实现自定义对话框?

    我是 flutter 新手 需要创建一个图库应用程序 该应用程序需要自定义对话框来显示所选图像 我怎样才能实现呢 使用 Flutter 中 AlertDialog 类的父类 Dialog 类 对话框小部件有一个参数 shape 您可以使用它
  • MATLAB - 具有布尔值的棘手颂歌系统

    编辑 感谢您的支持 现在我终于添加了图像 添加了完整的 m file 尽管我认为没有必要 代码的关键是 xp 2 x 2 gt X2 xp 3 gt 0 xp 3 x 3 gt X3 xp 2 gt 0 完整代码 function xp u
  • Guice的injectMembers方法

    我了解使用构造函数注入相对于 setter 注入的好处 但在某些情况下我必须坚持仅使用基于 setter 的注入 我的问题是如何使用注入所有基于设置器的注入类的成员injector injectMembers method I am cal
  • getGenericParameterTypes 和 getParameterTypes 之间的区别

    我正在尝试了解之间的区别getGenericParameterTypes and getParameterTypes方法 我知道有人回来了Class 和另一个Type 但真正的区别是什么 考虑方法 public void method1 T
  • Git克隆存储库错误:RPC失败;结果=56,HTTP 代码=200

    我已经使用 Git 存储库几年了 但仍然感觉像个新手 非常欢迎帮助 它开始克隆一段时间 remote Counting objects 22394 br remote Compressing objects 100 12314 12314
  • iconv 返回奇怪的结果

    我正在研究一种方法来解决在 PHP 中创建帐户的自动脚本中使用特殊字符的问题 由于电子邮件地址和其他地方不需要特殊字符 因此我试图删除它们 但在将它们提供给脚本之前我无法删除它们 因为用户名必须正确显示给其他用户 例子 J rgen G t
  • scala 类中属性的可见性

    我通过以下方式在类的构造函数中定义了一个属性 class Step val message String 当我尝试访问时message从 Java 代码中获取可见性错误的值 为什么 如果添加 scala reflect BeanProper
  • 块递归和破坏保留周期

    为了更好地说明问题 请考虑以下块递归的简化形式 block void next int int index if index 3 return int i index next i next 0 XCode 启用 ARC 警告 在此块中强烈
  • 在 TypeScript 中输入 gql-tag

    我正在使用 GraphQL 并且希望严格输入gql 是否有可能使result变量的形状ResultData即使用最新版本的 TypeScript 它只与输入有关 与运行时无关 interface Data one string two nu
  • iOS 中的应用内购买测试

    我在用Xcode 8 0 斯威夫特 3 0并在我的 iPad 上进行应用程序购买测试 我想使用沙盒用户测试应用程序购买 设备设置中没有添加账户 问题是我没有获取产品列表来响应产品请求代码 请看一下我的代码 let PRODUCT ID MY