您好我需要在Inapp-Purchase中实现恢复功能,为此创建了一个“恢复”按钮,它正在调用方法
-(void)restorePurchasedProductsWithProductId:(NSString*)prodID
{
_productIdsArray = [[NSMutableArray alloc] init];
productID = [prodID retain];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
它为我提供了一个输入apple id密码的弹出窗口。在这之后没有任何反应。
我读到了一个叫它的地方
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
所以我确实喜欢这个
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
NSLog(@"paymentQueue");
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"restored");
[self restoreTransaction:transaction];
break;
default:
break;
}
}
}
但问题是上面的方法并没有调用这个
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
也不是
-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
我还包括了所需的协议,
有些正文可以帮助我为什么这些委托方法不会要求恢复过程。 我正在尝试使用测试帐户。
答案 0 :(得分:12)
您需要确保实施paymentQueueRestoreCompletedTransactionsFinished:
和paymentQueue: restoreCompletedTransactionsFailedWithError:
的类已注册为您的付款队列的观察员。
如果您已在UIViewController
中编写此代码,请尝试在viewDidLoad
中添加此代码:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
和viewDidDisappear
:
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
答案 1 :(得分:1)
我也面临像一个问题;
经过研究和研究修改,我意识到:
[[SKPaymentQueue defaultQueue] finishTransaction:transaction]
方法未立即实施。
通常,我检查transaction.transactionReceipt并将其发送到我的服务器,然后我发送一个回调来完成Transaction。最后,我理解了不立即调用完成交易的问题。当我更改我的代码时,我的应用程序正常运行。
有趣的是,当我在沙盒环境中测试时,一切正常。但是,在AppStore应用程序中效果不佳。当我做这个修改时,我的问题就解决了。