谷歌內購服務配置教程與避雷指南

谷歌內購服務配置教程與避雷指南

最近客串了一把 android 開發,對接谷歌的內購商品,這個過程真的是特別不順,各種意想不到的坑,一踩一個;

接下來記錄一下谷歌內購服務的完整配置流程,以及在最後測試階段可能遇到的各種問題;在正式開始之前,請確定以下基本條件

  1. 正確上網
  2. 準備 gmail 郵箱
  3. 準備 google play 賬號(地區不要選擇中國大陸,因爲不支持購買)
  4. 授權開啓商家賬號
  5. 準備測試機(谷歌服務四件套得有)

1. 內購服務前置授權配置

進入鏈接,開啓 api accesshttps://play.google.com/apps/publish/#ApiAccessPlace

接着點擊上面的創建服務賬號

接下來再新的窗口頁,點擊創建服務賬號

創建服務賬號有三步,第一步如下,填寫標記的兩項

第二步設置賬號權限,下面勾選結算功能,爲了簡單也可以直接選擇 owner,對所有的權限都有

第三步,服務賬號授權,注意賬號就是我們第一步生成的,輸入 bill 會出現一個候選框,選中即可

上面完成之後,會多一個服務賬號,接下來創建密鑰, json/p12 按需選擇

比如我選擇了 p12 之後,再進入詳情,可以看到如下基本信息,在後續內購訂單的確認中,服務端會用到這個電子郵件地址 + 上面下載的 p12 文件 (請注意,本文的所有配置只是爲了演示,弄完之後就刪除了,所以不要用這些信息來搞事情哦)

上面服務賬號配置完畢之後,回到前面的頁面,點擊完成

點擊完成之後,會自動刷新,出現下面這一行,點擊授予訪問權,在彈出中選中需要授權的應用

在下面的演示中,給的是管理員權限,並選中了 app

如果我們的內購商品是訂閱類型,即支持自動續訂,那麼我們還需要額外的消息推送配置,比如自動續訂之後,回調一下服務器,告訴續訂成功,接下來進入相關配置

下面的操作來自於文檔:https://cloud.google.com/pubsub/docs/quickstart-console

我們在快速入門中,點擊設置項目,選中google play android developer

接下來進入 Pub/Sub 主題頁,即https://console.cloud.google.com/cloudpubsub/topicList來創建主題

創建完畢之後,會自動進入主題詳情頁,拉到最下面,創建訂閱

在訂閱中,填寫必要信息,比如訂閱 id,我這裏選擇的是推送方式,因此需要填寫接收推送的 url

topic 創建完畢之後,需要授予權限

選擇添加成員,[email protected],角色爲Pub/Sub Publisher

保存之後,進入主題,點擊剛纔創建的 billing,進入詳情,找到下面紅框的內容,複製到粘貼板

接下來進入 google play console,找到對應的項目,進入服務和 API

將我們前面的內容,複製到輸入框,點擊保存,也可以發送測試通知,看一下配置的 url 是否能收到內容

在上圖中,上面的終端顯示的就是 google 的回調,因爲我是隨便配置的一個 url,所以不會正常返回 200 狀態,所以會重試(關於這個消息的重試機制,推薦選擇階梯重試方式,避免立即重試)

以上所有的配置,請注意這些都是谷歌內購商品的前提操作,這些搞完之後,還有一些操作等待着你

2. 商品配置

這裏應該是最簡單,坑最少的地方了

接下來進入 google play console https://play.google.com/apps/publish,進行內購商品配置

請注意,應用內商品需要商家賬號,開通流程沒什麼可說的,這裏注意一下,受管理的商品和訂閱是兩種類型

  • 受管理的商品:即消費型商品,一次一次的買
  • 訂閱商品:支持續訂,舉例如視頻的月卡,開通之後,下個月自動扣錢續訂(可以有效地賺錢)

創建收管理的商品,比較簡單,唯一需要注意的是商品 ID,不能與之前的有衝突,而且某個商品即便刪除了,其商品 id 也是依然不能再用的;其次就是需要將狀態改爲有效

訂閱商品創建姿勢和上面基本一致,會多一個結算週期;請注意,訂閱商品創建之後不能刪除(至少我沒有找到刪除的地方)

3. 代碼集成

接下來就是 android 端集成對應的代碼,按照文檔一步一步來,官方文檔在接入代碼這裏,寫得比較清晰,主要的問題會在後面的測試環節

4. 測試

下面介紹下我們在測試這裏踩過的坑

a. 首次提內測包需要過審

在測試之前,先要發包到 alpha 或者 beta 環境

  • 注意:正式包 + 正式簽名 + 版本號

首次發包需要審覈,即便發的是內測包也需要審覈(請注意預留足夠的時間)

b. 簽名問題

請注意,用於測試購買的包,有以下幾點非常重要

  • 測試的 apk 包名,要求與上面提包的包名要求一致
  • 測試的 apk 簽名,要求與上面提包的前面一樣
  • 測試的 apk 版本號,要求大於 or 等於上面提包的版本號

c. 測試機

測試機上,google 的基礎服務要有

  • Google 框架服務
  • 谷歌賬號管理
  • Google Play 服務
  • Google Play 商店

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

上面這個錯誤有很大的迷惑性,直接升級billingclient版本是並沒有什麼用的,出現這個問題,95%的可能性是因爲你的 google 賬號的地區是中國,而中國地區的賬號是不支持購買的

要避免這個問題,就是換個地區不是中國的賬號;或者切換一下賬號位置(但是這個切換的條件,沒有那麼容易)

d. Fatal error during the API action

在於谷歌服務建立連接之後,查詢 Sku 列表的時候,可能報這個問題,返回狀態碼爲 6

出現這個問題,一般是兩個原因

  • google play 商店能否正常打開
  • 手機是否翻牆(簡單來講,就是測試機的網絡歸屬,不要是大陸)

e. SkuType.INAPP 與 SkuType.SUBS

請注意,在查詢 Sku 信息時,傳入的 producetId 與 SkuType 請對應起來,對應錯了就查不到對應的 sku 信息

  • 消耗性商品,查詢 sku 時,選擇SkuType.INAPP
  • 訂閱性商品,查詢 sku 時,選擇SkuType.SUBS

f. 商品確認

對於訂閱性商品,用戶購買了,也付了錢,但是這筆訂單並不能表示完成了,這個時候需要確認

對於訂閱型商品,下面的billingClient.acknowledgePurchase這一步必不可少

對於一次性商品,則是billingClient.consumeAsync,注意他們的區別,不要混用

關於上面兩個確認的截圖中,Listener 內部的實現非必要,一般來講校驗是否購買成功這件事情,推薦放在服務器端來做一個校驗,如果完全信賴客戶端的返回結果,會遇到什麼問題各位小夥伴應該也能想到

g. 無法購買您要買的商品

請確保 google 賬號在測試名單中

e. 此版本的應用未配置爲通過 google play 結算

首先確保,當前測試的包與提交到谷歌控制檯的包簽名 + 包名 + 版本一致

如果上面沒有問題,可以嘗試如下操作

  • 設置->賬號詳情->許可測試
  • 添加測試賬號

IV. 其他

1. 一灰灰 Bloghttps://liuyueyi.github.io/hexblog

一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現 bug 或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

一灰灰 blog

QrCode

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