課金をAIDLからBilling Libraryに変更した話

以下を参考に実装した。

バージョンとコード

implementation ‘com.android.billingclient:billing:1.2’

感想

AIDLファイルを残したままにすると、デバッグビルドは通るがリリースビルドでのみこけるのに多少ハマったけど、それ以外はすごく使いやすくなっている。developerPayloadがなくなっているので使う前提のサービスだと変更はできないが、developerPayloadはdeprecatedにまではなっていないが、将来的に消えるらしいのでdeveloperPayloadに依存しないアプリを作ったほうが良い。

また、1.1から1.2へのアップデートでBillingFlowParamsのsetSku / setTypeがdeprecatedになっており、setSkuDetailsを使うことが推奨されている。引数として使用されるSkuDetailsのconstructorはjsonSkuDetailsのStringを設定する口しかなくBuilderも存在しないため自力で作ることが困難な作りになっている。GoogleとしてはquerySkuDetailsAsyncでSkuDetailsを取得したものを使用して課金処理を実行してほしいのだろう。SkuDetailsにはストアで設定したタイトルや詳細が取得できるので、これを使用してUIを作り保持しているSkuDetailsを使用してそのまま課金処理に移ってほしいという流れなのだろうと想像している。PlayStoreでの課金アイテムを変更するだけでアプリをアップデートすることなく課金アイテムを変更できるという利点もあるわけだが、タイトルにアプリ名が含まれているしストアで設定した文言がそのまま表示されるわけではないのであまり使い勝手は良くない印象を受けた。アップグレード、ダウングレードもsetOldSkuを設定するだけで対応できるのは非常にありがたい。

サービスで使用する場合はstartConnectionのエラー時に再接続処理を走らせたり、課金アイテムの消費タイミングを変更したり、課金完了時にレシート情報をサーバに送信しサーバ側で有効なレシートかチェックしたりと色々やる必要はあるが、クライアント側の処理は非常に簡潔になりすごくよい。AIDLで消費する前にBillingLibraryを使用したほうがなにかと捗りそうだ。