我有一些应用内购买未在iTunes Connect中销售。
我的目标是在需要时启动应用程序后启用和禁用它们。
然而,当我在沙盒模式下测试时,所有这些产品都出现了。我曾假设SKProductsResponse会在其中返回任何无效产品的invalidProductIdentifiers方法。
这是SandBox和生产模式之间的区别吗?即使这些产品没有被清除出售,它们是否总能出现?
答案 0 :(得分:6)
是的,有区别。我刚刚发布了我的应用程序版本,它检查了11种不同的IAP,其中只有4种是已批准的。其中只有1个是“清仓待售”。因此,在产品中,只有1出现。对于处于“已批准”状态的其他人,当我将其更改为“清除待售”时,他们会在我的应用程序中显示生产(一旦更改从Apple的服务器传播,这需要几个小时)。
但是,在Sandbox中,我的应用正在寻找的所有产品标识符都会显示,因为它会在AppStore中找到它们。就像你说的那样,它们是空白的。 SKProduct
没有可用于检查此“已清算待售”标记的属性。
事实上,我找到了你的帖子,因为我希望在这种情况下找到其他人 - 因为我的新版本因为这些“空白项目”而被拒绝了。您认为应用商店评论员会知道Sandbox的行为与Production不同。 :/
答案 1 :(得分:0)
沙盒环境和生产环境之间的一些其他差异:
#1。 “开发人员从销售中删除” IAP被确认为有效产品
我在Apple App Store中拥有一个应用程序已有一段时间,最近我决定从销售中删除一个应用程序内购买(IAP)。完成此操作后,在iTunesConnect(AppStoreConnect)上此应用程序的IAP设置中,该产品的状态显示为“开发人员已从销售中删除”:
即使使用沙箱环境,SKProductsRequestDelegate.productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse)
方法仍会在response.products
列表中将此“开发人员从销售中删除” IAP产品返回为response.invalidProductIdentifiers
列表中的有效产品。生产环境在LAST_TOUCH == USER_ID AS SEEN,
列表中返回此IAP产品ID。
更令人困惑的是,即使沙盒环境被标记为“已从开发人员中删除”,我仍然可以从我的应用程序中购买该产品。
我已就此问题与Apple开发人员技术支持(DTS)联系,并被要求与Apple打开一个错误报告,以向他们传达此行为,因为这似乎不是所需的功能。
#2。 “开发人员已退出销售” IAP收据验证+ SKProductsRequest
由于上述IAP已从销售中删除,因此我认为自然也应该从我的SKProductsRequest调用中删除IAP产品ID。
不幸的是,当我的一位用户试图恢复其购买时,由于IAP产品ID未包含在SKProductsRequest中,因此我无法在收据中验证购买(看起来好像是从Apple收到的收据数据不包括此类产品)。
因此-我在这里学到的重要教训是,即使您从销售中删除了IAP,您仍然需要在SKProductsRequest中包括该IAP产品ID,以便用户能够恢复以前购买的IAP。
(我认为我的经验与该问题有关,因此在这里进行答复(而不是提出另一个问题,对于寻求该信息的人们来说会更有效。)