From 107998eebbe12293d118615d49255f705391e4af Mon Sep 17 00:00:00 2001 From: andresordonezfm <72390915+andresordonezfm@users.noreply.github.com> Date: Tue, 29 Dec 2020 03:29:07 -0500 Subject: [PATCH] Bug Fix clearTransaction promise Added a promise to the clearTransaction function, to wait until it finishes clearing open transactions https://github.com/dooboolab/react-native-iap/issues/1120 --- ios/RNIapIos.m | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/ios/RNIapIos.m b/ios/RNIapIos.m index e7cb4771d..fb20c07d8 100644 --- a/ios/RNIapIos.m +++ b/ios/RNIapIos.m @@ -255,11 +255,23 @@ - (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *) } } -RCT_EXPORT_METHOD(clearTransaction) { - NSArray *pendingTrans = [[SKPaymentQueue defaultQueue] transactions]; +RCT_EXPORT_METHOD(clearTransaction:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) { + NSLog(@"\n\n\n *** clear remaining Transactions. Call this before make a new transaction \n\n."); - for (int k = 0; k < pendingTrans.count; k++) { - [[SKPaymentQueue defaultQueue] finishTransaction:pendingTrans[k]]; + + NSArray *pendingTrans = [[SKPaymentQueue defaultQueue] transactions]; + countPendingTransaction = (NSInteger)(pendingTrans.count); + + if (countPendingTransaction > 0) { + [self addPromiseForKey:@"cleaningTransactions" resolve:resolve reject:reject]; + + for (SKPaymentTransaction *transaction in pendingTrans) { + [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; + } + + } else { + resolve(nil); } } @@ -814,4 +826,15 @@ - (void)requestDidFinish:(SKRequest *)request { } } +-(void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions { + NSLog(@"removedTransactions"); + if (countPendingTransaction != nil && countPendingTransaction > 0) { + countPendingTransaction--; + if (countPendingTransaction == 0) { + [self resolvePromisesForKey:@"cleaningTransactions" value:nil]; + countPendingTransaction = nil; + } + } +} + @end