Amazon rejected our IAP App because it won't run on a Samsung device

I want to see if others are having the same issue, and how to go about it.

We recently implemented IAP in our app, and it was approved by Amazon. When we did a minor update to the app, it got rejected because it wont run on Samsung devices. We went back and realized that even the approved app didn’t run on Samsung devices. So, it appears this may be a new requirement from Amazon. Here is the bug report from Amazon:

Upon launch, the app force closes, crashes, or displays
only a black screen.
Steps to Reproduce:

1.Install and launch the app.
2.The app exits to the device home screen.
OS/Device(s)/Form Factor: 4.1.2/Samsung Note/Phone+Tablet

When we went back to the code, and all we did was to remove the store.init and store.foobar() code, the app launches properly. Similarly, if we leave store.foobar() in place, but build for the Google Play market, things run smoothly on Samsung. So, it appears to be an issue directly related to including Amazon IAP in our code. We use Corona build #2013.1227.

I am thinking this is a bug? Has anyone else run into this? Thanks for the help!

Andrew

Hi @akao,

Can you perform a simple device detection and only run the Amazon IAP code on Amazon devices?

Brent

@Brent

Good idea. Let me give the techniques here a try and see if it works:

http://www.coronalabs.com/blog/2012/12/11/device-detection-on-steroids/

Will post back.

@Brent I thought more about it, and did some more research. Unfortunately I don’t think doing device detection makes sense. The reason is that Amazon’s IAP is suppose to work on none-Kindle Fire devices. Here is a support forum thread I found:

https://forums.developer.amazon.com/forums/thread.jspa?threadID=501

I also have this issue which is critical roadblock for our app.

Here is rejection response from Amazon:

Bug Description: Functionality fail
Steps to Reproduce:

  1. Install and launch the app 
  2. Tap on any IAP
  3. Tap on “Buy Now”
  4. App keeps loading. 

Device : 4.1.x / HTC

bump this thread

Hi @Blerdo,

As the Amazon IAP plugin is a 3rd-party plugin (Amazon), we don’t have direct control over the source or functionality. Each plugin documentation page has a Support section at the bottom, and I encourage you to contact them directly about this issue. We are also making them aware of the issue and are trying to get a fix in place as quickly as possible.

http://docs.coronalabs.com/daily/plugin/amazon.iap/index.html

Thanks,

Brent

Will do.

I’m quite sure that the Amazon IAP plugin worked on my Samsung Galaxy S1 when I implemented Amazon IAP a few months back.

I’ll have to take a look and see.

Just thought about one thing:

I have the Amazon App Store app installed on the device, which I assume is required for IAP to function properly.

I had a look at the approval confirmation I got from Amazon in August.

Apparently they tested on a Samsung device. (This app includes Amazon IAP)

RESULTS: YOUR APP CLEARED TESTING FOR ALL TARGETED DEVICES

Device Result Comments
Non-Amazon Android (SAMSUNG - 4.1.X )  PASS
Fire HD 8.9 WAN  PASS
Fire HD 8.9 Wifi  PASS
Kindle Fire (1st Generation)  PASS
Kindle Fire  PASS
Kindle Fire HD  PASS

I just tested the approved version, downloaded from the Amazon App Store, on my Samsung Galaxy S1 (Android 2.3.6) and IAP works fine.

The big difference here is that my app was built with Corona SDK 2013.1197.

I recompiled my Amazon IAP app with the latest build (2013.1247), and IAP works as expected on my Samsung Galaxy S1.

(I made a test-purchase and it processed the transaction properly)

@ingemar Thank you so much for all this work! It seems obvious, but I don’t have the Amazon store on my Samsung. So let me get that installed in the next days and give it another try. Will keep this thread posted.

@ingemar - So, we did some testing on my Samsung Galaxy S4 and what we found is that if we add BOTH the Amazon Market and the SDKTester to our device, then store.init() works with the following trace:

