为啥 SKProductsRequest 需要产品标识符?

Posted

技术标签:

【中文标题】为啥 SKProductsRequest 需要产品标识符?【英文标题】:Why does SKProductsRequest need product identifiers?为什么 SKProductsRequest 需要产品标识符? 【发布时间】:2014-08-03 10:17:35 【问题描述】:

我正在尝试实施应用内购买。

我已经在 iTunes Connect 中注册了一些应用内购买。我认为对于应用程序来说,找出应用程序内购买就足够了。但是 SKProductsRequest 应该使用产品 ID 进行初始化。

[[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productIdentifiers]];

SKProductRequest 在与 Apple 服务器通信时可以知道应用内购买的名称、价格和产品 ID,即使没有通过 productIdentifiers 进行初始化。对吧?

所以,我不明白为什么 SKProductsRequest 需要产品 ID。 我可以在没有产品 ID 的情况下使用它从 Apple 服务器检索应用内购买内容吗?

【问题讨论】:

【参考方案1】:

您需要向initWithProductIdentifiers 调用提供一组有效的产品标识符,因为这是 API 指定的。

要使用 SKProductsRequest 对象,请使用以下列表对其进行初始化 产品标识符字符串,附加一个委托,然后调用 请求的启动方法。请求完成后,您的代表 接收一个 SKProductsResponse 对象。

为什么要以这种方式设计 API 是一个见仁见智的问题(除了 Apple 的员工知道他们为什么以这种方式设计它)。我的观点是,通过要求应用提交一组产品标识符,可以避免以下情况下可能出现的问题:

    已发布支持应用内购买的应用 发布后,新的应用内购买项目会添加到 iTunesConnect 并获得批准 应用显示购买界面,自动显示所有已批准的应用内购买 用户购买了新产品,但应用无法完成此次购买,因为它不知道购买的是什么(应用在产品定义之前发布) 用户向 Apple 投诉并退款,因为应用程序没有提供内容/功能,或者用户因为没有获得内容/功能但没有投诉并获得退款但体验不佳而感到恼火-应用购买

【讨论】:

我知道为什么你的答案被授予正确的答案......但没有任何投票 实际上这是我的问题:我只需要知道用户商店所在的国家/地区,以便我可以将其包含在 Apple iTunes 搜索 API 中的搜索中。换句话说......我 没有有任何应用内购买..我只是想使用this技巧找出.. 所以问题是:我假设 store-kit 框架 不会 工作,除非 intunes 连接我 声称 我有在应用程序购买中(我没有).. 但是我的应用程序将被拒绝 b/c 我是个聪明人 是的,这听起来很对。应用程序内购买需要像应用程序一样获得批准 - 如果您实际上没有能力购买东西,我猜他们会拒绝它。

以上是关于为啥 SKProductsRequest 需要产品标识符?的主要内容,如果未能解决你的问题,请参考以下文章

IAP-可以获取免费订阅产品,但不能获取付费产品

SKProductsrequest 在 Swift 中不返回任何内容

iOS Crash Report SKProductsRequest

SKProduct Swift - 信息从何而来?

未从 SKProductsRequest 收到应用内购买 SKProduct

多个产品的应用内购买