有一段時間沒寫文章了,今天分享一個最近遇到的坑庭再。先說結(jié)論捞奕,賬號問題,不是代碼問題拄轻。
最近在做海外版App的時候有個需求是接入Google支付颅围,接入支付SDK后,“有些手機”當(dāng)嘗試通過SDK連接到Google Play中的支付服務(wù)時恨搓,即以下代碼片段:
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院促。
- 看到這個錯誤的時候,第一反應(yīng)是Google Play的版本太低斧抱,導(dǎo)致里面的支付協(xié)議版本比較低常拓,可是很快這個猜想被否定了,因為同一個版本的Google Play在別的手機上可以正常購買辉浦。
- 接著開始懷疑是Google Play是不是依賴了某個Google服務(wù)比較舊弄抬,畢竟Google有各種基礎(chǔ)服務(wù),但是這個服務(wù)是什么宪郊,應(yīng)該改如何升級掂恕?
沒轍了,那就先上搜索引擎找找弛槐,看看有沒有別人踩過這個坑懊亡。Google搜了,基本也沒啥結(jié)果乎串,唯一有用的兩個帖子:
- 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
但是這個兩個帖子并沒有給出解決方案店枣,于是這個事就進入了僵局,先這樣,可能那個手機有毒,畢竟手上的手機都是國內(nèi)的手機上陕,Google的服務(wù)從來都是被閹割了的(想甩鍋)脆栋。先放一放,喝口茶鸠匀。
后來蕉斜,另外一個后端同事的手機要做測試,剛好他的手機也報這個錯誤,然后他登錄了賬號宅此,居然不報錯了机错。這就奇了怪了,難道是登錄了有些東西被升級了父腕?即便是那又是升級了啥弱匪?
后來陰差陽錯,總結(jié)出來的一個結(jié)論:登錄Google Play的賬號如果是中國區(qū)璧亮,那就會報這個錯誤萧诫。至于為什么我就不好猜想了,反正感覺挺惡心枝嘶,不給一個像樣一點的提示帘饶,不知道是否涉及政治問題。這里面還有一個坑群扶,發(fā)現(xiàn)Google Play登錄過其他的中國區(qū)賬號及刻,再切換回美國地區(qū)的賬號,還是報這個錯竞阐,必須到手機的設(shè)置中心中把其他的Google賬號移除掉(手機設(shè)置中心里面有個 “賬號”的選項缴饭,可以移除登錄過的Google賬號,每個手機位置可能不太一樣)骆莹。
所以最終的結(jié)論是:不是手機的的問題颗搂,而是該手機登錄Google賬號的問題,或者說是Google賬號的歸屬地問題汪疮,至于哪些地方不能使用峭火,我沒有足夠的賬號數(shù)據(jù)支撐≈侨拢或許咱們能做的是在產(chǎn)品角度卖丸,給出相應(yīng)提示,例如更換賬號啥的盏道。