From 9c12cc7deb6004d37668c43eb921df417d57dd5a Mon Sep 17 00:00:00 2001 From: Steven Jeram Date: Thu, 1 Jun 2017 14:37:23 -0700 Subject: [PATCH] Support refreshing receipts --- InAppUtils/InAppUtils.m | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/InAppUtils/InAppUtils.m b/InAppUtils/InAppUtils.m index 073d174..acf9b19 100644 --- a/InAppUtils/InAppUtils.m +++ b/InAppUtils/InAppUtils.m @@ -190,7 +190,52 @@ - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue } } +RCT_EXPORT_METHOD(refreshReceipt:(RCTResponseSenderBlock)callback) +{ + [self refreshReceipt:callback testExpired:NO testRevoked:NO]; +} + +RCT_EXPORT_METHOD(testRefreshExpiredReceipt:(RCTResponseSenderBlock)callback) +{ + [self refreshReceipt:callback testExpired:YES testRevoked:NO]; +} + +RCT_EXPORT_METHOD(testRefreshRevokeReceipt:(RCTResponseSenderBlock)callback) +{ + [self refreshReceipt:callback testExpired:NO testRevoked:YES]; +} + +- (void)refreshReceipt:(RCTResponseSenderBlock)callback + testExpired:(BOOL)testExpired + testRevoked:(BOOL)testRevoked +{ + SKReceiptRefreshRequest *refreshRequest; + if (testExpired || testRevoked) { + NSDictionary *properties = @{ + SKReceiptPropertyIsExpired:@(testExpired), + SKReceiptPropertyIsRevoked:@(testRevoked) + }; + refreshRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:properties]; + } else { + refreshRequest = [[SKReceiptRefreshRequest alloc] init]; + } + refreshRequest.delegate = self; + _callbacks[RCTKeyForInstance(refreshRequest)] = callback; + [refreshRequest start]; +} + // SKProductsRequestDelegate protocol method + +- (void)requestDidFinish:(SKRequest *)request +{ + NSString *key = RCTKeyForInstance(request); + RCTResponseSenderBlock callback = _callbacks[key]; + if (callback) { + callback(@[[NSNull null], @"finished"]); + [_callbacks removeObjectForKey:key]; + } +} + - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {