内购不用等真机flutter_inapp_purchase本地测试技巧StoreKit沙盒与Amazon App Tester实战【免费下载链接】flutter_inapp_purchaseFlutter In App Purchase plugin that confirms OpenIAP项目地址: https://gitcode.com/gh_mirrors/fl/flutter_inapp_purchase做 App 内购开发时最让人头疼的就是测试没有真机、没有商店后台、没有沙盒账号购买流程根本跑不通。而flutter_inapp_purchase是一个遵循 OpenIAP 规范的 Flutter 内购插件同时支持 iOSStoreKit 2、AndroidGoogle Play Billing、Amazon 和 Meta Horizon 平台。好消息是借助StoreKit 沙盒和Amazon App Tester你可以在本地完整模拟下单 → 支付 → 验票全流程不用等审核、不用真实掏钱。下面这套实战技巧帮你把内购测试效率拉满。为什么内购本地测试这么重要 内购流程涉及连接计费系统 → 拉取商品 → 发起购买 → 监听结果 → 完成/消费交易五个环节任何一个环节出问题上线后都是真实损失。常见痛点iOS模拟器上fetchProducts经常返回空列表canMakePayments返回 falseAndroid没上传到 Play Console 就报 Billing is unavailableAmazon不想注册开发者账号就想先跑通购买流程flutter_inapp_purchase 针对每种平台都提供了对应的本地/沙盒测试路径本文按平台拆解。iOSStoreKit 沙盒三步跑通购买流程 第1步用本地 StoreKit 配置文件定义商品Xcode 提供了 StoreKit 测试功能在 Xcode 中通过File → New → StoreKit Configuration File创建一个.storekit文件就可以离线定义商品、价格、订阅组不需要在 App Store Connect 里建产品。本项目示例工程里就内置了一份现成配置可以直接参考配置文件example/ios/Runner/StoreKit.storekit其中定义了 2 个消耗型商品10 Bulbs / 30 Bulbs价格 0.99 / 2.99和 1 个订阅组Premium 月度订阅9.99/月周期P1M配置好文件后在 Xcode 的Scheme → Run里选中该.storekit文件运行App 的商品列表就会来自本地配置而不是远程商店——这是最接近纯本地的测试方式。第2步创建沙盒测试账号连远程沙盒时需要如果想更接近真实环境需要走 App Store Connect 的远程沙盒在 App Store Connect 中创建Sandbox Tester账号确认你的商品状态为Ready to Submit新建商品可能要等 24 小时生效关键技巧不要提前在设置 → App Store里登录沙盒账号只在购买弹窗出现时再登录否则容易触发 Cannot connect to iTunes Store 错误测试卡住时用不同沙盒账号、或清除沙盒购买历史后重试第3步验证购买结果与收据在代码里开启调试日志FlutterInappPurchase.instance.setDebugMode(true)购买回调里的environmentIOS字段会告诉你这笔交易来自Sandbox还是Production方便区分环境收据校验时沙盒交易要使用沙盒验证端点sandbox.itunes.apple.com/verifyReceipt生产环境用正式端点插件原生层实现见ios/Classes/FlutterIapHelper.swiftiOS 端 StoreKit 2 的交易处理都在这示例工程还提供了一个专门的 StoreKit 诊断页example/lib/test_storekit.dart一键执行诊断 → 检查支付能力 → 初始化连接 → 拉取商品四步自检非常适合排查商品拉不到这类问题。更多 iOS 排查细节参考项目文档docs/docs/getting-started/ios-setup.md和docs/docs/troubleshooting.md。AmazonApp Tester 零成本模拟完整购买流程 如果你要支持 Kindle Fire / Fire TVAmazon 提供的Amazon App TesterAAT是神器——不需要注册 Amazon 开发者账号就能在设备上模拟完整购买。项目里的完整指南在KINDLE.md核心步骤如下一键配置测试商品准备一份商品定义文件项目附带了现成模板ancillary/amazon.sdktester.json里面预定义了 4 个测试商品含消耗型、订阅型、授权型改成你自己的 Product ID然后通过 adb 推到设备存储卡adb push amazon.sdktester.json /sdcard/打开 Amazon App Tester在File菜单里选择这份文件AAT 会校验格式并列出你的商品配置 AndroidManifest 让 AAT 接管购买在AndroidManifest.xml中添加两样东西示例工程已配好可对照example/android/app/src/main/AndroidManifest.xmlandroid.permission.INTERNET权限名为com.amazon.device.iap.ResponseReceiver的接收器监听com.amazon.inapp.purchasing.NOTIFY广播体验效果配置完成后App 里的每次购买都会被 AAT 拦截它会弹出购买界面让你假装支付而你的 App 收到的回调和真实购买完全一致——等于免费获得了一条完整的购买链路。另外AAT 还有Live App Testing模式把 APK 放进 Live App Testing 标签页、商品设为 live 状态就能让测试人员走真实计费链路测试不扣费。使用 Gradle 3.4.0 时注意添加 ProGuard 规则保留com.amazon.**类否则混淆会导致 IAP 崩溃KINDLE.md里有现成的规则配置。其他平台的本地测试技巧 平台测试方式关键动作Google PlayLicense Tester把测试 Gmail 账号加入 Play Console 的 License testingApp 至少上传到内测轨道Meta Horizon设备真机在android/gradle.properties设置horizonEnabledtrue并配置 App ID通用调试利器Debug 购买面板示例工程提供了一个非常实用的调试页面example/lib/src/screens/debug_purchases_screen.dart它演示了测试内购最常用的一整套操作恢复购买restorePurchases()找回沙盒里残留的历史交易列出全部交易getAvailablePurchases()并按商品 ID 关键词自动识别订阅/消耗型消耗交易对消耗型商品调用consumePurchaseAndroid解决 Already Owned 报错取消订阅iOS 端一键拉起 App Store 订阅管理页建议测试每一轮都从恢复 → 列出 → 清理开始避免沙盒环境里堆积的旧交易干扰判断。高频问题速查清单 ✅Q1iOS 拉取商品返回空列表先查 Product ID 是否和商店后台完全一致 → 商品状态是否 Active/Ready to Submit → 新建商品是否满 24 小时 → 开启setDebugMode(true)看日志。Q2iOS 提示 Cannot connect to iTunes Store用真机而非模拟器、使用正确的沙盒测试账号、先退出已登录的正式 Apple ID、确认 Xcode 里 In-App Purchase 能力已开启。Q3Android 提示 Billing is unavailable设备是否安装了 Google Play 商店模拟器常缺、App 是否已上传 Play Console 并等待处理完成、applicationId是否与后台一致。Q4Android 消耗型商品报 Already Owned先把旧交易消费掉参考 Debug 购买面板的做法或在 Play 商店的购买历史里取消测试购买。Q5沙盒环境不稳定沙盒服务偶尔抽风属正常现象多试几次、换账号、换网络通常能解决。总结掌握这两套组合拳内购开发再也不会被没有真机/没有账号卡住iOS.storekit本地配置 StoreKit 沙盒账号模拟器与真机都能跑AmazonApp Tester amazon.sdktester.json零账号成本模拟全流程通用善用 Debug 购买面板和setDebugMode(true)快速定位问题项目内值得收藏的测试相关文件Amazon 测试完整指南KINDLE.mdAmazon 商品模板ancillary/amazon.sdktester.jsoniOS 本地商品配置example/ios/Runner/StoreKit.storekitStoreKit 诊断页example/lib/test_storekit.dart调试购买面板example/lib/src/screens/debug_purchases_screen.dart排障手册docs/docs/troubleshooting.md现在就可以打开示例工程把购买流程在本地跑起来 【免费下载链接】flutter_inapp_purchaseFlutter In App Purchase plugin that confirms OpenIAP项目地址: https://gitcode.com/gh_mirrors/fl/flutter_inapp_purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考