AAAなブログ

あなたの求めているものは、ここにはない!

Play Billing Libraryが超絶かんたんだった件

 

 

Androidアプリのアプリ内課金はどう作ってますか?

え?IABv3APIを使っている? それもう古いみたいです。

 

2017年10月の時点でPlayBillingLibraryってのがアナウンスされてました。

developers-jp.googleblog.com

 

 

 

使ってみたらすごく便利でした。

 

 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版も作っちゃった。

 

 

とってもかんたんなので今後はこれ一本で良さそう。