2010-03-19 93 views
20

我正在测试我的应用购买应用程序。当我在沙箱环境中使用我的用户帐户第二次购买我的易损件产品时,它总是向我显示一条警告:“您已经购买了该产品,但尚未下载,请点击确定立即下载。”有什么办法可以跳过警报吗?如何跳过提示“您已经购买了该商品但尚未下载”

感谢您的任何帮助。

+0

你有解决方案...我也在这里得到同样的问题。 – 2010-12-15 04:21:31

回答

6

这实际上相当复杂。苹果公司在他们的交易过程中建立了这个信息,所以如果你让用户到达他们试图重购他们已经拥有的产品的地步,他们会看到这个信息。

您可以使用

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

要恢复他们以前购买的任何交易,他们得到您的购买屏幕之前。在存储GUI加载之前运行restoreCompletedTransactions,然后锁定事务成功完成时解锁的任何内容的购买按钮。

+1

即使是耗材? – Brandon 2010-11-24 14:56:28

+5

不用,restoreCompletedTransactions在使用耗材时没有用处。 – 2010-11-25 11:08:09

+7

请注意,在调用'restoreCompletedTransaction'时,会弹出密码输入屏幕,用户可能不知道为什么。 – pt2ph8 2011-04-05 14:02:44

14

如果您在购买消耗品后已经购买了消耗品,则不应该看到此警报。如果你是,那么你从来没有从队列中移除交易。您需要在商店让您再次购买之前将其删除。

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
+3

不幸的是,这并没有摆脱我的问题。 – Gomfucius 2012-06-14 21:37:06

+0

是的。还要确保在重新启动模拟器/设备后调用您的paymentQueue:updatedTransactions:并检查未决事务的状态。在某些时候,你必须调用finishTransaction。 – saulobrito 2013-04-24 14:22:48

2

这也可以非常有效的代码中发生一个特设的建立,如果你使用非沙箱ID,或者错误的沙盒ID登录 - 从除证书不同的开发程序像一个该应用程序与之签署。例如,像个人与企业一样。

10

好吧,我的解决方案搜索了几个小时后的网络!不要忘记为您的IAP经理添加交易观察员

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

你的应用程序应该在应用程序初始化期间观察员添加到支付队列。如果没有观察员附加到队列中,则支付队列不会将其待处理事务列表与Apple App Store同步,因为没有观察员对更新的事务做出响应。

如果应用程序在交易仍在处理时退出,那些交易不会丢失。应用程序下次启动时,支付队列将继续处理事务。您的应用程序应始终期望收到完成的事务通知。

+0

嘿下来选民,你能给你的理由?谢谢:) – Kjuly 2013-10-11 00:53:56

+2

**她**是嫉妒的:D – 2014-05-11 14:43:55

2

确保您已在处理所有请求的控制器中添加了这段代码。

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 
1

我刚刚在修改了一个新帐号后使用了这个问题。我认为苹果公司的系统刚刚得到支持,并暂时弄虚作假。

祝你好运!

2

我有同样的问题,即使我没有添加交易观察者,也没有从队列中删除事务。我能够通过清理我的配置配置文件来解决它:

  1. 转到Provisioning户,检查你的发行版/开发者配置的配置文件仍然是有效的 - 如果需要续借,或至少通过移除设备刷新他们并再次添加它。

  2. 在XCode中转到您的管理器并删除所有配置文件,而不是命中刷新。

  3. 从测试设备中删除您的应用程序和所有的APP提供的配置文件

  4. 登出从appstore里当前的测试用户,并稍后再登录在应用程序内购买的东西 你当上会请你这样做。

  5. 清洁,建立和当你在你的应用程序购买商品

  6. 祈求你的作品也与您的测试用户登录!

+0

在FWIW部门,简单地重新启动我的iPad Mini(运行7.0.4)也恢复了“正常”沙箱行为(不影响配置文件 - 尽管我打算尝试接下来的步骤!) – mm2001 2014-07-18 06:26:45

相关问题