question

ZigZag, Inc. avatar image
ZigZag, Inc. asked ·

IAP transactions from App Store not reported by Amazon Underground

We have received reports from several customers about the following scenario: 1. They purchase our app on a device that has the Amazon App Store installed. (It seems to make no difference if this device is an Amazon device or not.) 2. They make an in-app purchase of an entitlement that unlocks certain app features. 3. They obtain a new Android device that is not an Amazon device (no Amazon App Store or Amazon Underground).. 4. They install Amazon Underground, sign in with the same account used on the first device and then download our app from their account. 5. The app says that the entitlement needs to be purchased. However, if they try to purchase it again, they receive an error message that they already own the item. 6. Nevertheless, our app does not recognize the in-app purchase. 7. If they then install the Amazon App Store on the second device, our app does recognize the in-app purchase and the app features are unlocked. On app start-up, we query the status of the user's in-app purchases by calling: PurchasingService.getPurchaseUpdates(true); Here's our code that responds to the call (after it checks that the response was successful and the user ID matches):: final Map info = new HashMap<>(); for (final Receipt receipt : response.getReceipts()) { final String sku = receipt.getSku(); final String item = skuToItemIdMap.get(sku); if (item != null) { if (receipt.isCanceled()) { /** * If the customer for some reason had items revoked, the receipts for these items will be * canceled. */ debugLog("Revoked Sku: " + sku); info.put(item, PurchaseState.UNPURCHASED); } else { switch (receipt.getProductType()) { case ENTITLED: // If the receipt is for an entitlement, the customer is re-entitled. debugLog("Entitling sku: " + sku); info.put(item, PurchaseState.PURCHASED); break; default: break; } } } } PurchaseData.setPurchaseStates(info); if (response.hasMore()) { PurchasingService.getPurchaseUpdates(false); } So at app start-up, Amazon Underground is not responding with an ENTITLED status for the item. However, if the App Store is installed, the above code detects the previous purchase. Later, when the user tries to make the in-app purchase again, we simply call PurchasingService.purchase(itemIdToSkuMap.get(purchasable.key)); (the argument simply looks up the Amazon item ID for the item). Here's the code we are using to process a purchase response: @Override public void onPurchaseResponse(final PurchaseResponse response) { switch (response.getRequestStatus()) { case SUCCESSFUL: case ALREADY_PURCHASED: PurchaseData.setPurchaseState( skuToItemIdMap.get(response.getReceipt().getSku()), PurchaseState.PURCHASED); break; case FAILED: case NOT_SUPPORTED: break; case INVALID_SKU: debugLog("Invalid Sku for request " + response.getRequestId()); break; } } Clearly, our code is not receiving an ALREADY_PURCHASED response from Amazon Underground, although it is from the App Store. Is there a different way to check for already purchased entitlements when the device only has Amazon Underground installed? We have not had similar reports from customers whose second device is a Kindle Fire device, but we have not verified that the problem does not exist for those devices as well. Just as a side complaint: It is very difficult for customers to install the Amazon App Store on their own, as the Amazon pages all direct users to install Amazon Underground. We usually need to provide them the link to the App Store's download page.
iap
10 |2000 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

WangChao@Amazon avatar image
WangChao@Amazon answered ·
Hello, Sorry for the late reply. So just to be clear: is the app in step 1 the same app as the one in step 4? Please note that when submitting your Underground app: If applicable, recreate your In-App Purchasing (IAP) items as part of your new app submission, keeping the original prices intact. Incorporate the new SKUs for these IAP items into your app. https://developer.amazon.com/public/solutions/underground/docs/amazon-underground-eligibility-and-submission-checklists
10 |2000 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

ZigZag, Inc. avatar image
ZigZag, Inc. answered ·
Thanks for the response. Yes, it's the same app for all steps, but we have not submitted it to Amazon Underground (and we have no plans to do so). Nevertheless, we run into problems when customers who bought our app and also made an in-app purchase get a new device that (apparently) only has Amazon Underground installed. Evidently they can use Amazon Underground to install apps previously purchased through the Appstore, but (in our case, at least) the in-app purchases previously made do not get reported by Amazon Underground to the app when the app requests the in-app purchase history. Consequently, our app on the new device does not recognize that any of their entitlements were purchased (and fulfilled) on the older device.
10 |2000 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.