【发布时间】:2014-08-16 18:52:12
【问题描述】:
我正在使用非消耗性 IAP 并尝试让“恢复”按钮正常工作。
我注意到,当用户尝试购买他们已经购买的东西时,会出现一条 Apple 提醒,说“你已经购买了这个。你想再次免费获得它吗?”
所以我想知道如何为我的恢复按钮使用相同的收据验证方法/代码?
我似乎找不到它的代码。我看过paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 和其他地方?
你能帮忙吗?谢谢!
更新
- (IBAction)purchaseRestore:(id)sender {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
// Stack
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
NSLog(@"4 IBAction Purchase Restore Method");
}
更新 2 我不知道我是否做对了,加倍了一些代码,还是添加了不需要的代码。
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
NSLog(@"2 Payment Queue updatedTransactions - needs to verify logged in user: Purchasing Product From Store!");
break;
case SKPaymentTransactionStatePurchased:
if ([transaction.payment.productIdentifier
isEqualToString:INAPP_PRODUCT_ID_3]) {
NSLog(@"3 Payment Queue updatedTransactions - Product Purchased From Store!");
//Not sure if I need this
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
@"3 Payment Queue updatedTransactions - Seems to to this twice: Purchase is completed succesfully" message:nil delegate:
self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alertView show];
[self saveTransactionReceipt:transaction];
NSLog(@"3 Payment Queue updatedTransactions - Save Transaction Receipt: Called after product purchased");
[self saveValue:transaction];
NSLog(@"3 Payment Queue updatedTransactions - Save Value: Called after product purchased");
[self showButtonThree];
NSLog(@"3 Payment Queue updatedTransactions: will Show button Three now");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"purchasedThree"];
NSLog(@"updatedTransactions Yes for purchasedTeamThree: %hhd", [defaults boolForKey:@"purchasedThree"]);
[defaults synchronize];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
NSLog(@"3 Payment Queue finishTransaction: Run");
}
break;
case SKPaymentTransactionStateRestored:
NSLog(@"Restored");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
purchaseButton.enabled = YES;
NSLog(@"2 Payment Queue updatedTransactions: Purchase failed ");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
default:
break;
}
}
}
【问题讨论】:
标签: ios in-app-purchase