8

我有一个恢复按钮。问题是如果他们没有进行恢复,并且他们尝试购买一件物品,并且他们已经购买了该物品,我需要告诉他们他们已经购买了它并且不执行购买。所以我需要一种方法来知道他们购买了哪些物品,而无需进行恢复。每当用户尝试购买时,我都尝试先进行恢复,但苹果拒绝了我的应用程序。他们说在显示“确认应用内购买”对话框之前无法进行恢复。

请帮助我找到正确的方法。

提前致谢。

4

3 回答 3

6

您可以将这些数据保存在NSUserDefaults中。而且您无需显示已购买商品的警报。如果它是非消耗品,苹果会显示警报,说他们已经购买了该商品!

编辑:

1)您需要在视图中添加 3 个按钮

  • 购买按钮
  • 恢复按钮
  • 演示版

如果您在应用中支持应用内购买,则需要为用户提供恢复选项。否则 Apple 将拒绝您的应用程序。

2)如果用户点击购买按钮,不要检查用户是否已经购买了你的应用程序。因为苹果不会为同一种非消耗品向用户收取两次费用。因此,只需查看您的购买代码,如果用户已经购买了它,Apple 的 StoreKit 框架将调用它的委托方法

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

SKPaymentTransactionStatePurchased

交易状态。因此,您可以向他展示登录屏幕。

3)如果用户按下恢复按钮,只需通过您的恢复代码

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

和第二步一样,它将调用具有相同事务状态的委托方法。因此,您可以向用户显示登录页面。

4) 如果用户按下演示版按钮,向他展示演示版。

5)如果用户购买了您的应用程序,则将其删除,如果他重新安装,则将其视为新用户。向他展示这 3 个按钮,用户可以恢复购买,然后您可以向他展示登录页面。

6)如果您确实需要跟踪应用程序是否在确切的设备上购买,那么您可以使用钥匙串来存储您的数据,因为即使应用程序被卸载或删除,钥匙串项目也不会被删除。这个 Api 会帮助很多链接,看看

或者

你可以参考苹果关于 Keychain data的文档

于 2013-05-06T12:50:14.197 回答
2

根据 Apple 的说法,“在显示 Confirm In-App Purchase 对话框之前无法进行恢复。” 使用- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 函数,查看代码

- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error {  
     NSLog(@"%@",error);
}

// Call This Function
- (void) checkPurchasedItems
{
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

//Then this delegate Function Will be fired
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
    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(@"%@",purchasedItemIDs);
    }
}
于 2013-05-06T12:53:03.363 回答
1

据我所知,没有其他方法可以做到这一点。

您应该提供一个恢复按钮来恢复应用内购买,否则苹果将拒绝您的应用。

如果不显示应用内购买确认警报,您将无法连接到应用内服务器或恢复产品。

于 2013-05-06T12:49:34.663 回答