I am working on FireTV inApp purchase for my application.
I folowed the steps mentioned at URL: https://developer.amazon.com/docs/in-app-purchasing/iap-implement-iap.html
We are unable to get subscription from Amazon for FireTv application.
I have also created subscription on Amazon with the package.
I am not able to get user details in OnResume method
PurchasingService.getUserData()
Also, I am not able to fetch subscription from Amazon. Please help me on this.
My code is below:
const val parentSKU = "com.myCompany.subscription"
//const val childSKU = "com.myCompany.subscription.monthly"
class NewAccessPage : FragmentActivity(), NetworkCall.MyNetworkCallBack {
private lateinit var binding: ActivityNewAccessBinding
private lateinit var currentUserId: String
private lateinit var currentMarketplace: String
private lateinit var productSkus: HashSet<String>
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
PurchasingService.registerListener(applicationContext, purchasingListener)
// binding.backToBrowse.setOnClickListener { PurchasingService.purchase(parentSKU) }
}
override fun onResume() {
super.onResume()
//getUserData() will query the Appstore for the Users information
PurchasingService.getUserData()
// getPurchaseUpdates() will query the Appstore for any previous purchase
// PurchasingService.getPurchaseUpdates(true)
// getProductData will validate the SKUs with Amazon Appstore
productSkus = hashSetOf(parentSKU)
PurchasingService.getProductData(productSkus)
Log.e("Validating SKUs", "Validating SKUs with Amazon")
}
private var purchasingListener: PurchasingListener = object : PurchasingListener {
override fun onUserDataResponse(response: UserDataResponse) {
when (response.requestStatus) {
UserDataResponse.RequestStatus.SUCCESSFUL -> {
currentUserId = response.userData.userId
currentMarketplace = response.userData.marketplace
Log.e("Requestmy request", currentUserId+" "+ currentMarketplace)
}
UserDataResponse.RequestStatus.FAILED -> Log.e("Request", response.toString())
UserDataResponse.RequestStatus.NOT_SUPPORTED -> {
Log.e("Request", "Request not supported")
}
null -> Log.e("Request", "Request null")
}
}
override fun onProductDataResponse(productDataResponse: ProductDataResponse) {
when (productDataResponse.requestStatus) {
ProductDataResponse.RequestStatus.SUCCESSFUL -> {
val products = productDataResponse.productData
for (key in products.keys) {
val product = products[key]
Log.e(
"Product:",
"Product: ${product!!.title} \n Type: ${product.productType}\n SKU: ${product.sku}\n Price: ${product.price}\n Description: ${product.description}\n"
)
}
for (s in productDataResponse.unavailableSkus) {
Log.e("Unavailable SKU:$s", "Unavailable SKU:$s")
}
}
ProductDataResponse.RequestStatus.FAILED -> Log.e("FAILED", "FAILED")
else -> {
Log.e("Product", "Not supported")
}
}
}
override fun onPurchaseResponse(purchaseResponse: PurchaseResponse) {
when (purchaseResponse.requestStatus) {
PurchaseResponse.RequestStatus.SUCCESSFUL -> PurchasingService.notifyFulfillment(
purchaseResponse.receipt.receiptId,
FulfillmentResult.FULFILLED
)
PurchaseResponse.RequestStatus.FAILED -> {
}
else -> {
Log.e("Product", "Not supported")
}
}
}
override fun onPurchaseUpdatesResponse(response: PurchaseUpdatesResponse) {
when (response.requestStatus) {
PurchaseUpdatesResponse.RequestStatus.SUCCESSFUL -> {
for (receipt in response.receipts) {
if (!receipt.isCanceled) {
Log.e("Product", "Not supported")
}
}
if (response.hasMore()) {
PurchasingService.getPurchaseUpdates(true)
}
}
PurchaseUpdatesResponse.RequestStatus.FAILED -> Log.d("FAILED", "FAILED")
else -> {
Log.e("Product", "Not supported")
}
}
}
}// class closed
Error details:
In product data response
(com.amazon.device.iap.model.ProductDataResponse@2ec27fa, requestId: "81c97561-12aa-4cd5-8b87-1dc575f224ec", unavailableSkus: [], requestStatus: "FAILED", productData: {})
We tried to get user data and product data (SKU). But getting request failed.