当我为iAP添加恢复方法时,我有两个问题...
问题1:每次打开我的应用程序时,都会出现iTunes警报并询问我是否要登录iTunes Store。这是因为我添加了以下恢复方法:
- (IBAction)Restore:(id)sender {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
现在,即使我删除了恢复方法,警报仍会在启动时继续。苹果似乎已经在应用启动时与iTunes连接。我想只在用户点击购买或恢复按钮时才这样做。我在StackOverflow上读到了一些你必须在AppDelegate中添加内容的东西,这样应用程序就不会自动连接但仍然没有运气。
问题2:在手机上测试iAP并点击恢复按钮时,即使我以前没有购买过该项目,也可以恢复该项目。使用测试帐户测试恢复功能时这是正常的吗?您应该说Apple必须显示该项目从未被购买且无法恢复的警告吗?
有人可以一步一步地指导我,让它发挥作用吗?
提前致谢。
代码:
- (IBAction)Restore:(id)sender {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
[self unlockFeature];
}
#pragma mark -
#pragma mark SKPaymentTransactionObserver
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchased:
[self unlockFeature];
[[SKPaymentQueue defaultQueue]
finishTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
NSLog(@"Transaction Failed");
[[SKPaymentQueue defaultQueue]
finishTransaction:transaction];
break;
default:
break;
}
}
}
答案 0 :(得分:2)
当我将IAP添加到应用程序时,我遇到了与您的第一个问题类似的问题。事实证明,虽然我经历了测试和改变事情,但我已经积压了待处理的交易,因此每次打开应用程序时都会尝试完成这些操作。如果您登录,请让它做任何需要的事情,关闭,重新打开并重复我设法赶上并且它不再要求我每次登录。可能值得一试。 (我试图挖掘出我得到这个答案的问题)。
它正在恢复IAP,因为当恢复事务队列完成时,即使它没有恢复任何内容,您也在调用[self unlockFeature]:
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
[self unlockFeature];
}
您应该删除unlockFeature调用并在
中对事务处理进行排序-paymentqueue:updatedtransactions:
将此添加到开关:
case SKPaymentTransactionStateRestored:
[self unlockFeature];
[[SKPaymentQueue defaultQueue]
finishTransaction:transaction];
break;