最近我提交了一个应用内购买的应用,因为以下内容而遭到拒绝:
我们发现,虽然您的应用可以提供应用内购买 恢复,它不包括所需的"恢复"功能允许 用户恢复以前购买的应用程序内购买
我已完全按照说明操作并执行了以下操作:
- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
[self recordTransaction:transaction];
[self provideContent:transaction.payment.productIdentifier];
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
[self recordTransaction: transaction];
[self provideContent: transaction.originalTransaction.payment.productIdentifier];
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
显然,我还没有一个触发restoreTransaction的按钮,但我感到困惑的是,Apple是否只是要求将此作为用户的形式以减少混淆?因为上述两种方法都做了完全相同的事情,并且我注意到在我之前已经这样做之后尝试购买应用程序内购买时,它会说类似于"免费升级,因为您已经购买了它#34 ;.
所以我的第一个问题是,是否有一个恢复按钮的目的只是为了防止用户吓坏他们可能会害怕推送"购买"再次?即我不需要在数据库或其他什么地方跟踪我的客户购买历史记录?
第二个问题是,如果之前没有购买该应用的用户推送"恢复"出于好奇,它会继续为他们购买应用内购买吗?
答案 0 :(得分:2)
Apple希望您拥有Restore All Purchases
- 按钮
应该从Apple获取购买清单。
用户在他想要恢复某些东西时不应该点击购买(关于购买与否的混淆,比如AppStore的早期版本)
当您触发恢复时,它不会购买任何东西。这只是我购买的恢复,如果不是它只是失败但不购买任何东西。
如果您不确定应用内购买代码,可以阅读Raywenderlich.com上的Introduction to In-App Purchases。该文章还提供了一个超级可重用的应用程序内购买帮助程序代码。
用户在应用内购买帮助程序中点击Restore All Purchases
时调用的方法是- (void)restoreCompletedTransactions;
答案 1 :(得分:1)
第一个问题有点主观,通常在SO上没有得到很好的接受,但无论如何我都会尝试回答。
许多Apple人机界面指南专注于使应用程序“感觉”与设备匹配,如in the guidelines所述。虽然其中很多都集中在设备屏幕上运行良好的元素大小,但包括恢复按钮也是感觉的一部分。 Apple有点随意地决定,如果应用程序提供应用内购买以满足其系统的感觉,则需要恢复按钮。
第二个问题实际上看起来有点像以前的问题,这个问题被混淆地标记为偏离主题。问题更多地涉及如何设置还原,但我认为它可能会使您受益并防止上面的重复代码。 Here是链接。具体来说,Wrights接受的答案看起来像是一个很好的模板,以确保您没有为具有恢复功能的用户实际购买东西。
如果问题被删除,here是答案建议的教程。
希望能提供一些帮助。