Google Play In-app Billing API version is less than 3

有一段時間沒寫文章了,今天分享一個最近遇到的坑。先說結論,賬號問題,不是代碼問題。

最近在做海外版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。

  1. 看到這個錯誤的時候,第一反應是Google Play的版本太低,導致裏面的支付協議版本比較低,可是很快這個猜想被否定了,因爲同一個版本的Google Play在別的手機上可以正常購買。
  2. 接着開始懷疑是Google Play是不是依賴了某個Google服務比較舊,畢竟Google有各種基礎服務,但是這個服務是什麼,應該改如何升級?

沒轍了,那就先上搜索引擎找找,看看有沒有別人踩過這個坑。Google搜了,基本也沒啥結果,唯一有用的兩個帖子:

  1. https://stackoverflow.com/questions/56479824/google-play-in-app-billing-api-version-is-less-than-3
  2. https://github.com/android/play-billing-samples/issues/256

但是這個兩個帖子並沒有給出解決方案,於是這個事就進入了僵局,先這樣,可能那個手機有毒,畢竟手上的手機都是國內的手機,Google的服務從來都是被閹割了的(想甩鍋)。先放一放,喝口茶。

後來,另外一個後端同事的手機要做測試,剛好他的手機也報這個錯誤,然後他登錄了賬號,居然不報錯了。這就奇了怪了,難道是登錄了有些東西被升級了?即便是那又是升級了啥?

後來陰差陽錯,總結出來的一個結論:登錄Google Play的賬號如果是中國區,那就會報這個錯誤。至於爲什麼我就不好猜想了,反正感覺挺噁心,不給一個像樣一點的提示,不知道是否涉及政治問題。這裏面還有一個坑,發現Google Play登錄過其他的中國區賬號,再切換回美國地區的賬號,還是報這個錯,必須到手機的設置中心中把其他的Google賬號移除掉(手機設置中心裏面有個 “賬號”的選項,可以移除登錄過的Google賬號,每個手機位置可能不太一樣)。

所以最終的結論是:不是手機的的問題,而是該手機登錄Google賬號的問題,或者說是Google賬號的歸屬地問題,至於哪些地方不能使用,我沒有足夠的賬號數據支撐。或許咱們能做的是在產品角度,給出相應提示,例如更換賬號啥的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章