iOS 应用内恢复购买噩梦
iOS in-app restore purchases nightmare
我已经阅读了 Internet 上的所有线程等,但当我尝试恢复购买的产品(沙盒环境)时,仍然得到零恢复交易。
我已经通过 iTunes 连接创建了 3 个非续订产品和 2 个沙盒测试器。
我在设置实际购买产品的能力方面遇到了零个问题;一切顺利
我创建了一个 "restore purchases" 按钮,我正在尝试让它工作。我一直在测试以下内容:安装应用程序并进行购买。再次购买,它询问我是否要续订。删除应用程序并退出应用程序商店。重新安装应用程序并按恢复购买...零!!!
这是我正在使用的一些代码:
-(void)viewDidLoad
{
[super viewDidLoad];
//in-app purchase setup
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
-(void)viewDidAppear:(BOOL)animated
{
//make request for in-app products
if([SKPaymentQueue canMakePayments])
{
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObjects:@"product1_id",@"product2_id",@"product3_id",nil]];
request.delegate = self;
[request start];
}
else
{
//alert user
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"..." message:@"Please enable In App Purchase in settings" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
-(IBAction)restoreTransactionsPressed
{
_refreshRequest = [[SKReceiptRefreshRequest alloc] init];
_refreshRequest.delegate = self;
[_refreshRequest start];
}
-(void)requestDidFinish:(SKRequest *)request
{
if([request isKindOfClass:[SKReceiptRefreshRequest class]])
{
NSLog(@"Got a new receipt... %@",request.description);
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
}
-(void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
NSLog(@"%@",error.description);
}
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
NSLog(@"updatedTransactions");
for(SKPaymentTransaction *transaction in transactions)
{
NSLog(@"updatedTransaction:%@ ... state:%@",transaction.originalTransaction.payment.productIdentifier,transaction.transactionState);
switch(transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
NSLog(@"SKPaymentTransactionStatePurchased");
//unlock feature code
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
NSLog(@"SKPaymentTransactionStateFailed");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"SKPaymentTransactionStateRestored");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
default:
break;
}
}
}
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
NSLog(@"paymentQueueRestoreCompletedTransactionsFinished");
NSLog(@"received restored transactions: %i", (int)queue.transactions.count);
for(SKPaymentTransaction *transaction in queue.transactions)
{
NSLog(@"transaction:%@",transaction);
}
}
-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
NSLog(@"restoreCompletedTransactionsFailedWithError %@",error);
}
为什么我总是找回零恢复交易?
似乎 "restoreCompletedTransactions" 没有依次调用 - paymentQueue:updatedTransactions:如果有帮助的话。
我不确定 SKReceiptRefreshRequest 是否必要,但我已经尝试过在恢复之前刷新收据和在恢复之前不刷新收据。
请不要post链接到主题。我已经调查了几天了!有人声称 Apple 的 Sandbox 过去有问题……这可能是原因吗? tyvm 高级;感谢所有帮助!
根据Apple's documentation, you can't restore non-renewing subscriptions. Also, have a read here更详细的解释。
我已经阅读了 Internet 上的所有线程等,但当我尝试恢复购买的产品(沙盒环境)时,仍然得到零恢复交易。
我已经通过 iTunes 连接创建了 3 个非续订产品和 2 个沙盒测试器。
我在设置实际购买产品的能力方面遇到了零个问题;一切顺利
我创建了一个 "restore purchases" 按钮,我正在尝试让它工作。我一直在测试以下内容:安装应用程序并进行购买。再次购买,它询问我是否要续订。删除应用程序并退出应用程序商店。重新安装应用程序并按恢复购买...零!!!
这是我正在使用的一些代码:
-(void)viewDidLoad
{
[super viewDidLoad];
//in-app purchase setup
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
-(void)viewDidAppear:(BOOL)animated
{
//make request for in-app products
if([SKPaymentQueue canMakePayments])
{
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObjects:@"product1_id",@"product2_id",@"product3_id",nil]];
request.delegate = self;
[request start];
}
else
{
//alert user
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"..." message:@"Please enable In App Purchase in settings" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
-(IBAction)restoreTransactionsPressed
{
_refreshRequest = [[SKReceiptRefreshRequest alloc] init];
_refreshRequest.delegate = self;
[_refreshRequest start];
}
-(void)requestDidFinish:(SKRequest *)request
{
if([request isKindOfClass:[SKReceiptRefreshRequest class]])
{
NSLog(@"Got a new receipt... %@",request.description);
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
}
-(void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
NSLog(@"%@",error.description);
}
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
NSLog(@"updatedTransactions");
for(SKPaymentTransaction *transaction in transactions)
{
NSLog(@"updatedTransaction:%@ ... state:%@",transaction.originalTransaction.payment.productIdentifier,transaction.transactionState);
switch(transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
NSLog(@"SKPaymentTransactionStatePurchased");
//unlock feature code
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
NSLog(@"SKPaymentTransactionStateFailed");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"SKPaymentTransactionStateRestored");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
default:
break;
}
}
}
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
NSLog(@"paymentQueueRestoreCompletedTransactionsFinished");
NSLog(@"received restored transactions: %i", (int)queue.transactions.count);
for(SKPaymentTransaction *transaction in queue.transactions)
{
NSLog(@"transaction:%@",transaction);
}
}
-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
NSLog(@"restoreCompletedTransactionsFailedWithError %@",error);
}
为什么我总是找回零恢复交易?
似乎 "restoreCompletedTransactions" 没有依次调用 - paymentQueue:updatedTransactions:如果有帮助的话。
我不确定 SKReceiptRefreshRequest 是否必要,但我已经尝试过在恢复之前刷新收据和在恢复之前不刷新收据。
请不要post链接到主题。我已经调查了几天了!有人声称 Apple 的 Sandbox 过去有问题……这可能是原因吗? tyvm 高级;感谢所有帮助!
根据Apple's documentation, you can't restore non-renewing subscriptions. Also, have a read here更详细的解释。