有一段时间没写文章了,今天分享一个最近遇到的坑。先说结论,账号问题,不是代码问题。
最近在做海外版App的时候有个需求是接入Google支付,接入支付SDK后,“有些手机”当尝试通过SDK连接到Google Play中的支付服务时,即以下代码片段:
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// The BillingClient is ready. You can query purchases here.
}
}
@Override
public void onBillingServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
}
});
报了一个错误:Google Play In-app Billing API version is less than 3。
- 看到这个错误的时候,第一反应是Google Play的版本太低,导致里面的支付协议版本比较低,可是很快这个猜想被否定了,因为同一个版本的Google Play在别的手机上可以正常购买。
- 接着开始怀疑是Google Play是不是依赖了某个Google服务比较旧,毕竟Google有各种基础服务,但是这个服务是什么,应该改如何升级?
没辙了,那就先上搜索引擎找找,看看有没有别人踩过这个坑。Google搜了,基本也没啥结果,唯一有用的两个帖子:
- https://stackoverflow.com/questions/56479824/google-play-in-app-billing-api-version-is-less-than-3
- https://github.com/android/play-billing-samples/issues/256
但是这个两个帖子并没有给出解决方案,于是这个事就进入了僵局,先这样,可能那个手机有毒,毕竟手上的手机都是国内的手机,Google的服务从来都是被阉割了的(想甩锅)。先放一放,喝口茶。
后来,另外一个后端同事的手机要做测试,刚好他的手机也报这个错误,然后他登录了账号,居然不报错了。这就奇了怪了,难道是登录了有些东西被升级了?即便是那又是升级了啥?
后来阴差阳错,总结出来的一个结论:登录Google Play的账号如果是中国区,那就会报这个错误。至于为什么我就不好猜想了,反正感觉挺恶心,不给一个像样一点的提示,不知道是否涉及政治问题。这里面还有一个坑,发现Google Play登录过其他的中国区账号,再切换回美国地区的账号,还是报这个错,必须到手机的设置中心中把其他的Google账号移除掉(手机设置中心里面有个 “账号”的选项,可以移除登录过的Google账号,每个手机位置可能不太一样)。
所以最终的结论是:不是手机的的问题,而是该手机登录Google账号的问题,或者说是Google账号的归属地问题,至于哪些地方不能使用,我没有足够的账号数据支撑。或许咱们能做的是在产品角度,给出相应提示,例如更换账号啥的。