From 5a470745a60e082f19f023040712415c50726efd Mon Sep 17 00:00:00 2001 From: Benjamin Karran Date: Wed, 23 Jul 2014 16:11:37 +0200 Subject: [PATCH 1/3] Let the user finish the transaction with [SimplePurchase finishTransaction:t]. --- Classes/Purchaser.m | 2 -- Classes/SimplePurchase.h | 1 + Classes/SimplePurchase.m | 5 +++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Classes/Purchaser.m b/Classes/Purchaser.m index 642a9f7..692aa5e 100644 --- a/Classes/Purchaser.m +++ b/Classes/Purchaser.m @@ -64,8 +64,6 @@ - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)tran if ([self transactionIsSuccess:t]) [self notifyObserversForProduct:t.payment.productIdentifier transaction:t]; - - [[SKPaymentQueue defaultQueue] finishTransaction:t]; } } diff --git a/Classes/SimplePurchase.h b/Classes/SimplePurchase.h index 5a33e4d..890a4fb 100644 --- a/Classes/SimplePurchase.h +++ b/Classes/SimplePurchase.h @@ -6,5 +6,6 @@ + (void)addObserverForProduct:(NSString *)productId block:(void(^)(SKPaymentTransaction *transaction))block; + (void)buyProduct:(NSString *)productId block:(void(^)(NSError *error))block; ++ (void)finishTransaction:(SKPaymentTransaction*)t; @end diff --git a/Classes/SimplePurchase.m b/Classes/SimplePurchase.m index f85dec7..d1736d6 100644 --- a/Classes/SimplePurchase.m +++ b/Classes/SimplePurchase.m @@ -22,4 +22,9 @@ + (void)buyProduct:(NSString *)productId block:(void(^)(NSError *error))block [_purchaser buyProduct:productId block:block]; } ++ (void)finishTransaction:(SKPaymentTransaction*)t +{ + [[SKPaymentQueue defaultQueue] finishTransaction:t]; +} + @end From f2c25ca1325cd50368e42007ec4c030e844fff99 Mon Sep 17 00:00:00 2001 From: Benjamin Karran Date: Tue, 26 Aug 2014 10:45:21 +0200 Subject: [PATCH 2/3] Fix index out of range exception if a wrong product id is passed. productsRequest:didReceiveResponse is sometimes invoked with an empty response.products array. This resulted in a index out of range exception. More information: http://stackoverflow.com/questions/23949810/productrequestdidreceiveresponse-returns-empty-products-array-in-real-store-w --- Classes/ProductLoader.m | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Classes/ProductLoader.m b/Classes/ProductLoader.m index 393c92c..c3c9046 100644 --- a/Classes/ProductLoader.m +++ b/Classes/ProductLoader.m @@ -42,7 +42,14 @@ - (void)request:(SKRequest *)request didFailWithError:(NSError *)error - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { - _product = response.products[0]; + if (response.products.count == 0) + { + _error = [NSError errorWithDomain:@"SimplePurchaseErrorDomain" code:1 userInfo:@{@"localizedDescription": @"Product id is unknown."}]; + } + else + { + _product = response.products[0]; + } } - (void)requestDidFinish:(SKRequest *)request From 01761d998ff7c2a938b57d996d4c728fefac1219 Mon Sep 17 00:00:00 2001 From: Benjamin Karran Date: Tue, 26 Aug 2014 11:06:37 +0200 Subject: [PATCH 3/3] Use NSLocalizedDescriptionKey instead of a hard coded string. --- Classes/ProductLoader.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/ProductLoader.m b/Classes/ProductLoader.m index c3c9046..2a3160f 100644 --- a/Classes/ProductLoader.m +++ b/Classes/ProductLoader.m @@ -44,7 +44,7 @@ - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProdu { if (response.products.count == 0) { - _error = [NSError errorWithDomain:@"SimplePurchaseErrorDomain" code:1 userInfo:@{@"localizedDescription": @"Product id is unknown."}]; + _error = [NSError errorWithDomain:@"SimplePurchaseErrorDomain" code:1 userInfo:@{NSLocalizedDescriptionKey: @"Product id is unknown."}]; } else {