@@ -56,6 +56,11 @@ + (BOOL) requiresMainQueueSetup {
5656 [[SKPaymentQueue defaultQueue ] addPayment: payment];
5757}
5858
59+ RCT_EXPORT_METHOD (restore) {
60+ [[SKPaymentQueue defaultQueue ] addTransactionObserver: self ];
61+ [[SKPaymentQueue defaultQueue ] restoreCompletedTransactions ];
62+ }
63+
5964RCT_EXPORT_METHOD (finalize: (NSDictionary *) purchase
6065 resolver: (RCTPromiseResolveBlock) resolve
6166 rejector: (RCTPromiseRejectBlock) reject) {
@@ -181,7 +186,27 @@ - (void) paymentQueue: (SKPaymentQueue*) queue updatedTransactions: (NSArray<SKP
181186 break ;
182187 }
183188 case SKPaymentTransactionStateRestored:
184- [[SKPaymentQueue defaultQueue ] finishTransaction: transaction];
189+ {
190+ NSURL * receiptURL = [[NSBundle mainBundle ] appStoreReceiptURL ];
191+ NSData * receipt = [[NSData alloc ] initWithContentsOfURL: receiptURL];
192+
193+ if (!receipt) {
194+ [[SKPaymentQueue defaultQueue ] finishTransaction: transaction];
195+ return ;
196+ }
197+
198+ NSArray * productIds = @[transaction.payment.productIdentifier];
199+ NSDictionary * item = @{
200+ @" productIds" : productIds,
201+ @" transactionId" : transaction.transactionIdentifier ,
202+ @" transactionDate" : @(transaction.transactionDate .timeIntervalSince1970 * 1000 ),
203+ @" receipt" : [receipt base64EncodedStringWithOptions: 0 ]
204+ };
205+
206+ [transactionsMap setObject: transaction forKey: transaction.transactionIdentifier];
207+ [self sendEvent: @" iap:onPurchaseSuccess" body: item];
208+ break ;
209+ }
185210 break ;
186211 case SKPaymentTransactionStateDeferred:
187212 break ;
0 commit comments