From 85d27427f3675af49c664795943f9e3a63486a92 Mon Sep 17 00:00:00 2001 From: Hernan Zhou Date: Tue, 12 Jan 2016 14:19:38 +0100 Subject: [PATCH 1/3] add currency --- .../src/com/ludei/inapps/amazon/AmazonInAppService.java | 3 ++- .../android/common/src/com/ludei/inapps/InAppProduct.java | 7 +++++++ .../ludei/inapps/googleplay/GooglePlayInAppService.java | 1 + .../deps/com/ludei/inapps/amazon/AmazonInAppService.java | 3 ++- .../common/src/deps/com/ludei/inapps/InAppProduct.java | 7 +++++++ .../ludei/inapps/googleplay/GooglePlayInAppService.java | 1 + src/cordova/common/www/cocoon_inapps.js | 2 +- src/js/cocoon_inapps.js | 4 +++- 8 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/atomic/android/amazon/src/com/ludei/inapps/amazon/AmazonInAppService.java b/src/atomic/android/amazon/src/com/ludei/inapps/amazon/AmazonInAppService.java index 9b8ecb6..b4c5f0f 100644 --- a/src/atomic/android/amazon/src/com/ludei/inapps/amazon/AmazonInAppService.java +++ b/src/atomic/android/amazon/src/com/ludei/inapps/amazon/AmazonInAppService.java @@ -144,7 +144,8 @@ public void onProductDataResponse(ProductDataResponse response) { product.productId = i.getSku(); product.title = i.getTitle(); product.description = i.getDescription(); - + product.currency = ""; // does not exist in amazon + String localizedPrice = i.getPrice(); String price = localizedPrice.replaceAll("[^\\d.]", ""); try { diff --git a/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java b/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java index 5f454c2..383559b 100644 --- a/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java +++ b/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java @@ -36,6 +36,11 @@ public class InAppProduct { */ public String localizedPrice; + /** + * The currency code in ISO 4217 format. + */ + public String currency; + /** * Transforms a product information into a JSON object. * @@ -49,6 +54,7 @@ public JSONObject toJSON() { o.putOpt("description", description); o.putOpt("localizedPrice", localizedPrice); o.put("price", price); + o.put("currency", currency); } catch (JSONException e) { e.printStackTrace(); } @@ -68,6 +74,7 @@ static InAppProduct fromJSON(JSONObject object) { product.description = object.optString("description"); product.localizedPrice = object.optString("localizedPrice"); product.price = object.optDouble("price"); + product.currency = object.optDouble("currency"); return product; } } diff --git a/src/atomic/android/googleplay/src/com/ludei/inapps/googleplay/GooglePlayInAppService.java b/src/atomic/android/googleplay/src/com/ludei/inapps/googleplay/GooglePlayInAppService.java index c24f174..14e6fab 100644 --- a/src/atomic/android/googleplay/src/com/ludei/inapps/googleplay/GooglePlayInAppService.java +++ b/src/atomic/android/googleplay/src/com/ludei/inapps/googleplay/GooglePlayInAppService.java @@ -114,6 +114,7 @@ private InAppProduct JSONObjectToInapp(JSONObject object) { product.localizedPrice = object.optString("price"); product.title = object.optString("title"); product.description = object.optString("description"); + product.currency = object.optString("price_currency_code"); String price; if (object.has("price_amount_micros")) { price = String.valueOf(((float) object.optInt("price_amount_micros")) / 1000000); diff --git a/src/cordova/android/amazon/src/deps/com/ludei/inapps/amazon/AmazonInAppService.java b/src/cordova/android/amazon/src/deps/com/ludei/inapps/amazon/AmazonInAppService.java index 9b8ecb6..b4c5f0f 100644 --- a/src/cordova/android/amazon/src/deps/com/ludei/inapps/amazon/AmazonInAppService.java +++ b/src/cordova/android/amazon/src/deps/com/ludei/inapps/amazon/AmazonInAppService.java @@ -144,7 +144,8 @@ public void onProductDataResponse(ProductDataResponse response) { product.productId = i.getSku(); product.title = i.getTitle(); product.description = i.getDescription(); - + product.currency = ""; // does not exist in amazon + String localizedPrice = i.getPrice(); String price = localizedPrice.replaceAll("[^\\d.]", ""); try { diff --git a/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java b/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java index 5f454c2..383559b 100644 --- a/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java +++ b/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java @@ -36,6 +36,11 @@ public class InAppProduct { */ public String localizedPrice; + /** + * The currency code in ISO 4217 format. + */ + public String currency; + /** * Transforms a product information into a JSON object. * @@ -49,6 +54,7 @@ public JSONObject toJSON() { o.putOpt("description", description); o.putOpt("localizedPrice", localizedPrice); o.put("price", price); + o.put("currency", currency); } catch (JSONException e) { e.printStackTrace(); } @@ -68,6 +74,7 @@ static InAppProduct fromJSON(JSONObject object) { product.description = object.optString("description"); product.localizedPrice = object.optString("localizedPrice"); product.price = object.optDouble("price"); + product.currency = object.optDouble("currency"); return product; } } diff --git a/src/cordova/android/googleplay/src/deps/com/ludei/inapps/googleplay/GooglePlayInAppService.java b/src/cordova/android/googleplay/src/deps/com/ludei/inapps/googleplay/GooglePlayInAppService.java index c24f174..14e6fab 100644 --- a/src/cordova/android/googleplay/src/deps/com/ludei/inapps/googleplay/GooglePlayInAppService.java +++ b/src/cordova/android/googleplay/src/deps/com/ludei/inapps/googleplay/GooglePlayInAppService.java @@ -114,6 +114,7 @@ private InAppProduct JSONObjectToInapp(JSONObject object) { product.localizedPrice = object.optString("price"); product.title = object.optString("title"); product.description = object.optString("description"); + product.currency = object.optString("price_currency_code"); String price; if (object.has("price_amount_micros")) { price = String.valueOf(((float) object.optInt("price_amount_micros")) / 1000000); diff --git a/src/cordova/common/www/cocoon_inapps.js b/src/cordova/common/www/cocoon_inapps.js index e98124b..ee68db3 100644 --- a/src/cordova/common/www/cocoon_inapps.js +++ b/src/cordova/common/www/cocoon_inapps.js @@ -1 +1 @@ -!function(){!window.Cocoon&&window.cordova&&"undefined"!=typeof require&&cordova.require("cocoon-plugin-common.Cocoon");var e=window.Cocoon;e.define("Cocoon.InApp",function(t){"use strict";function n(e){for(var t=0;tn&&(n=0),i[e]=n}function c(e){for(var n=0;n0},t.stockOfProduct=function(e){var t=i[e];return"number"==typeof t?t:0},t.restorePurchases=function(t){t=t||function(){},e.exec(this.serviceName,"restorePurchases",[],function(){t()},function(e){t(e)})},t.purchase=function(t,n,r){"number"!=typeof n&&(n=1),r=r||function(){},e.exec(this.serviceName,"purchase",[t,n],function(){r()},function(e){r(e)})},t.consume=function(t,n,c){"number"!=typeof n&&(n=1),c=c||function(){},e.exec(this.serviceName,"consume",[t,n],function(e){r(t,-e),c(e,null)},function(e){c(0,e)})},t.finishPurchase=function(t){e.exec(this.serviceName,"finishPurchase",[t])},t.setValidationHandler=function(n){var r=!n;e.exec(this.serviceName,"setValidationHandler",[r],function(r){var c=r[2];n(r[0],r[1],function(n){e.exec(t.serviceName,"validationCompletion",[c,!!n])})})},t.setLudeiServerValidationHandler=function(){e.exec(this.serviceName,"setLudeiServerValidationHandler",[])},t.Product={productId:"productId",title:"title",description:"description",localizedPrice:"localizedPrice",price:"price"},t.PurchaseInfo={productId:"productId",transactionId:"transactionId",purchaseDate:"purchaseDate",quantity:"quantity"},t.on=t.signal.expose(),t})}(); \ No newline at end of file +!function(){!window.Cocoon&&window.cordova&&"undefined"!=typeof require&&cordova.require("cocoon-plugin-common.Cocoon");var e=window.Cocoon;e.define("Cocoon.InApp",function(t){"use strict";function n(e){for(var t=0;tn&&(n=0),i[e]=n}function c(e){for(var n=0;n0},t.stockOfProduct=function(e){var t=i[e];return"number"==typeof t?t:0},t.restorePurchases=function(t){t=t||function(){},e.exec(this.serviceName,"restorePurchases",[],function(){t()},function(e){t(e)})},t.purchase=function(t,n,r){"number"!=typeof n&&(n=1),r=r||function(){},e.exec(this.serviceName,"purchase",[t,n],function(){r()},function(e){r(e)})},t.consume=function(t,n,c){"number"!=typeof n&&(n=1),c=c||function(){},e.exec(this.serviceName,"consume",[t,n],function(e){r(t,-e),c(e,null)},function(e){c(0,e)})},t.finishPurchase=function(t){e.exec(this.serviceName,"finishPurchase",[t])},t.setValidationHandler=function(n){var r=!n;e.exec(this.serviceName,"setValidationHandler",[r],function(r){var c=r[2];n(r[0],r[1],function(n){e.exec(t.serviceName,"validationCompletion",[c,!!n])})})},t.setLudeiServerValidationHandler=function(){e.exec(this.serviceName,"setLudeiServerValidationHandler",[])},t.Product={productId:"productId",title:"title",description:"description",localizedPrice:"localizedPrice",price:"price",currency:"currency"},t.PurchaseInfo={productId:"productId",transactionId:"transactionId",purchaseDate:"purchaseDate",quantity:"quantity"},t.on=t.signal.expose(),t})}(); \ No newline at end of file diff --git a/src/js/cocoon_inapps.js b/src/js/cocoon_inapps.js index fb0dac6..9e80c96 100644 --- a/src/js/cocoon_inapps.js +++ b/src/js/cocoon_inapps.js @@ -462,13 +462,15 @@ * @property {string} Cocoon.InApp.Product.description The description of the product. * @property {number} Cocoon.InApp.Product.localizedPrice The price of the product in local currency. * @property {number} Cocoon.InApp.Product.price The price of the product. + * @property {string} Cocoon.InApp.Product.currency The currency code in ISO 4217 format. */ extension.Product = { productId: "productId", title: "title", description: "description", localizedPrice: "localizedPrice", - price: "price" + price: "price", + currency: "currency" }; /** From ed9c65f371006a32ee5b2e3b8569060d94e0e805 Mon Sep 17 00:00:00 2001 From: Hernan Zhou Date: Thu, 14 Jan 2016 10:17:14 +0100 Subject: [PATCH 2/3] fix wrong type --- .../android/common/src/com/ludei/inapps/InAppProduct.java | 2 +- .../android/common/src/deps/com/ludei/inapps/InAppProduct.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java b/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java index 383559b..ca30fdc 100644 --- a/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java +++ b/src/atomic/android/common/src/com/ludei/inapps/InAppProduct.java @@ -74,7 +74,7 @@ static InAppProduct fromJSON(JSONObject object) { product.description = object.optString("description"); product.localizedPrice = object.optString("localizedPrice"); product.price = object.optDouble("price"); - product.currency = object.optDouble("currency"); + product.currency = object.optString("currency"); return product; } } diff --git a/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java b/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java index 383559b..ca30fdc 100644 --- a/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java +++ b/src/cordova/android/common/src/deps/com/ludei/inapps/InAppProduct.java @@ -74,7 +74,7 @@ static InAppProduct fromJSON(JSONObject object) { product.description = object.optString("description"); product.localizedPrice = object.optString("localizedPrice"); product.price = object.optDouble("price"); - product.currency = object.optDouble("currency"); + product.currency = object.optString("currency"); return product; } } From a0a581985502635a7897a899477ecf48d038fa5f Mon Sep 17 00:00:00 2001 From: Hernan Zhou Date: Tue, 10 Jul 2018 09:47:00 +0200 Subject: [PATCH 3/3] add payment queue for promotions --- src/atomic/ios/appstore/LDInAppService.m | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/atomic/ios/appstore/LDInAppService.m b/src/atomic/ios/appstore/LDInAppService.m index f94db62..969e9cd 100644 --- a/src/atomic/ios/appstore/LDInAppService.m +++ b/src/atomic/ios/appstore/LDInAppService.m @@ -81,11 +81,11 @@ - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProdu NSError * error = nil; if (response.invalidProductIdentifiers.count > 0) { NSString * msg = @"Invalid products: "; - for (NSString * pid in response.invalidProductIdentifiers) { - msg = [msg stringByAppendingString:pid]; - msg = [msg stringByAppendingString:@","]; - } - error = MAKE_ERROR(0, msg); + for (NSString * pid in response.invalidProductIdentifiers) { + msg = [msg stringByAppendingString:pid]; + msg = [msg stringByAppendingString:@","]; + } + error = MAKE_ERROR(0, msg); } _completion(response.products, error); [self dispose:request]; @@ -101,7 +101,7 @@ - (void)dispose:(SKRequest*)request { LDInAppFetchDelegate * this = self; //simulate CFAutoRelease for iOS 6 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ - CFRelease((__bridge CFTypeRef)(this)); + CFRelease((__bridge CFTypeRef)(this)); }); } @@ -377,6 +377,11 @@ -(void) setLudeiServerValidationHandler #pragma mark SKPaymentTransactionObserver +- (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product { + NSLog(@"Payment Queue Product = %@", product); + return true; +} + - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions NS_AVAILABLE_IOS(3_0) { if (!_started) { @@ -398,7 +403,7 @@ - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)tran [self notifyPurchaseStarted:transaction.payment.productIdentifier]; default: break; - } + } } }