You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter Android端使用官方in_app_purchase包实现订阅时购买报错

Flutter Android端使用官方in_app_purchase包实现订阅时购买报错

我之前也碰到过几乎一模一样的问题,折腾了好一阵才捋清楚问题所在,给你梳理几个绝对值得排查的方向:

1. 最核心的错误:用错了购买API!

订阅类型的商品绝对不能用buyNonConsumable方法!这个方法是给非消耗型商品(比如永久解锁功能)用的,订阅商品有专门对应的buySubscriptions方法。

你现在的代码是:

return _iap.buyNonConsumable(purchaseParam: param);

赶紧改成:

return _iap.buySubscriptions(purchaseParam: param);

iOS可能对这个API的兼容性比较宽松,但Android端对商品类型和API的匹配要求很严格,这大概率是你报错的主要原因。

2. 检查Google Play后台的商品配置

  • 商品必须已发布到测试轨道:草稿状态的订阅商品是无法被测试购买的,你得把商品推到内部测试、封闭测试或开放测试轨道,并且将你的测试Google账号添加到对应的测试用户列表里。
  • 商品ID完全匹配(包括大小写):Android对商品ID的大小写是敏感的,iOS则不敏感。比如你后台的ID是pro_subscription_weekly,代码里写成了Pro_Subscription_Weekly,iOS能找到商品,但Android就会直接报“找不到”。
  • 优惠活动关联正确:确认你的7天免费试用优惠已经正确关联到对应的基础计划,并且优惠的状态是已发布(不是草稿)。

3. 测试设备与账号的配置

  • 必须使用测试账号:测试购买只能用添加到Play后台测试列表的账号,而且这个账号不能是你的开发者账号本身(除非你特意把开发者账号加入测试用户)。正式账号会触发真实扣费,且无法购买测试商品。
  • 确保Google Play是最新版本:旧版本的Play商店可能存在兼容性问题,导致无法正确识别订阅商品,先把设备上的Play商店更到最新版再测试。
  • 用真实设备测试:你说的没错,模拟器确实没法测试内购,必须用装有Google Play服务的真实Android设备。

4. 代码里的小细节检查

在调用购买方法前,加个日志打印一下要购买的商品ID:

print('准备购买的商品ID:${product.id}');

然后和Google Play后台的商品ID逐字符对比,确保没有多打、少打字符,或者拼写错误——这种低级错误很容易犯,而且iOS可能会“容错”,Android却不会。

你可以先从“换正确的购买API”开始排查,这个是我当初踩的坑,改完之后就解决了大部分问题。

内容来源于stack exchange

火山引擎 最新活动