44

我第一次在我的应用程序更新中实施了应用程序购买,也只是等待了 3 周,但由于以下原因被拒绝:

我们发现您的应用提供可以恢复的应用内购买,但它不包含允许用户恢复之前购买的应用内购买的“恢复”功能。要恢复以前购买的应用内购买产品,最好提供一个“恢复”按钮并在点击“恢复”按钮时启动恢复过程。

现在我正在考虑在navbar表格的右侧(顶部)添加一个按钮,可以看到/点击应用购买,并添加以下将链接到该按钮的代码:

 [[SKPaymentQueue defaultQueue]   restoreCompletedTransactions];

有人可以验证这是正确的并且很可能是所有需要的吗?希望这次能顺利通过。提前致谢!

4

4 回答 4

43

我使用这个的变体:

//inside of an IBaction
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];


// Then this is called
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
    NSLog(@"%@",queue );
    NSLog(@"Restored Transactions are once again in Queue for purchasing %@",[queue transactions]);  

    NSMutableArray *purchasedItemIDs = [[NSMutableArray alloc] init];
    NSLog(@"received restored transactions: %i", queue.transactions.count);

    for (SKPaymentTransaction *transaction in queue.transactions) {
        NSString *productID = transaction.payment.productIdentifier;
        [purchasedItemIDs addObject:productID];
        NSLog (@"product id is %@" , productID);
        // here put an if/then statement to write files based on previously purchased items
        // example if ([productID isEqualToString: @"youruniqueproductidentifier]){write files} else { nslog sorry}
    }  
}

对不起,如果这没有意义,我在我的 iPad 上。

于 2012-06-14T08:28:09.523 回答
28

亚历克斯,上周我因为同样的原因被拒绝了,这正是苹果想要的——在添加了这样一个恢复按钮之后,他们没有就这个主题提出任何其他问题。

当然,您不仅需要调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];,还需要实现恢复本身(我的意思是,向用户提供内容)。

于 2012-06-13T19:40:53.903 回答
4

这是因为您可以在不同的 iOS 设备上使用相同的 Apple ID 登录。

例如,假设我test@iCloud.com在 iPad 上登录。当我下载您的应用程序时,我意识到我想删除广告,所以我支付了 99 美分来删除它们。

一年后,我决定购买一部 iPhone,并使用该帐户登录 test@iCloud.com,然后再次下载您的应用程序。但是,广告仍然存在,即使我已经付费在 iPad 上将其删除。这就是恢复功能的用武之地。使用它,我可以恢复我在 iPad 上购买的内容,并让它们在我的 iPhone 上运行。

要恢复购买,您可以使用:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

这导致

(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentQueue *)queue

要调用的方法。在其中,您需要向用户提供他们购买的内容。

于 2014-02-23T02:50:28.087 回答
3

恢复按钮的替代方案可能是应用程序设置包中的恢复开关。它不会压倒 UI,而且似乎 Apple 很欢迎它(但请务必提及您已经以这种方式实现了机制)。

BOOL shouldRestorePurchases = [[NSUserDefaults standardUserDefaults] boolForKey:@"restorePurchasesKey"];
于 2013-03-14T19:30:42.700 回答