Android 检查用户是否可以通过PlayStore进行应用内计费

Android 检查用户是否可以通过PlayStore进行应用内计费,android,google-play-services,in-app-billing,android-billing,Android,Google Play Services,In App Billing,Android Billing,因此,我们希望通过谷歌的计费API和中国的支付宝支持应用内计费。我写了一个方法,可以返回GooglePlay或支付宝计费客户端(以可用的为准)。我需要一种方法来确定用户是否可以使用谷歌的计费服务,以便我知道返回哪个客户机 到目前为止,我遇到了几个不同的选择,我不确定哪一个是我需要的: 创建ServiceConnection并检查IInAppBillingService.Stub.asInterface(服务)的结果 .isBillingSupported(3,context.packageNam

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

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

  • 创建
    ServiceConnection
    并检查
    IInAppBillingService.Stub.asInterface(服务)的结果
    .isBillingSupported(3,context.packageName,“inapp”)
  • 以下是完整的代码:

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

  • 使用
    GoogleAppAvailability
    类并检查
    isGooglePlayServicesAvailable(上下文)
  • 这个选项比第一个选项干净得多,但我不确定它是否返回我需要的内容,还需要我将
    com.google.android.gms:play services base
    库添加到我的项目中

  • 检查设备上是否安装了GooglePlay应用程序
  • 这是最不可靠的选择(我认为),因为你可以手动安装应用程序,即使它不是由制造商预装的,然后你可能无法购买,因为你在中国,他们不允许



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

    因此,在中国测试了这些方法后,我们发现,一部手机安装了PlayStore应用程序,但没有安装PlayStore应用程序

    已安装PlayStore应用程序且未安装VPN

    • GoogleAppAvailability.isGooglePlayServicesAvailable()
      返回代码2-
      连接结果。需要服务版本更新
    • IInAppBillingService.isBillingSupported()
      返回代码3-
      BillingResponse.BILLING\u不可用
    未安装PlayStore应用程序,且未安装VPN

    • GoogleAppAvailability.isGooglePlayServicesAvailable()
      返回代码9-
      连接结果。服务\u无效
    • IInAppBillingService.isBillingSupported()
      返回代码3-
      BillingResponse.BILLING\u不可用
    已安装PlayStore应用程序且已安装VPN

    • GoogleAppAvailability.isGooglePlayServicesAvailable()
      返回代码0-
      ConnectionResult.SUCCESS
    • IInAppBillingService.isBillingSupported()
      返回代码3-
      BillingResponse.BILLING\u不可用

    结论:确定账单是否实际可用的最安全方法是通过
    isBillingSupported()
    方法。如果您不想通过问题选项1中所示的“黑客”方式使用它,您可以实例化一个新的
    BillingClient
    ,然后等待其
    startConnection()方法的回调


    以下是我编写的协同程序的一个示例,它为您提供了BillingManager的两个实现之一,具体取决于是否可以通过PlayStore进行应用内计费。

    如果手动管理服务连接对您来说太单调乏味,您可能会觉得很有帮助。@greeble31我正在使用BillingClient,但在实现中,我想能够决定是否使用谷歌账单客户端或我们的支付宝客户端,才能得到实现的一个实例。我想我应该说<代码> BlieClient。ISTrimeUpRePufPosid()/代码>,不检查ValueType EnUM的值:请考虑主演,但<代码> ISBILIN支持()
    在所有3种情况下返回相同的值。我以为你想要一种区分正常计费和非正常计费的方法?@Mark,这正是它的作用所在。PlayStore计费在中国不受支持,此方法正确地确定在所有不同的场景中都不可用。但对于“安装了VPN的PlayStore应用程序”,PlayStore计费在中国对我有效。你是说没有?从我们在中国的同事的测试来看,似乎没有,或者至少这些是他们记录并给我们的回复。他们可以尝试以下步骤:如果在过去几个月发生了一些变化,使VPN不再工作,我会感到惊讶。