检查用户

时间:2018-10-17 15:22:28

标签: android google-play-services in-app-billing android-billing

因此,我们希望通过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进行购买?

1 个答案:

答案 0 :(得分:0)

因此,在中国测试了方法之后,我们发现有一部装有或未装有PlayStore应用程序的手机,这就是我们发现的内容:

安装了 PlayStore 应用程序,并且没有 VPN

  • <ItemsControl ItemsSource="{Binding Metrics, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Grid.Column="1" Grid.Row="1" Margin="0, 20, 0, 0"> <ItemsControl.ItemTemplate> <DataTemplate> <WrapPanel Orientation="Horizontal"> <TextBox Name="CalibrationNameTB" Grid.Column="1" Text="{Binding ., UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Style="{StaticResource baseStyle}" Margin="0, 1" Padding="5, 1" Width="270" FontSize="12"/> </WrapPanel> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.Template> <ControlTemplate TargetType="ItemsControl" > <StackPanel Orientation="Horizontal" > <ItemsPresenter /> </StackPanel> </ControlTemplate> </ItemsControl.Template> </ItemsControl> 返回代码 2 -GoogleApiAvailability.isGooglePlayServicesAvailable()
  • ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED返回代码 3 -IInAppBillingService.isBillingSupported()

未安装 PlayStore 应用和 VPN

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

已安装 PlayStore 应用程序,并已已安装 VPN

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

结论:确定计费是否实际可用的最安全方法是通过BillingResponse.BILLING_UNAVAILABLE方法。如果您不想通过问题的选项1中所示的“ hacky”方式使用它,则只需实例化一个新的isBillingSupported()并等待其BillingClient方法的回调即可。

这是我编写的协程的gist,根据您是否可以通过PlayStore进行应用内结算,这为您提供了BillingManager的两种实现之一。