Android — Google Play 原生内购(pay-googleplay)
验收状态
源码候选已建立,但没有正式业务模块发布 Tag / 远程 Reposilite 版本,也没有完成真实游戏项目签名与第三方服务端联调。 单模块 CI 或五模块共存编译不能等同上线验收。生产接入必须以实测、正式版本和固定游戏协议为准。
源码目录:modules/pay-googleplay。当前锁定 Google Play Billing 8.3.0,以避免未经验证直接把旧 Egret 游戏宿主升级到 Billing 9.x;最低 Android 23。
原生调用
java
ROPayGooglePlay billing = new ROPayGooglePlay(application, new ROPayGooglePlay.Listener() {
@Override public void onPurchase(Purchase purchase) {
// PENDING 不发货。PURCHASED 必须先向服务端验证 purchaseToken。
}
@Override public void onError(int code, String message, boolean cancelled) {}
});
billing.connect(resultCode -> {});
billing.queryProducts(Arrays.asList("game.coins.small"),
BillingClient.ProductType.INAPP, (products, code) -> {});
// 已查询产品后在前台调用:
billing.purchase(activity, "game.coins.small", null);必须遵守的服务器契约
- 业务服务端使用 Google Play Developer API 验证 purchaseToken、购买状态和商品标识,以 token 做幂等履约;客户端成功回调不是发货成功。
- 后端已经确认收货/幂等发货后,客户端才能调用
acknowledgeVerified或consumeVerified。 - 在 App 冷启动/恢复调用
restore(INAPP)与restore(SUBS)补单;测试待处理、取消、异常、订阅和退款。 - 只有拥有 Play Console、产品、测试轨道、真实签名和后端权限的游戏工程可以做正式联调。不要依赖仓库内的空 App 作为支付验收。