我有一个恢复按钮。问题是如果他们没有进行恢复,并且他们尝试购买一件物品,并且他们已经购买了该物品,我需要告诉他们他们已经购买了它并且不执行购买。所以我需要一种方法来知道他们购买了哪些物品,而无需进行恢复。每当用户尝试购买时,我都尝试先进行恢复,但苹果拒绝了我的应用程序。他们说在显示“确认应用内购买”对话框之前无法进行恢复。
请帮助我找到正确的方法。
提前致谢。
我有一个恢复按钮。问题是如果他们没有进行恢复,并且他们尝试购买一件物品,并且他们已经购买了该物品,我需要告诉他们他们已经购买了它并且不执行购买。所以我需要一种方法来知道他们购买了哪些物品,而无需进行恢复。每当用户尝试购买时,我都尝试先进行恢复,但苹果拒绝了我的应用程序。他们说在显示“确认应用内购买”对话框之前无法进行恢复。
请帮助我找到正确的方法。
提前致谢。
您可以将这些数据保存在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的文档
根据 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);
}
}
据我所知,没有其他方法可以做到这一点。
您应该提供一个恢复按钮来恢复应用内购买,否则苹果将拒绝您的应用。
如果不显示应用内购买确认警报,您将无法连接到应用内服务器或恢复产品。