有一段時間沒寫文章了,今天分享一個最近遇到的坑。先說結論,賬號問題,不是代碼問題。
最近在做海外版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賬號的歸屬地問題,至於哪些地方不能使用,我沒有足夠的賬號數據支撐。或許咱們能做的是在產品角度,給出相應提示,例如更換賬號啥的。