有一段時(shí)間沒(méi)寫文章了,今天分享一個(gè)最近遇到的坑。先說(shuō)結(jié)論,賬號(hào)問(wèn)題,不是代碼問(wèn)題。
最近在做海外版App的時(shí)候有個(gè)需求是接入Google支付,接入支付SDK后,“有些手機(jī)”當(dāng)嘗試通過(guò)SDK連接到Google Play中的支付服務(wù)時(shí),即以下代碼片段:
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.
}
});
報(bào)了一個(gè)錯(cuò)誤:Google Play In-app Billing API version is less than 3。
- 看到這個(gè)錯(cuò)誤的時(shí)候,第一反應(yīng)是Google Play的版本太低,導(dǎo)致里面的支付協(xié)議版本比較低,可是很快這個(gè)猜想被否定了,因?yàn)橥粋€(gè)版本的Google Play在別的手機(jī)上可以正常購(gòu)買。
- 接著開(kāi)始懷疑是Google Play是不是依賴了某個(gè)Google服務(wù)比較舊,畢竟Google有各種基礎(chǔ)服務(wù),但是這個(gè)服務(wù)是什么,應(yīng)該改如何升級(jí)?
沒(méi)轍了,那就先上搜索引擎找找,看看有沒(méi)有別人踩過(guò)這個(gè)坑。Google搜了,基本也沒(méi)啥結(jié)果,唯一有用的兩個(gè)帖子:
- 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
但是這個(gè)兩個(gè)帖子并沒(méi)有給出解決方案,于是這個(gè)事就進(jìn)入了僵局,先這樣,可能那個(gè)手機(jī)有毒,畢竟手上的手機(jī)都是國(guó)內(nèi)的手機(jī),Google的服務(wù)從來(lái)都是被閹割了的(想甩鍋)。先放一放,喝口茶。
后來(lái),另外一個(gè)后端同事的手機(jī)要做測(cè)試,剛好他的手機(jī)也報(bào)這個(gè)錯(cuò)誤,然后他登錄了賬號(hào),居然不報(bào)錯(cuò)了。這就奇了怪了,難道是登錄了有些東西被升級(jí)了?即便是那又是升級(jí)了啥?
后來(lái)陰差陽(yáng)錯(cuò),總結(jié)出來(lái)的一個(gè)結(jié)論:登錄Google Play的賬號(hào)如果是中國(guó)區(qū),那就會(huì)報(bào)這個(gè)錯(cuò)誤。至于為什么我就不好猜想了,反正感覺(jué)挺惡心,不給一個(gè)像樣一點(diǎn)的提示,不知道是否涉及政治問(wèn)題。這里面還有一個(gè)坑,發(fā)現(xiàn)Google Play登錄過(guò)其他的中國(guó)區(qū)賬號(hào),再切換回美國(guó)地區(qū)的賬號(hào),還是報(bào)這個(gè)錯(cuò),必須到手機(jī)的設(shè)置中心中把其他的Google賬號(hào)移除掉(手機(jī)設(shè)置中心里面有個(gè) “賬號(hào)”的選項(xiàng),可以移除登錄過(guò)的Google賬號(hào),每個(gè)手機(jī)位置可能不太一樣)。
所以最終的結(jié)論是:不是手機(jī)的的問(wèn)題,而是該手機(jī)登錄Google賬號(hào)的問(wèn)題,或者說(shuō)是Google賬號(hào)的歸屬地問(wèn)題,至于哪些地方不能使用,我沒(méi)有足夠的賬號(hào)數(shù)據(jù)支撐。或許咱們能做的是在產(chǎn)品角度,給出相應(yīng)提示,例如更換賬號(hào)啥的。