開發(fā)者載荷向來被用于各種不同用途,包括防欺詐以及將購買交易歸因于正確的用戶。在Google Play結(jié)算庫2.2及更高版本中,以前依賴于開發(fā)者載荷的預(yù)期用例現(xiàn)在也在該庫的其他部分獲得完全支持。
因為有了這樣的支持,從Google Play結(jié)算庫2.2版開始,我們已棄用開發(fā)者載荷。與開發(fā)者載荷關(guān)聯(lián)的方法在2.2版中已棄用,且在3.0版中已移除。請注意,對于使用先前版本的庫或AIDL完成的購買交易,應(yīng)用可繼續(xù)檢索開發(fā)者載荷。
如需查看詳細(xì)的變更清單,請參閱Google Play結(jié)算庫2.2版本說明和Google Play結(jié)算庫3.0版本說明。
注意:如果下文內(nèi)容不包括您的用例,請?zhí)峤诲e誤。
購買交易驗證
為確保購買交易的真實性并防止偽造或重播,Google建議您將購買令牌(通過Purchase對象中的getPurchaseToken()方法獲?。┡cGoogle Play Developer API配合使用,驗證購買交易的真實性。如需了解詳情,請參閱打擊欺詐和濫用行為。
購買交易歸因
許多應(yīng)用(特別是游戲)需要確保將購買交易正確歸因于發(fā)起購買交易的游戲內(nèi)角色/頭像或應(yīng)用內(nèi)用戶個人資料。從Google Play結(jié)算庫2.2開始,應(yīng)用在啟動購買對話框時可將經(jīng)過混淆處理的帳號和個人資料標(biāo)識符傳遞給Google,而在應(yīng)用檢索購買交易時也會返回相應(yīng)信息。
在BillingFlowParams中使用setObfuscatedAccountId()和setObfuscatedProfileId()參數(shù),并使用Purchase對象中的getAccountIdentifiers()方法檢索這些參數(shù)。
注意:使用先前版本的庫完成的購買交易使用的是setAccountId()(已重命名為setObfuscatedAccountId()),getAccountIdentifiers()不會返回這些購買交易。
將元數(shù)據(jù)與購買交易相關(guān)聯(lián)
Google建議您將有關(guān)購買交易的元數(shù)據(jù)存儲在您維護的安全后端服務(wù)器上。此購買交易元數(shù)據(jù)應(yīng)與通過Purchase對象中的getPurchaseToken方法獲取的購買令牌相關(guān)聯(lián)。在成功完成購買交易后調(diào)用PurchasesUpdatedListener時將購買令牌和元數(shù)據(jù)傳遞到您的后端,就可以保留這些數(shù)據(jù)。
為確保在購買流程中斷的情況下關(guān)聯(lián)元數(shù)據(jù),Google建議在啟動購買對話框之前將元數(shù)據(jù)存儲在后端服務(wù)器上,并將其與用戶的帳號ID、正在購買的SKU和當(dāng)前時間戳相關(guān)聯(lián)。
如果購買流程在調(diào)用PurchasesUpdatedListener之前中斷,當(dāng)應(yīng)用恢復(fù)并調(diào)用BillingClient.queryPurchases()后,應(yīng)用會立即發(fā)現(xiàn)購買交易。然后,您可以將從Purchase對象的getPurchaseTime()、getSku()和getPurchaseToken()方法檢索到的值發(fā)送到后端服務(wù)器,以查詢元數(shù)據(jù),將元數(shù)據(jù)與購買令牌關(guān)聯(lián),并繼續(xù)處理購買交易。