D/PurchasingManager(28630): In App Purchasing SDK - Sandbox Mode: PurchasingObserver registered: plugin.amazon.iap.CoronaPurchasingObserver@425c0ec0 I/PurchasingManager(28630): Purchasing Framework initialization complete. Build ID 1.0.3 D/qdmemalloc(  211): ion: Mapped buffer base:0x479e2000 size:8355840 fd:53 E/WifiHW  (  772): ##################### set firmware type 0 ##################### D/WifiStateMachine(  772): setWifiEnabled : WifiNative.setFwType(0) D/qdmemalloc(  211): ion: Mapped buffer base:0x40081000 size:4096 fd:55 D/SandboxRequestHandler(28630): In App Purchasing SDK - Sandbox Mode: sendGetUserIdRequest E/SELinux (28659): selinux\_android\_seapp\_context\_reload: seapp\_contexts file is loaded from /seapp\_contexts D/dalvikvm(28659): Late-enabling CheckJNI D/STATUSBAR-NetworkController( 1041): refreshSignalCluster: data=0 bt=false I/dalvikvm(28659): Turning on JNI app bug workarounds for target SDK version 9... V/AlarmManager(  772): waitForAlarm result :4 D/qdmemalloc(  211): ion: Mapped buffer base:0x43290000 size:737280 fd:67 D/qdmemalloc(  211): ion: Mapped buffer base:0x40490000 size:4096 fd:69 I/AmazonSDKTester(28659): Sending UserId Response Broadcast ({"status":"SUCCESSFUL","requestId":"25ae1434-3204-423d-9d91-246ba566add9","userId":"DefaultTestUser"}) D/SandboxResponseHandler(28630): In App Purchasing SDK - Sandbox Mode: handleResponse D/SandboxResponseHandler(28630): In App Purchasing SDK - Sandbox Mode: Running Runnable for userIdResponse with requestId: 25ae1434-3204-423d-9d91-246ba566add9  

But, if we were to have only the Amazon Market without the SDK Tester, then store.init() fails and here is the trace (it doesn’t return)

D/PurchasingManager(28007): In App Purchasing SDK - Sandbox Mode: PurchasingObserver registered: plugin.amazon.iap.CoronaPurchasingObserver@425f89f0 I/PurchasingManager(28007): Purchasing Framework initialization complete. Build ID 1.0.3 D/qdmemalloc(  211): ion: Mapped buffer base:0x473ca000 size:8355840 fd:61 D/qdmemalloc(  211): ion: Mapped buffer base:0x400f1000 size:4096 fd:50 D/dalvikvm( 1311): GC\_CONCURRENT freed 496K, 9% free 18241K/20000K, paused 2ms+2ms, total 47ms D/FlurryAgent(28007): Report successful D/SandboxRequestHandler(28007): In App Purchasing SDK - Sandbox Mode: sendGetUserIdRequest W/ActivityManager(  772): Unable to start service Intent { act=com.amazon.testclient.iap.appUserId flg=0x10000000 (has extras) } U=0: not found  

Not sure why it won’t work without SDKTester. But you are correct, store.init() is now working for us.

Thanks!!

Shucks, I forgot to mention the SDKTester. It’s needed when you’re testing a debug build (or build that’s not yet published at Amazon).

The Amazon App Store app is needed for the official, approved app.

@ingemar Thanks for your terrific help!!

Hi @akao,

Can you perform a simple device detection and only run the Amazon IAP code on Amazon devices?

Brent

@Brent

Good idea. Let me give the techniques here a try and see if it works:

http://www.coronalabs.com/blog/2012/12/11/device-detection-on-steroids/

Will post back.

@Brent I thought more about it, and did some more research. Unfortunately I don’t think doing device detection makes sense. The reason is that Amazon’s IAP is suppose to work on none-Kindle Fire devices. Here is a support forum thread I found:

https://forums.developer.amazon.com/forums/thread.jspa?threadID=501