我有一个恢复按钮。问题是,如果他们没有“完成恢复,并且他们尝试购买物品,并且他们已经购买了该物品,我需要告诉他们他们已经购买了它而不进行购买。所以我需要一种方法来知道他们购买了哪些物品,而不进行恢复。我试图在用户试图购买时首先进行恢复,但苹果拒绝了我的应用。他们表示,在显示“确认应用程序内购买”对话框之前,无法进行恢复。
请帮我找到正确的方法。
提前致谢。
答案 0 :(得分:6)
您可以将这些数据保存在NSUserDefaults中。而且您不需要显示警告说已经购买了这些物品。如果它的非消费品苹果显示警告说他们已经购买了该物品!
修改强>
1)您需要在视图中添加3个按钮
如果您在应用中支持应用内购买,则需要为用户提供还原选项。否则Apple会拒绝您的应用。
2)如果用户按下购买按钮,请不要检查用户是否已经购买了您的应用程序。因为Apple不会向用户收取两次相同的非消费品。因此,只需浏览您的购买代码,如果用户已购买它,Apple的StoreKit框架将调用它的委托方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
带
SKPaymentTransactionStatePurchased
交易状态。因此,您可以向他显示登录屏幕。
3)如果用户按下恢复按钮,则只需执行恢复代码
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
并且在第二步中它会调用具有相同事务状态的委托方法。因此,您可以向用户显示登录页面。
4)如果用户按下演示版按钮,请向他演示演示版。
5)如果用户购买了您的应用,将其删除,如果他重新安装,请将其视为新用户。向他展示这3个按钮,用户可以恢复购买,然后您可以向他显示登录页面。
6)如果您确实需要跟踪是否在确切的设备上购买了应用程序,那么您可以使用钥匙串存储您的数据,因为即使应用程序已卸载或已删除,Keychain项也不会被删除。这个Api将有很多帮助link,看看
或
您可以参考Apple关于钥匙串数据的documentation
答案 1 :(得分:2)
据Apple称,“在显示确认应用程序内购买对话框之前,无法进行恢复。”使用 - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)队列 功能,检查代码
- (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);
}
}
答案 2 :(得分:1)
据我所知,没有其他方法可以做到这一点。
您应该提供恢复按钮以恢复应用内购买,否则Apple将拒绝您的应用。
如果不显示应用内购买确认提醒,您将无法连接到应用程序内服务器或还原产品。