Skip to content

Commit 89ab7ea

Browse files
committed
Add some of the community PR's. Note that due to numerous merge conflicts, etc., I'm adding these
manually, so the actual commits are not part of the git history, unfortunately. However this list indicates the original PR number and the author. - Add robotmedia#138 by @protikhonov. - Add robotmedia#150 by @seantb. - Add robotmedia#175 by @metasmile
1 parent 9d89b44 commit 89ab7ea

File tree

4 files changed

+35
-15
lines changed

4 files changed

+35
-15
lines changed

RMStore/Optional/RMStoreUserDefaultsPersistence.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
*/
3131
- (void)removeTransactions;
3232

33+
/** Remove transactions from user defaults via specific ProductIdentifier.
34+
*/
35+
- (void)removeTransactionsForProductIdentifier:(NSString *)productIdentifier;
36+
3337
/** Consume the given product if available. Intended for consumable products.
3438
@param productIdentifier Identifier of the product to be consumed.
3539
@return YES if the product was consumed, NO otherwise.
@@ -78,4 +82,4 @@
7882
*/
7983
- (RMStoreTransaction*)transactionWithData:(NSData*)data;
8084

81-
@end
85+
@end

RMStore/Optional/RMStoreUserDefaultsPersistence.m

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ - (void)removeTransactions
5353
[defaults synchronize];
5454
}
5555

