我目前在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,或者我应该在某处检查包装?
1 回答
国家的documentation
paymentQueueRestoreCompletedTransactionsFinished
因此,此方法表示不再发送恢复事务(这可能是在没有要恢复或未登录的事务的情况下发送0恢复事务之后) .
您无法确定此方法中的购买状态,因此根据其调用解锁功能无效 . 您应该在
updatedTransactions:
中解锁状态SKPaymentTransactionStatePurchased
和SKPaymentTransactionStateRestored
的功能