BillingLibraryをv1 -> v2にアップデートする

v1で作ったけど、v2が出たのでGistをアップデートした。

以下変更済みのコード。

PendingPurchaseを有効にする必要がある

enablePendingPurchases() をBuilderで叩かないといけない。絶対叩かないといけないのであれば最初からtrueにしておけばよいのかと思うが、何も考えずにUpdateされてPendingPurchaseに勝手に変更されたって言われないようにするためにやってるんだと思う。


To enable pending purchases, call enablePendingPurchases() when initializing your app. Note that if you do not call enablePendingPurchases(), you cannot instantiate the Google Play Billing Library.

消費、もしくは返答をしなければならない

onPurchasesUpdatedで渡ってきたPurchaseにはisAcknowledgedというパラメータが追加されている。渡ってきたPurchaseが問題ないことが確認できたら、消費アイテムであればconsumeするしSubscription課金であればacknowledgeを返答して課金を有効にする。isAcknowledgedを有効にするタイミングで課金されたアイテムの状態を有効にするのがよい。

developerPayloadがつけれる

消費、もしくは返答時にdeveloperPayloadをつけれる様になっている。返答時につけたdeveloperPayloadはレシートの中に含まれるようになり、以降でレシート履歴を取得したり有効なレシートを取得した際にdeveloperPayloadが取れるようになる。課金と一緒にdeveloperPayloadをつけることはできず、課金が終わってからの返答でdeveloperPayloadをつけるというのがAIDLでの課金とまだ違う。これは、GooglePlayStoreからの課金が今後有効になった場合、課金時にDeveloperPayloadをつけることができない(課金を行うのはPlayStoreアプリなので情報がない)ので、処理を共通化させるために作った仕組みなのではないかと推測している。

Responseが変更された

v1はCodeのみが返答されていたけれど、v2からBillingResultが返答されるようになった。ResponseCodeの参照位置も変わっているので変更。Responseが変更されたことで、合わせてListenerも変更された。同じ様に変えればいい

雑感

特に難しいことはない。enablePendingPurchases() を行うことと、返答されたレシートをちゃんと消費すれば難しいことはない。検証作業は本来サーバ側で行うべきなようだが、クライアント側でも検証する方法が公式から出ているので、興味がある人は見てみるといいと思う。