Androidアプリのアプリ内課金はどう作ってますか?
え?IABv3APIを使っている? それもう古いみたいです。
2017年10月の時点でPlayBillingLibraryってのがアナウンスされてました。
使ってみたらすごく便利でした。
IABv3との違いを挙げてみる
1. 導入が楽チン
build.gradle(moduleレベルの方)に1行書くだけ。
dependencies {
implementation 'com.android.billingclient:billing:1.1'
}
2. パーミッションの追加作業は不要
以前はAndroidManifest.xmlで宣言していたパーミッション。
PlayBillingLibraryではAPKにパーミッションが自動で付加されるため、以下の記述をする必要はなくなりました。
<uses-permission android:name="com.android.vending.BILLING"/>
3. aidlは不要
以前バインドしてたAIDLは必要なくなった。
4. コード量の大幅な削減
以前はGoogleのサンプルコード(なんたらドライブ)のパッケージを丸ごとコピってきたりしてたけど、全く必要なくなった。
5. リストアが楽
非同期にしなくて良いので各ActivityのonResumeでサクッと購入の復元が行える。
6. base64EncodedPublicKeyの埋め込みが不要
Play Consoleからコピってた例の長いアイツ。
あんまり大事なもんをAPKの中に置きたくないよね。
実装はどんな感じ?
自分の場合シングルトンパターンのマネージャークラスにまとめてる。
利用方法はこんなイメージ。
1. MyApplicationクラス(extends Application)でセットアップ
IabManager.shared().setup(context)
ちなみにGC回収されないようにApplicationクラスのメンバ変数にしちゃってます。
2. 各画面のonResumeでリストア
List<String> skuIdList = IabManager.shared().restore()
for (String sku : skuIdList) { /*永続化*/ }
プリファレンスに永続化してます。
3. アイテムのメタデータ取得
IabManager.shared().fetchItem(skuId, fetchItemCallback)
コールバックでアイテム名や価格文字列(¥480とか)を受けるようにしてる。
4. 購入ボタン押下時
IabManager.shared().purchase(activity, skuId, purchaseCallback)
これを呼ぶとOSが購入フローに入ってくれる。
コールバックでsuccess, failureなどを受ける。
IabManagerの中身を作るのもそんなに難しくない。
ほとんどGoogleブログのコピペでOK。
一度作ると他アプリで使い回しできる。
Kotlin版も作っちゃった。
とってもかんたんなので今後はこれ一本で良さそう。