检查用户是否可以通过 PlayStore 进行应用内结算

Sch*_*ude 5 android in-app-billing android-billing google-play-services

因此,我们希望通过 Google 的计费 API 和支付宝(中国版)支持应用内计费。我编写了一个方法,该方法应该返回 GooglePlay 或 AliPay 计费客户端(以可用者为准)。我需要一种方法来确定用户是否可以使用 Google 的计费服务,以便我知道要返回哪个客户端。

到目前为止,我遇到了几种不同的选择,但我不确定哪一种是我需要的:

  1. 创建一个ServiceConnection并检查结果IInAppBillingService.Stub.asInterface(service) .isBillingSupported(3, context.packageName, "inapp")

这是完整的代码:https : //gist.github.com/first087/9088162

这有点乏味,因为我需要等待服务连接,获取异步结果然后返回正确的计费管理器,但乍一看似乎正是我需要的。

  1. 使用GoogleApiAvailability类并检查结果isGooglePlayServicesAvailable(context)

这个选项比第一个更干净,但我不确定它是否返回我需要的内容,并且还要求我将com.google.android.gms:play-services-base库添加到我的项目中。

  1. 检查设备上是否安装了 GooglePlay 应用程序。

这是最不可靠的选项(我认为),因为您可以手动安装该应用程序,即使制造商未预先安装该应用程序,然后您可能无法购买,因为您在中国而他们没有不允许。


有没有人有类似的经历?如何正确判断用户是否可以通过PlayStore进行购买?

Sch*_*ude 5

因此,在中国测试了这些方法之后,我们使用安装和未安装 PlayStore 应用程序的手机,发现了以下结果:

安装了PlayStore应用且没有 VPN

  • GoogleApiAvailability.isGooglePlayServicesAvailable()返回代码2 -ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED
  • IInAppBillingService.isBillingSupported()返回代码3 -BillingResponse.BILLING_UNAVAILABLE

未安装PlayStore应用且没有 VPN

  • GoogleApiAvailability.isGooglePlayServicesAvailable()返回代码9 -ConnectionResult.SERVICE_INVALID
  • IInAppBillingService.isBillingSupported()返回代码3 -BillingResponse.BILLING_UNAVAILABLE

安装了PlayStore应用程序 使用VPN

  • GoogleApiAvailability.isGooglePlayServicesAvailable()返回代码0 -ConnectionResult.SUCCESS
  • IInAppBillingService.isBillingSupported()返回代码3 -BillingResponse.BILLING_UNAVAILABLE

结论:确定计费是否实际可用的最安全方法是通过该isBillingSupported()方法。如果您不想通过问题选项 1 中显示的“hacky”方式使用它,您可以实例化一个 newBillingClient并等待其方法的回调startConnection()

以下是我编写的协程的要点,它根据 PlayStore 的应用内计费是否可用,为您提供 BillingManager 的两种实现之一。