根据Apple "a restore cannot occur before the Confirm In-App Purchase dialog is displayed."使用 *- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue )queue function ,检查代码
- (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);
}
}
3 回答
您可以将这些数据保存在NSUserDefaults中 . 而且您不需要显示警告说已经购买了这些物品 . 如果它的非消费品苹果显示警告说他们已经购买了该物品!
EDIT:
1)您需要在视图中添加3个按钮
购买按钮
还原按钮
演示版
如果您在应用中支持应用内购买,则需要为用户提供还原选项 . 否则Apple将拒绝您的应用 .
2)如果用户按下购买按钮,请不要检查用户是否已经购买了您的应用程序 . 因为Apple不会向用户收取两次相同的非消费品 . 所以只需查看您的购买代码,如果用户已购买它,Apple的StoreKit框架将调用它的委托方法
同
交易状态 . 所以你可以给他登录屏幕 .
3)如果用户按下恢复按钮,则只需执行恢复代码
并且在第二步中它将调用具有相同事务状态的委托方法 . 因此,您可以向用户显示登录页面 .
4)如果用户按下演示版按钮,请向他演示演示版 .
5)如果用户购买了您的应用程序,将其删除,如果他重新安装,请将其视为新用户 . 向他展示这3个按钮,用户可以恢复购买,然后您可以向他显示登录页面 .
6)如果您确实需要跟踪是否在确切的设备上购买应用程序,那么您可以使用钥匙串存储您的数据,因为即使应用程序已卸载或删除,也不会删除钥匙串项目 . 这个Api会帮助很多link,看看吧
要么
您可以在Keychain数据上参考Apple的documentation
根据Apple "a restore cannot occur before the Confirm In-App Purchase dialog is displayed."使用 *- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue )queue function ,检查代码
据我所知,没有其他办法可以做到这一点 .
您应该提供还原按钮以恢复应用内购买,否则Apple将拒绝您的应用 .
如果不显示应用程序内购买确认警报,您将无法连接到应用内服务器或恢复功能 .