56+
- (void)removeTransactionsForProductIdentifier:(NSString *)productIdentifier
57+
{
58+
NSUserDefaults *defaults = [self userDefaults];
59+
NSDictionary *purchases = [defaults objectForKey:RMStoreTransactionsUserDefaultsKey] ? : @{};
60+
NSMutableDictionary *updatedPurchases = [NSMutableDictionary dictionaryWithDictionary:purchases];
61+
[updatedPurchases removeObjectForKey:productIdentifier];
62+
[defaults setObject:updatedPurchases forKey:RMStoreTransactionsUserDefaultsKey];
63+
[defaults synchronize];
64+
}
65+
5666
- (BOOL)consumeProductOfIdentifier:(NSString*)productIdentifier
5767
{
5868
NSUserDefaults *defaults = [self userDefaults];

RMStore/RMStore.m

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,17 @@ - (NSArray*)rm_transactions {
123123

124124
@interface RMProductsRequestDelegate : NSObject<SKProductsRequestDelegate>
125125

126-
@property (nonatomic, strong) RMSKProductsRequestSuccessBlock successBlock;
127-
@property (nonatomic, strong) RMSKProductsRequestFailureBlock failureBlock;
126+
@property (nonatomic, copy) RMSKProductsRequestSuccessBlock successBlock;
127+
@property (nonatomic, copy) RMSKProductsRequestFailureBlock failureBlock;
128128
@property (nonatomic, weak) RMStore *store;
129129

130130
@end
131131

132132
@interface RMAddPaymentParameters : NSObject
133133

134-
@property (nonatomic, strong) RMSKPaymentTransactionSuccessBlock deferBlock;
135-
@property (nonatomic, strong) RMSKPaymentTransactionSuccessBlock successBlock;
136-
@property (nonatomic, strong) RMSKPaymentTransactionFailureBlock failureBlock;
134+
@property (nonatomic, copy) RMSKPaymentTransactionSuccessBlock deferBlock;
135+
@property (nonatomic, copy) RMSKPaymentTransactionSuccessBlock successBlock;
136+
@property (nonatomic, copy) RMSKPaymentTransactionFailureBlock failureBlock;
137137

138138
@end
139139

@@ -160,7 +160,7 @@ @implementation RMStore
160160

161161
NSMutableArray *_storedStorePayments;
162162

163-
NSInteger _pendingRestoredTransactionsCount;
163+
NSMutableSet *_pendingRestoredTransactionIds;
164164
BOOL _restoredCompletedTransactionsFinished;
165165

166166
SKReceiptRefreshRequest *_refreshReceiptRequest;
@@ -180,6 +180,7 @@ - (instancetype) init
180180
_productsRequestDelegates = [NSMutableSet set];
181181
_productsRequests = [NSMutableSet set];
182182
_restoredTransactions = [NSMutableArray array];
183+
_pendingRestoredTransactionIds = [NSMutableSet set];
183184
_storedStorePayments = [NSMutableArray array];
184185
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
185186
}
@@ -320,7 +321,7 @@ - (void)restoreTransactionsOnSuccess:(void (^)(NSArray *transactions))successBlo
320321
failure:(void (^)(NSError *error))failureBlock
321322
{
322323
_restoredCompletedTransactionsFinished = NO;
323-
_pendingRestoredTransactionsCount = 0;
324+
[_pendingRestoredTransactionIds removeAllObjects];
324325
_restoredTransactions = [NSMutableArray array];
325326
_restoreTransactionsSuccessBlock = successBlock;
326327
_restoreTransactionsFailureBlock = failureBlock;
@@ -333,7 +334,7 @@ - (void)restoreTransactionsOfUser:(NSString*)userIdentifier
333334
{
334335
NSAssert([[SKPaymentQueue defaultQueue] respondsToSelector:@selector(restoreCompletedTransactionsWithApplicationUsername:)], @"restoreCompletedTransactionsWithApplicationUsername: not supported in this iOS version. Use restoreTransactionsOnSuccess:failure: instead.");
335336
_restoredCompletedTransactionsFinished = NO;
336-
_pendingRestoredTransactionsCount = 0;
337+
[_pendingRestoredTransactionIds removeAllObjects];
337338
_restoreTransactionsSuccessBlock = successBlock;
338339
_restoreTransactionsFailureBlock = failureBlock;
339340
[[SKPaymentQueue defaultQueue] restoreCompletedTransactionsWithApplicationUsername:userIdentifier];
@@ -735,9 +736,13 @@ - (void)didFailTransaction:(SKPaymentTransaction *)transaction queue:(SKPaymentQ
735736

736737
- (void)didRestoreTransaction:(SKPaymentTransaction *)transaction queue:(SKPaymentQueue*)queue
737738
{
738-
RMStoreLog(@"transaction restored with product %@", transaction.originalTransaction.payment.productIdentifier);
739+
NSString *productIdentifier = transaction.originalTransaction.payment.productIdentifier;
740+
RMStoreLog(@"transaction restored with product %@", productIdentifier);
741+
742+
if(productIdentifier) {
743+
[_pendingRestoredTransactionIds addObject:productIdentifier];
744+
}
739745

740-
_pendingRestoredTransactionsCount++;
741746
if (self.receiptVerifier != nil)
742747
{
743748
[self.receiptVerifier verifyTransaction:transaction success:^{
@@ -830,9 +835,10 @@ - (void)notifyRestoreTransactionFinishedIfApplicableAfterTransaction:(SKPaymentT
830835
if (transaction != nil)
831836
{
832837
[_restoredTransactions addObject:transaction];
833-
_pendingRestoredTransactionsCount--;
838+
[_pendingRestoredTransactionIds removeObject:transaction.payment.productIdentifier];
839+
834840
}
835-
if (_restoredCompletedTransactionsFinished && _pendingRestoredTransactionsCount == 0)
841+
if (_restoredCompletedTransactionsFinished && _pendingRestoredTransactionIds.count == 0)
836842
{ // Wait until all restored transations have been verified
837843
NSArray *restoredTransactions = [_restoredTransactions copy];
838844
if (_restoreTransactionsSuccessBlock != nil)

RMStoreTests/RMProducstRequestDelegateTests.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525

2626
@interface RMProductsRequestDelegate : NSObject<SKProductsRequestDelegate>
2727

28-
@property (nonatomic, strong) RMSKProductsRequestSuccessBlock successBlock;
29-
@property (nonatomic, strong) RMSKProductsRequestFailureBlock failureBlock;
28+
@property (nonatomic, copy) RMSKProductsRequestSuccessBlock successBlock;
29+
@property (nonatomic, copy) RMSKProductsRequestFailureBlock failureBlock;
3030
@property (nonatomic, weak) RMStore *store;
3131

3232
@end

0 commit comments

Comments
 (0)