Google Play支付更新了!
2019的Google I/O大會帶來了很多Android相關的新功能,其中也包括Google Play支付的重大更新。這裡先整理出相關更新點,後續米大師會針對新功能出版本優化接入,已接入米大師Google Play支付渠道的公司業務可先關注變更。
傳送門:
What's New with Google Play Billing (Google I/O'19)
Use the Google Play Billing Library
Google Play Billing Library更新
背景
Google目前提供了兩種整合Google Play支付的方式,AIDL和Google Play Billing Library,其中:
1. AIDL
開發自己封裝Google提供的AIDL介面,支付操作通過AIDL與Google Play Store互動解決。目前米大師採用的是這種方式,特點是:定製度高,可自己實現執行緒和安全特性封裝,當然Google也提供了IabHelper的範例,但同樣存在新功能難更新問題。
2. Google Play Billing Library
子17年6月份開始,Google對外提供了Google Play Billing Library的Maven庫,該庫在原有的AIDL介面上再封裝了一層,對外提供統一的介面,解決了一些大家吐槽的問題。簡直是開發者的福音,然而並沒有。。。
該Library存在的主要問題:
缺失developer payload欄位
這是個透傳欄位,支付時外部傳入,支付完成後在支付票據中帶回。該欄位很重要,通過這個欄位實現訂單關聯等邏輯。
Note:AIDL介面一直有該欄位,但billing library封裝時將該欄位去掉了!這是大家吐槽的地方,也是很多開發不敢升級的理由。鑑於Google在論壇回覆後續將在AIDL中移除這個欄位,米大師也做了相關備案,這裡略去不表。
更新點

回到正題,似乎Google也聽到了廣大開發者的吐槽,在新版的Google Play Billing Library 2.0中,解決了開發者一直關心的問題,終於可以痛快的開始升級了。
上圖是Google Play Billing Library的更新點,一個個細看下。
1. Pending transactions
即暫停交易或延時付款,在東南亞一些國家,本地支付渠道有限,很多地方不支援信用卡支付,即不能實時完成線上交易。使用者通過線下現金支付或銀行轉賬等方式,完成交易。

1、使用者在應用內購買物品
2、Google Play彈框顯示交易碼,提示使用者通過該交易碼去線下商店支付。
3、使用者現在支付完成,Google Play通知支付完成。
API實現
1、呼叫新增介面enablePendingPurchases(),支援pending transaction。
2、在應用初始化呼叫查詢介面BillingClient.queryPurchases()查詢未消耗票據,並在支付回撥onPurchasedUpdated中接收支付票據。
3、處理票據:處理票據的不同支付狀態

2. New purchase surfaces
新版Google play store支援 應用外購買訂閱 。當應用有訂閱物品時,應用下載介面會展示訂閱資訊,並提供購買介面。

待驗證:通過應用外購買訂閱,在進入應用時,應該可以通過BillingClient.queryPurchases()介面查到新支付票據。
3. Acknowledge all purchase
新版Google Play Billing Library要求,開發者在使用者支付完成、併發貨給使用者後,通過acknowledge api儘快告訴google:使用者已經支付成功,並收到支付的物品了。否則: 如果google在三天內沒有收到acknowledge通知,會自動退款給使用者,並撤銷這筆交易! (該規則只適用於支付成功的交易,即票據狀態為: SUCCESS )
傳送確認通知的3中方式:
可消耗物品,呼叫cosumeAsync()介面
不可消耗物品(如訂閱),呼叫acknowledgePurchase()介面,訂閱需要在產生新token時(初次購買、取消再購買等)都呼叫該介面。
也可通過後臺介面傳送: google play developer api:acknowledge
API實現

4. Consistent offers
Google Play Billing Library新增了兩個介面:getOriginalPriceAmountMicros()和getOriginalPrice()。用於購買 折扣物品 時,查詢物品原價的功能。
該功能還在測試,疑問的是:google play的折扣物品具體指的是啥?兌換碼?配了入門價格的訂閱?google也沒明確說明,還是等上線了再來細看。
5. Faster purchase experience
新版Billing Library通過快取優化了支付彈窗的彈出時間,相較於老版彈窗彈出時間,新版Library能縮短一半,有利於提升Google Play支付轉化率。

6. Revamped developer payload
前面在背景介紹中,已經說過老版的Google Play Billing Library移除了developer payload欄位,導致很多開發不敢升級的問題。驚喜的是,在新版Google Play Billing Library 2.0中,這個欄位又開放了!

但是, 設定的透傳欄位的方式跟之前AIDL不一樣了!
老的AIDL介面,是在 支付的時候 傳入payload,支付完成後在票據中返回該payload。
新Billing Library是在 向google傳送Acknowledge通知時 設定payload,後續可通過票據獲取該payload。
按前面理解,新Billing Library只能在支付後,並向用戶發貨後才能設定payload!那如果首次發貨失敗,payload沒設定,後續使用者變化了openid,一樣存在票據關聯錯了openid的問題。
API實現

7. Improved error codes
新Library優化統一了各介面的結果碼,目前沒看到相關文件說明,後續補上。
8. Predictable Release & Support
即google規範了billing library的釋出方式,以及AIDL的過期時間。
後續每年的google的I/O大會,都會發布google play billing library的主版本。
google play billing library將成為官方支援的支付接入方式,老的AIDL方式將被廢棄。
下圖是Google Play Billing Library版本變更時間,以及AIDL方式廢棄時間。

Subscription更新
訂閱正逐漸成為海外收入的主要來源,google針對訂閱帶來的更新有:
1. Subscribe & Install
即前面提到的New purchase surface功能,google play store在下載應用頁提供了購買訂閱的ui。
2. Promotion codes
訂閱支援兌換碼功能,之前google play兌換碼只支援兌換普通物品。

3. Subscription Pause
訂閱暫停。使用者可以在google play store上管理訂閱時,選擇是否暫停當前訂閱。之前老的管理方式,只支援取消訂閱,通過新增暫停訂閱入口,可以讓使用者在取消訂閱前選擇是否暫停。
訂閱暫停期間,使用者不能訪問訂閱。
訂閱暫停快結束時,google會嘗試恢復訂閱,即嘗試扣款。扣款成功,訂閱恢復;扣款失敗,訂閱進入賬戶保留期。
下圖是訂閱暫停並進入賬戶保留期:

下圖是訂閱暫停後恢復:

需要先在google play console開啟訂閱暫停功能選項:

參考: Google Play Billing Subsription
4. Cancel survey reports on Console
在google play console上,新增檢視應用訂閱取消原因報告。路徑:財務報告->訂閱
5. Longer Grace Periods
更長的訂閱寬限期。之前只支援3天和7天的訂閱寬限期,先新增14天和30天的訂閱寬限期。