Skip to content

Commit 7c7896a

Browse files
Added Restore IAP option In iOS
1 parent ed32a56 commit 7c7896a

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ const purchase = (productId, originalPurchaseToken) => {
6262
}
6363
};
6464

65+
const restore = () => {
66+
if (Platform.OS === "ios") {
67+
RNInAppPurchase.restore();
68+
}
69+
};
70+
6571
const finalize = (purchase, isConsumable) => {
6672
return Platform.OS === "android"
6773
? RNInAppPurchase.finalize(purchase, isConsumable)
@@ -73,6 +79,7 @@ export default {
7379
fetchProducts: RNInAppPurchase.fetchProducts,
7480
flush: RNInAppPurchase.flush,
7581
purchase,
82+
restore,
7683
finalize,
7784
onFetchProducts,
7885
onPurchase,

ios/RNInAppPurchase.m

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
5964
RCT_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

Comments
 (0)