Android端Amazon IAP PurchasingListener无响应问题求助
解决Amazon IAP SDK 3.0.3订阅型IAP无响应/产品数据为空问题
1. 修正Manifest广播接收器配置
确保ResponseReceiver的权限配置符合SDK 3.x规范,禁止将权限放在<action>标签下,正确配置适配Android 12+:
<receiver android:name="com.amazon.device.iap.ResponseReceiver" android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY" android:exported="true"> <intent-filter> <action android:name="com.amazon.inapp.purchasing.NOTIFY" /> </intent-filter> </receiver>
同时在Manifest根节点补充必要权限声明:
<uses-permission android:name="com.amazon.inapp.purchasing.Permission.NOTIFY" />
2. 验证Amazon App Tester配置
- 确认已将包含完整SKU信息的
amazon.sdktester.json导入App Tester,文件内SKU需与代码中MySku的取值完全一致(大小写、拼写无偏差) - 使用与SDK 3.0.3兼容的App Tester版本,避免版本不匹配导致的请求拦截
- 在Fire设备上登录亚马逊测试账号,并确认App Tester已启用沙箱模式
3. 针对不同设备的适配调整
Fire 7平板完全无响应:
- 检查设备上的Amazon Appstore服务是否为最新版本,更新后重试
- 确认应用签名与App Tester配置中的签名完全匹配(沙箱环境要求签名一致,否则请求会被拦截)
- 重启设备,排除系统服务异常导致的广播接收故障
非Fire设备(小米/三星)产品数据为空:
- 确保设备已安装最新版Amazon Appstore和Amazon App Tester
- 检查
amazon.sdktester.json中SKU的type字段是否设置为SUBSCRIPTION,且配置信息完整 - 打印代码中传入
getProductData的SKU集合,核对是否存在拼写错误
4. 调整代码调用时机与上下文
- 将
getProductData的调用从onStart()移至onResume(),或添加短延迟确保Listener完全注册:
@Override protected void onResume() { super.onResume(); PurchasingService.getUserData(); PurchasingService.getPurchaseUpdates(false); // 延迟触发,避免SDK初始化延迟导致无响应 new Handler(Looper.getMainLooper()).postDelayed(() -> { final Set<String> productSkus = new HashSet<>(); for (final MySku mySku : MySku.values()) { productSkus.add(mySku.getSku()); Log.d(TAG, "onResume: request product data for sku: " + mySku.getSku()); } PurchasingService.getProductData(productSkus); }, 100); }
- 注册Listener时使用Application上下文,避免Activity销毁导致Listener失效:
PurchasingService.registerListener(getApplication(), purchasingListener);
5. 开启详细日志排查
在应用启动时开启SDK调试日志,获取更多错误细节:
PurchasingService.enableLogging(true);
同时过滤系统日志中的Amazon、IAP标签,检查是否存在广播拦截、权限校验失败等异常信息。
内容的提问来源于stack exchange,提问作者Sargius
相关产品推荐
相关产品推荐

