You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Play上验证另一款Android应用的许可证有效性

验证用户是否拥有第二款Google Play应用的可行方案

嘿,这个需求很常见,我帮你梳理几个Google官方支持的方案,既能满足验证需求,也能保证合规性:

方案1:客户端直接使用Google Play Billing Library查询

如果你的第二款应用是付费应用,可以直接在第一款应用中集成Billing Library,查询当前用户的已购项目列表,判断是否包含第二款应用的购买记录:

具体步骤

  • 先在第一款应用中集成最新版的Google Play Billing Library(推荐v5及以上版本)
  • 初始化BillingClient后,调用queryPurchasesAsync方法查询用户的已购项目:
// Kotlin 示例代码
val billingClient = BillingClient.newBuilder(context)
    .setListener { _, _ -> } // 可按需处理购买回调
    .enablePendingPurchases()
    .build()

billingClient.startConnection(object : BillingClientStateListener {
    override fun onBillingSetupFinished(result: BillingResult) {
        if (result.responseCode == BillingClient.BillingResponseCode.OK) {
            val params = QueryPurchasesParams.newBuilder()
                .setProductType(BillingClient.SkuType.INAPP)
                .build()
            billingClient.queryPurchasesAsync(params) { _, purchases ->
                // 第二款应用的商品ID(付费应用的话通常就是它的包名,可在Play Console确认)
                val secondAppSku = "com.your.second.app.package"
                val ownsSecondApp = purchases.any { it.sku == secondAppSku }
                if (ownsSecondApp) {
                    // 为用户发放专属福利
                }
            }
        }
    }

    override fun onBillingServiceDisconnected() {
        // 实现重连逻辑,保证服务可用
    }
})

注意点

  • 客户端验证存在被篡改的风险,如果福利涉及付费内容(比如虚拟货币、高级功能解锁),建议搭配服务器端验证使用
  • 必须确保用户在两款应用中使用的是同一个Google账号,否则查询结果会不准确

方案2:服务器端使用Google Play Developer API验证(更安全)

这种方式完全规避客户端篡改的问题,适合涉及敏感福利的场景:

具体步骤

  1. 在Google Cloud Console中创建服务账号,并关联你的Google Play开发者账号,获取认证密钥文件
  2. 在你的后端服务器中集成Google Play Developer API,通过用户提供的purchaseToken(或关联的Google账号ID)查询第二款应用的购买状态:
# Python 示例代码
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

# 初始化API客户端
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    "your-service-account-key.json",
    scopes=["https://www.googleapis.com/auth/androidpublisher"]
)
android_publisher = build("androidpublisher", "v3", credentials=credentials)

def check_second_app_ownership(package_name, product_id, purchase_token):
    try:
        response = android_publisher.purchases().products().get(
            packageName=package_name,
            productId=product_id,
            token=purchase_token
        ).execute()
        # purchaseState为0表示已成功购买
        return response["purchaseState"] == 0
    except Exception as e:
        print(f"验证失败: {str(e)}")
        return False
  1. 用户在第一款应用中申请福利时,客户端将自身的purchaseToken(或通过Google Sign-In获取的账号ID)发送到你的服务器,由服务器完成验证后再发放福利

特殊情况:第二款应用是免费应用

如果第二款应用是免费的,无法通过"许可证验证"(因为没有购买记录),这时候可以考虑:

  • 使用Firebase App Check验证用户是否合法安装了应用
  • 通过Google Play Install Referrer API确认应用是从官方Play商店安装的

不过这类方法只能验证"安装",无法替代付费应用的"许可证有效性"验证。

内容的提问来源于stack exchange,提问作者user1063364

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:21:12