【发布时间】:2014-08-03 11:45:48
【问题描述】:
我已成功实施我的广告移除非消耗性应用内购买。我读到我的应用程序中还必须有一个“恢复”按钮。在过去的两天里,我尝试实现一个恢复功能,阅读了 stackoverflow 上的所有其他帖子,但对我没有任何帮助。当按下恢复按钮时,它会按预期要求电子邮件和密码,但即使我以前没有在该 Apple ID 上购买过产品,它仍然会恢复它。下面是我正在使用的代码。任何帮助将不胜感激!
- (IBAction)RestoreProduct:(id)sender {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
NSLog(@"Calling Restore");
_restoreButton.enabled = NO;
_productTitle.text = [NSString stringWithFormat:@"Checking for product"];
}
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
NSLog(@"Calling First Function");
NSMutableArray *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(@"This Part");
[self unlockFeature];
_productTitle.text = [NSString stringWithFormat:@"Purchase Restored!"];
}
}
- (void)paymentQueue:(SKPaymentQueue*)queue restoreCompletedTransactionsFailedWithError: (NSError*)error
{
NSLog(@"error");
}
编辑。
好的,这是我从恢复按钮到@end 的所有代码。
- (IBAction)RestoreProduct:(id)sender {
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
NSLog(@"Calling Restore");
_restoreButton.enabled = NO;
_productTitle.text = [NSString stringWithFormat:@"Checking for product"];
}
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
NSLog(@"Calling First Function");
NSMutableArray *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(@"This Part");
}
}
- (void)paymentQueue:(SKPaymentQueue*)queue restoreCompletedTransactionsFailedWithError: (NSError*)error
{
NSLog(@"error");
}
#pragma mark -
#pragma mark SKPaymentTransactionObserver
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchased:
[self unlockFeature];
_productTitle.text = [NSString stringWithFormat:@"Purchase Complete!"];
[[SKPaymentQueue defaultQueue]
finishTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
NSLog(@"Transaction Failed");
[[SKPaymentQueue defaultQueue]
finishTransaction:transaction];
break;
default:
break;
}
}
}
-(void)unlockFeature
{
_buyButton.enabled = NO;
[_buyButton setTitle:@"Purchased"
forState:UIControlStateDisabled];
[_homeViewController enableLevel2];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
_buyButton.enabled = NO;
_restoreButton.enabled = NO;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
【问题讨论】:
标签: ios in-app-purchase