Android 程式內商品訂購開發筆記
第一次做App內購,筆記一下開發的坑
官方Example(https://github.com/android/play-billing-samples)我個人覺得閱讀困難,涉及了MVVM、LiveData、LifeCycle
官方文件(https://developer.android.com/google/play/billing/billing_overview)
- 程式內購,Google也會抽30%的手續費
- 要記得在Google play上設定帳務資訊
- 在AndroidManifest.xml 要加入
<uses-permission android:name="com.android.vending.BILLING" />
4. 加入後,上傳一個Apk 到google play的內部測試群組內
5. Google play console,就可以開始設定你的購買項目
名詞解釋
SKU 在 SDK裡就是商品的意思,有時要設SKU的ID,就是google play console裡的產品ID
Purchase 購買商品訂單,會有OrderId、Token、商品名稱
SKU-TYPE,有兩種 一般商品(in-app)及 訂閱(SUBS)
程式段的流程是
- 先裝 dependencies
implementation 'com.android.billingclient:billing-ktx:2.2.1'
2. 再初始化 BillingClient,及他的Callback PurchasesUpdatedListener,需override【onPurchasesUpdated】
3. 設定 billingClient.startConnection 及他的Callback BillingClientStateListener,需 override【onBillingSetupFinished】、【onBillingServiceDisconnected】
4. 取得 SKU List,使用 billingClient.querySkuDetailsAsync
4–1. Google play有提供四個測試用的SKU(也就是產品ID),值得注意的是,這個不能在【訂閱】商品中測試
List skuList = new ArrayList<>();
skuList.add("android.test.purchased"); //測試訂購流程
skuList.add("android.test.canceled"); //測試訂購中,User取消流程
skuList.add("android.test.refunded"); //測試退訂流程
skuList.add("android.test.item_unavailable"); //測試錯誤商品流程
5. 包裝要購買的項目,使用 BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build();
6. 開始購買,使用 billingClient.launchBillingFlow( context, 上步產生的變數)
7. 購買完成後,onPurchasesUpdated 會被呼叫
8. 可以再確認購買是否完成,拿onPurchasesUpdated時取得的Purchase裡的Token,呼叫AcknowledgePurchaseParams.newBuilder()取得訂單狀況
9. 【android.test.purchased】 被購買後,要是沒有使用掉,就會一直卡在 already owned 的狀態之前,需要使用【consumeAsync】去消化這個Item,方可再訂購
如果要在Android Studio上測試,需要注意有
- Build Type 是Debug版,keystore要跟架上版一樣
- 承上,可以切到 Release版測試
- 記得開 Release版的 Log權限(方法不一,請Google一下)
做訂閱的話比較麻煩,還有退訂、升級、降級等需求。之後有做到再補充吧!