Skip to content

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 作为支付验收。

每个能力独立发布与接入;正式项目验收必须使用真实游戏环境。