我目前在IAP屏幕上有一个恢复按钮,但是在通过苹果提交并上线后,我的朋友在他的设备上测试了它,当他这样做时,他能够恢复购买而无需购买第一个地方,现在当我调试代码时,我注意到命中恢复运行这个完成委托方法,后者又运行我的方法来解锁某些功能。
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
我的代码如下:
#pragma mark Restore Purchases
#pragma mark -
-(void)restorePurchaseIAP{
// ask to restore
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
#pragma mark SKPaymentTransactionObserver
#pragma mark -
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchased:
[[SKPaymentQueue defaultQueue]
finishTransaction:transaction];
[delegate itemPurchased];
break;
case SKPaymentTransactionStateFailed:
[delegate itemPurchasedFailed];
[[SKPaymentQueue defaultQueue]finishTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"restored state");
[[SKPaymentQueue defaultQueue]finishTransaction:transaction];
break;
default:
break;
}
}
}
#pragma mark SKPaymentTransactionObserver
#pragma mark -
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{
NSLog(@"restored state Completed");
[delegate purchaseRestored];
}
-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error{
NSLog(@"restore has FAILED");
}
即使我没有使用Apple的用户帐户登录,也会发生这种情况。我还注意到我第一次在我的朋友设备上调试这个,如果我试图进行购买,然后在我提示IAP价格和确认时取消,恢复按钮将恢复购买。
我正确地认为当我调用restoreCompletedTransactions时,apple应该只确认并运行:
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{
如果已经购买了IAP,或者我应该在某处检查包装?
答案 0 :(得分:0)
状态的documentation paymentQueueRestoreCompletedTransactionsFinished
告诉观察员付款队列已完成发送 恢复了交易。
<强>讨论强>
在支付队列处理完所有可恢复交易后调用此方法。您的申请不需要在此方法中执行任何操作。
因此,此方法表示不再发送恢复事务(这可能是在没有要恢复或未登录的事务的情况下发送0恢复事务之后)。
您无法确定此方法中的购买状态,因此根据其调用解锁功能无效。您应该在状态updatedTransactions:
和SKPaymentTransactionStatePurchased
SKPaymentTransactionStateRestored
中解锁功能