因此,我们希望通过Google的计费API和中国的支付宝来支持应用内计费。我已经编写了一种方法,该方法应返回GooglePlay或AliPay计费客户端(无论哪个可用)。我需要一种方法来确定用户是否可以使用Google的结算服务,以便知道要退回的客户。
到目前为止,我遇到了几种不同的选择,但我不确定哪一种是我需要的:
ServiceConnection
并检查IInAppBillingService.Stub.asInterface(service)
.isBillingSupported(3, context.packageName, "inapp")
的结果完整代码如下:https://gist.github.com/first087/9088162
这有点乏味,因为我需要等待服务连接,获取异步结果,然后返回正确的计费管理器,但乍一看似乎正是我所需要的。
GoogleApiAvailability
类并检查isGooglePlayServicesAvailable(context)
的结果此选项比第一个更干净,但是我不确定它是否返回我需要的内容,还需要我将com.google.android.gms:play-services-base
库添加到我的项目中。
这是最不可靠的选项(我认为),因为即使制造商尚未预先安装该应用程序,您也可以手动安装该应用程序,然后由于您在中国,因此您可能无法进行购买并且他们不允许这样做。
有人有过类似的经历吗?如何正确确定用户是否可以通过PlayStore进行购买?
答案 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的两种实现之一。