我正在使用一个非自消耗的IAP,并试图使恢复按钮正常工作。
我注意到,当用户试图购买他们已经购买的东西时,苹果会发出警告说:“你已经买过了,你想免费再买一次吗?”
,所以我想知道如何使用相同的收据验证方法/代码来执行还原按钮?。
我好像找不到密码了。我在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");
}UPDATE 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;
}
}
}发布于 2014-08-16 21:59:11
你的问题对我也非常有用,因为你让我意识到,我目前在AppStore审批过程中挂起的应用程序可能会被拒绝,因为我没有实现一个恢复按钮(我只是添加了一个标签,表示再次按Buy按钮将恢复以前的购买)。
执行还原过程的正确方法是实现调用此方法的按钮:
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];当然,在此之后,仅限于付费用户才能恢复应用程序的功能。
希望这能有所帮助。
https://stackoverflow.com/questions/25342864
复制相似问题