From e25dbf7f0b64a2d3eb1e8d393c3de73a678feefe Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Thu, 14 Oct 2021 15:28:06 +0200 Subject: [PATCH 01/15] Update AmazonInappPurchasePlugin.java --- .../flutterinapppurchase/AmazonInappPurchasePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java index 64cbae7f..b363fe64 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java @@ -157,7 +157,7 @@ public void onProductDataResponse(ProductDataResponse response) { try { number = format.parse(product.getPrice()); } catch (ParseException e) { - result.error(TAG, "Price Parsing error", e.getMessage()); + result.error(TAG, "Price Parsing errorsee", e.getMessage()); return; } JSONObject item = new JSONObject(); From 06274c62e7982edd5e6c2dd3a076283f63d9ff09 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Thu, 14 Oct 2021 15:37:18 +0200 Subject: [PATCH 02/15] Update AmazonInappPurchasePlugin.java --- .../flutterinapppurchase/AmazonInappPurchasePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java index b363fe64..a09afd22 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java @@ -157,7 +157,7 @@ public void onProductDataResponse(ProductDataResponse response) { try { number = format.parse(product.getPrice()); } catch (ParseException e) { - result.error(TAG, "Price Parsing errorsee", e.getMessage()); + result.error(TAG, "Price Parsing errorseett", e.getMessage()); return; } JSONObject item = new JSONObject(); From 344472abd1354f60d495b3af698136a67335deca Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Thu, 14 Oct 2021 15:41:19 +0200 Subject: [PATCH 03/15] Update AmazonInappPurchasePlugin.java --- .../flutterinapppurchase/AmazonInappPurchasePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java index a09afd22..6533c53f 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java @@ -157,7 +157,7 @@ public void onProductDataResponse(ProductDataResponse response) { try { number = format.parse(product.getPrice()); } catch (ParseException e) { - result.error(TAG, "Price Parsing errorseett", e.getMessage()); + result.error(TAG, "Price Parsing erroreee", e.getMessage()); return; } JSONObject item = new JSONObject(); From 82636fdd469c9a2c5224e2e60277ad6023d7c486 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Thu, 14 Oct 2021 15:44:06 +0200 Subject: [PATCH 04/15] Update AmazonInappPurchasePlugin.java --- .../flutterinapppurchase/AmazonInappPurchasePlugin.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java index 6533c53f..b0ae1a06 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java @@ -155,6 +155,9 @@ public void onProductDataResponse(ProductDataResponse response) { Number number; try { + Log.d(TAG, "onProduct: " + product); + Log.d(TAG, "onFormat: " + format); + Log.d(TAG, "onPrice: " + product.getPrice()); number = format.parse(product.getPrice()); } catch (ParseException e) { result.error(TAG, "Price Parsing erroreee", e.getMessage()); From e6c61b5b701ee1a11a407f2800f69d1e6cb17826 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Thu, 14 Oct 2021 15:51:28 +0200 Subject: [PATCH 05/15] Update AmazonInappPurchasePlugin.java --- .../flutterinapppurchase/AmazonInappPurchasePlugin.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java index b0ae1a06..2d8109c9 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java @@ -154,10 +154,13 @@ public void onProductDataResponse(ProductDataResponse response) { NumberFormat format = NumberFormat.getCurrencyInstance(); Number number; + String test; try { Log.d(TAG, "onProduct: " + product); Log.d(TAG, "onFormat: " + format); Log.d(TAG, "onPrice: " + product.getPrice()); + test = product.getPrice(); + Log.d(TAG, "onTest: " +test); number = format.parse(product.getPrice()); } catch (ParseException e) { result.error(TAG, "Price Parsing erroreee", e.getMessage()); From 9c8ccfba81129cc805f23ef1f985157519412a9d Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Thu, 14 Oct 2021 15:55:47 +0200 Subject: [PATCH 06/15] Update AmazonInappPurchasePlugin.java --- .../AmazonInappPurchasePlugin.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java index 2d8109c9..c9e5e253 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java @@ -153,22 +153,16 @@ public void onProductDataResponse(ProductDataResponse response) { Product product=skuDetails.getValue(); NumberFormat format = NumberFormat.getCurrencyInstance(); - Number number; - String test; + String price; try { - Log.d(TAG, "onProduct: " + product); - Log.d(TAG, "onFormat: " + format); - Log.d(TAG, "onPrice: " + product.getPrice()); - test = product.getPrice(); - Log.d(TAG, "onTest: " +test); - number = format.parse(product.getPrice()); + price = product.getPrice(); } catch (ParseException e) { - result.error(TAG, "Price Parsing erroreee", e.getMessage()); + result.error(TAG, "Price Parsing error", e.getMessage()); return; } JSONObject item = new JSONObject(); item.put("productId", product.getSku()); - item.put("price", number.toString()); + item.put("price", price); item.put("currency", null); ProductType productType = product.getProductType(); switch (productType) { From c480fde620cf7e89581e607b2913291667cc13d5 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Thu, 14 Oct 2021 15:57:19 +0200 Subject: [PATCH 07/15] Update AmazonInappPurchasePlugin.java --- .../flutterinapppurchase/AmazonInappPurchasePlugin.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java index c9e5e253..53a31ae3 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AmazonInappPurchasePlugin.java @@ -153,16 +153,9 @@ public void onProductDataResponse(ProductDataResponse response) { Product product=skuDetails.getValue(); NumberFormat format = NumberFormat.getCurrencyInstance(); - String price; - try { - price = product.getPrice(); - } catch (ParseException e) { - result.error(TAG, "Price Parsing error", e.getMessage()); - return; - } JSONObject item = new JSONObject(); item.put("productId", product.getSku()); - item.put("price", price); + item.put("price", product.getPrice()); item.put("currency", null); ProductType productType = product.getProductType(); switch (productType) { From bba0f76eb35d74202507bb675d7553fd831d16b0 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:02:44 +0200 Subject: [PATCH 08/15] Update KINDLE.md --- KINDLE.md | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/KINDLE.md b/KINDLE.md index 747d7cfc..39c6fbb0 100644 --- a/KINDLE.md +++ b/KINDLE.md @@ -1,4 +1,4 @@ -# Amazon Kindle Fire In-App Purchases Guide +# Amazon Kindle Fire / FIre TV In-App Purchases Guide The plugin will automatically detect Amazon Kindle devices during runtime. @@ -20,10 +20,46 @@ Put this file into the kindle sdcard with : You can verify if the file is valid in the AAT and view the purchases. +Add following lines to your AndroidManifest: + + + + + + + + + +Like in the example https://github.com/dooboolab/flutter_inapp_purchase/blob/master/example/android/app/src/main/AndroidManifest.xml. + Now, when you make a purchase the AAT will intercept, show the purchases screen and allow you to make a purchase. Your app will think a real purchase has been made and you can test the full purchase flow. ## Testing Live Purchases Add your apk into the "Live App Testing" tab. Add your IAP into the "In-App Items" tab. You must fill in your bank details first and submit your IAP so that the status is "live". + +Also with Gradle 3.4.0 or higher you need to take care of the obfuscating. To do so, create a Proguard file named "proguard-rules.pro" in the android/app folder. Into that file put the following content: + +## Flutter wrapper +-dontwarn com.amazon.** +-keep class com.amazon.** {*;} +-keepattributes *Annotation* + +Then edit your build.gradle in app level like: + +buildTypes { + + release { + shrinkResources false + signingConfig signingConfigs.release + minifyEnabled false + useProguard true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + +If you need more help, check out https://stackoverflow.com/questions/62833628/how-to-disable-code-obfuscation-in-flutter-release-apk and the amazon part https://developer.amazon.com/de/docs/in-app-purchasing/iap-obfuscate-the-code.html. + Now your testers will be sent a link to the test version of your app. They can make purchases at no cost to test your app. ## Submitting to the Amazon store From cffa6e79e6b453153614e98ac571fe9d584f7883 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:02:54 +0200 Subject: [PATCH 09/15] Update KINDLE.md --- KINDLE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KINDLE.md b/KINDLE.md index 39c6fbb0..8f470b62 100644 --- a/KINDLE.md +++ b/KINDLE.md @@ -1,4 +1,4 @@ -# Amazon Kindle Fire / FIre TV In-App Purchases Guide +# Amazon Kindle Fire / Fire TV In-App Purchases Guide The plugin will automatically detect Amazon Kindle devices during runtime. From 560de00d33af9f46008521ac8bd29bcd2c5b493b Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:03:16 +0200 Subject: [PATCH 10/15] Update KINDLE.md --- KINDLE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KINDLE.md b/KINDLE.md index 8f470b62..5c1d5b48 100644 --- a/KINDLE.md +++ b/KINDLE.md @@ -1,6 +1,6 @@ # Amazon Kindle Fire / Fire TV In-App Purchases Guide -The plugin will automatically detect Amazon Kindle devices during runtime. +The plugin will automatically detect Amazon devices during runtime. ## Testing In-App Purchases From f5678cbdc3231335e65f7e38abaf71f10af364a5 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:11:07 +0200 Subject: [PATCH 11/15] Update KINDLE.md --- KINDLE.md | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/KINDLE.md b/KINDLE.md index 5c1d5b48..19c15e58 100644 --- a/KINDLE.md +++ b/KINDLE.md @@ -20,18 +20,7 @@ Put this file into the kindle sdcard with : You can verify if the file is valid in the AAT and view the purchases. -Add following lines to your AndroidManifest: - - - - - - - - - -Like in the example https://github.com/dooboolab/flutter_inapp_purchase/blob/master/example/android/app/src/main/AndroidManifest.xml. +Add android.permission.INTERNET and com.amazon.device.iap.ResponseReceiver to your AndroidManifest like in the example https://github.com/dooboolab/flutter_inapp_purchase/blob/master/example/android/app/src/main/AndroidManifest.xml. Now, when you make a purchase the AAT will intercept, show the purchases screen and allow you to make a purchase. Your app will think a real purchase has been made and you can test the full purchase flow. @@ -40,15 +29,15 @@ Add your apk into the "Live App Testing" tab. Add your IAP into the "In-App Item Also with Gradle 3.4.0 or higher you need to take care of the obfuscating. To do so, create a Proguard file named "proguard-rules.pro" in the android/app folder. Into that file put the following content: -## Flutter wrapper --dontwarn com.amazon.** --keep class com.amazon.** {*;} --keepattributes *Annotation* +-dontwarn com.amazon.**
+-keep class com.amazon.** {*;}
+-keepattributes *Annotation*
Then edit your build.gradle in app level like: -buildTypes { - +build.gradle: + + buildTypes { release { shrinkResources false signingConfig signingConfigs.release @@ -57,6 +46,7 @@ buildTypes { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + If you need more help, check out https://stackoverflow.com/questions/62833628/how-to-disable-code-obfuscation-in-flutter-release-apk and the amazon part https://developer.amazon.com/de/docs/in-app-purchasing/iap-obfuscate-the-code.html. From c531558c37b45da80c0646c05c9779f6f8e4a55a Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Mon, 18 Oct 2021 14:23:06 +0200 Subject: [PATCH 12/15] Update flutter_inapp_purchase.dart --- lib/flutter_inapp_purchase.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/flutter_inapp_purchase.dart b/lib/flutter_inapp_purchase.dart index 0c546d62..0d1de8dc 100644 --- a/lib/flutter_inapp_purchase.dart +++ b/lib/flutter_inapp_purchase.dart @@ -91,8 +91,6 @@ class FlutterInappPurchase { final String? result = await _channel.invokeMethod('canMakePayments'); return result; } - throw PlatformException( - code: _platform.operatingSystem, message: "platform not supported"); } /// Retrieves a list of products from the store on `Android` and `iOS`. From 4ad9c9fd2564b220f75be2f634f5c328676259a6 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Mon, 18 Oct 2021 14:27:21 +0200 Subject: [PATCH 13/15] Update flutter_inapp_purchase.dart --- lib/flutter_inapp_purchase.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/flutter_inapp_purchase.dart b/lib/flutter_inapp_purchase.dart index 0d1de8dc..0c546d62 100644 --- a/lib/flutter_inapp_purchase.dart +++ b/lib/flutter_inapp_purchase.dart @@ -91,6 +91,8 @@ class FlutterInappPurchase { final String? result = await _channel.invokeMethod('canMakePayments'); return result; } + throw PlatformException( + code: _platform.operatingSystem, message: "platform not supported"); } /// Retrieves a list of products from the store on `Android` and `iOS`. From 94484e5bff909b793484fbb51df96021b8dfa906 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Mon, 18 Oct 2021 14:31:03 +0200 Subject: [PATCH 14/15] Update AndroidInappPurchasePlugin.java --- .../flutterinapppurchase/AndroidInappPurchasePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java index cbf747ba..d40fd72f 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java @@ -148,7 +148,7 @@ public void onBillingSetupFinished(BillingResult billingResult) { channel.invokeMethod("connection-updated", item.toString()); if (alreadyFinished) return; alreadyFinished = true; - result.error(call.method, "responseCode: " + responseCode, ""); + result.error(call.method, "responseCode222: " + responseCode, ""); } } catch (JSONException je) { je.printStackTrace(); From 6f1828e037da1f5e001efb89b69aa32f2c905db6 Mon Sep 17 00:00:00 2001 From: M-Brock <81085003+M-Brock@users.noreply.github.com> Date: Mon, 18 Oct 2021 14:34:57 +0200 Subject: [PATCH 15/15] Update AndroidInappPurchasePlugin.java --- .../flutterinapppurchase/AndroidInappPurchasePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java b/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java index d40fd72f..cbf747ba 100644 --- a/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java +++ b/android/src/main/java/com/dooboolab/flutterinapppurchase/AndroidInappPurchasePlugin.java @@ -148,7 +148,7 @@ public void onBillingSetupFinished(BillingResult billingResult) { channel.invokeMethod("connection-updated", item.toString()); if (alreadyFinished) return; alreadyFinished = true; - result.error(call.method, "responseCode222: " + responseCode, ""); + result.error(call.method, "responseCode: " + responseCode, ""); } } catch (JSONException je) { je.printStackTrace();