【Kotlin】Google Play Billing Library 6 でアプリ内課金を実装し直したお話

  • このエントリーをはてなブックマークに追加

毎年恒例のアップデート

Androidアプリでアプリ内課金をするにはGoogle Play Billing Libraryを使う必要があるのですが、これは毎年メジャーアップデートされており、現在はバージョン6まで出ています。

これだけであれば別にいいのですが、過去のバージョンを使っているとアプリのアップデートができないという決まりが…

具体的には

注: 2023 年 8 月 2 日以降、すべての新規アプリでは Billing Library バージョン 5 以降を使用する必要があります。また既存のアプリのアップデートについては、2023 年 11 月 1 日より Billing Library バージョン 5 以降の使用が必須となります

というように、一つ前のバージョンまでは許容されますが、2つ前、つまりバージョン4を使っているアプリはアップデートできなくなります。

事実上2年しか持たないライブラリとなるわけで、毎年対応する必要がある感じですね。
と言うわけで今回はバージョン5からバージョン6への対応をまとめたいと思います。

詳しくは下記のURLから確認していただくのが手っ取り早いかつ確実です。

(外部サイト)Google Play Billing Library 4 または 5 からバージョン 6 に移行する
https://developer.android.com/google/play/billing/migrate-gpblv6?hl=ja

ということで、ここでは実際にこんなケースの場合にどう対応したかまとめたいと思います。

ちなみに以下のような設定というか環境になってます

  • 言語はKotlinで記述
  • 定期購入(いわゆるサブスク)かつ2種類の購入アイテムがあり、購入済みアイテムを切り替えるとただちにアップグレードまたはダウングレードされる
まぁよくある形ですね。
これが消費型アイテムだったりするとまた変わるのかもしれませんが、今回は割愛します。

実際にバージョンアップしてみた

Android Studioでライブラリのアップデートをしてみると案の定エラーがありました。
ただバージョン4→5よりかははるかに少ないです。(SKUが非推奨になったりしていたので)
今回はそこを取り上げてきます。

Purchase.PurchaseState.PENDINGの時のOrderIdがnull

真っ先にエラーが出たのはこの部分です。実はPENDINGの時も処理を入れていたのですが、おそらくバージョン6から

The order ID will be null if the purchase is in the Purchase.PurchaseState.PENDING state and populated if the purchase has transitioned to the Purchase.PurchaseState.PURCHASED state.
(購入が Purchase.PurchaseState.PENDING 状態にある場合、注文 ID は null になり、購入が Purchase.PurchaseState.PURCHASED 状態に移行した場合に設定されます。)

となり、PENDINGにOrderIdは取れなくなりました。
なので、PENDING時はOrderIdを使った処理を書かないようにしましょう。(普通はしないか…)

実はエラーはこれだけで、実はこの状態でも動くのですが、非推奨の指摘が1カ所あったので潰したいと思います。

setReplaceProrationMode とかは非推奨

「これを使え」と言われてすぐに非推奨になる微妙な感じがありますが、非推奨と言われたら直すしかない

これは「定期購入中に違うプランを申し込んだときにどうするか(この場合は直ちにアップグレードまたはダウングレードする)」という処理ですが、今回のバージョンでは2カ所の非推奨ポイントがあります。

簡単に言うと

  • setReplaceProrationMode(Int) は使わないでね
  • BillingFlowParams.ProrationModeも使わないでね
といった感じです。

ドキュメントにもそれぞれ

This method is deprecated.
Use setSubscriptionReplacementMode(int) instead.

https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProrationMode

This @interface is deprecated.
use BillingFlowParams.SubscriptionUpdateParams.ReplacementMode instead.

https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setReplaceProrationMode(int)

と書かれていました。

って事で推奨される記述の変更します。

これでバージョン6に対応するようになりました。やったね!

ちなみに…

今回は影響はなかったですが、実は「BillingClient.BillingResponseCode.SERVICE_TIMEOUT」も非推奨になりました。

This constant is deprecated. See SERVICE_UNAVAILABLE which will be used instead of this code.

[BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE]を代わりに使ってくれと言うことですので、もし使っている方がいたらここも注意しましょう。

最後に

基本的に今はKotlinで記述しており、Javaで書くことは昔のアプリをアップデートする場合以外はほぼ無くなりましたが、ライブラリのアップデートなどを行う事を考えると、JavaのままでいいのかKotlinで書き直した方がいいのか迷ったりします。

まぁ2年の猶予があるので未来の自分に任せる方法もアリですが、他のライブラリの件などもあったりするので、随時修正した方が負担も少ないかなと思ったりします。

(最初からKotlinで書いておけば…)

 

執筆者:松本[ エンジニア ]

関連記事

スマホアプリ

お子さまの安全を守るアプリ「みまもりキッズ」をリリースしました!

お子さまが学校や習い事、遊びに出かけたあと、「ちゃんと安全に過ごしているかな?」と心配になったことはありませんか? 不審者による事件が後を絶たない昨今、お子さまの安全を守るために、常に高い意識を持たれている保護者の方も多いのではないでしょうか。 そんな中、親子の安心をサポートする新しいアプリ「みまもりキッズ」が登場しました! 基本無料で、カンタンに使うことができます。 この記事では、アプリの魅力や使い方を詳しくご紹介します。 目次1 みまもりキッズは何ができるの?1.1 カン […]

WordPress

WordPressの会員限定記事配信プラグイン「Simple Analytics」をリリースしました!

WordPressのイベントカレンダープラグイン「Simple Analytics」をリリースしました! ※この記事は2024年10月現在の情報です。 目次1 Simple Analyticsとは?2 こんなお悩みにおすすめです3 Simple Analyticsで できること3.1 月別・週別アクセス数3.1.1 確認できる項目3.2 ページ別アクセス数3.3 外部サイトからのアクセス数3.4 地域・デバイス別アクセス数3.5 時間帯別アクセス数3.6 ページ毎の直帰率3. […]

WordPress

WordPressの会員限定記事配信プラグイン「Limited Post Maker」をリリースしました!

WordPressのイベントカレンダープラグイン「Limited Post Maker」をリリースしました! ※この記事は2024年10月現在の情報です。 目次1 Limited Post Makerとは?2 どんなシーンで使える?3 Limited Post Makerで できること3.1 オウンドメディア、ブログの記事を会員のみに配信3.2 会員登録・ログインフォーム3.3 会員情報の管理4 使い方について5 システム要件6 導入のお問い合わせについて Limited P […]

株式会社8bit (エイトビット)

東京都目黒区でWebサイト制作、Webシステム開発などを行っております。
コーポレートサイトやWebサービスの企画・提案を得意としており、自社での経験を元にアイデアをカタチにするお手伝いをさせていただいております。

Web制作に関するご相談はお気軽にどうぞ

弊社に制作をご依頼いただく際の費用感をご確認いただける、
見積りシミュレーションをご用意いたしました。