Android課金（定期購入）をはじめて実装するときに読む記事まとめ

知識ゼロの状態からAndroidの課金（定期購入）を実装することがあり、色々な記事を読み漁った時期がありました。
その中で特に参考になった記事をまとめておきます。
（細かい実装に関するものより、概要や全体像を把握するのに役立った記事が多めです）

# 公式ドキュメント
言わずもがな、必読の記事です:thumbsup:
## [Google Play 請求サービスの概要](https://developer.android.com/google/play/billing/billing_overview?hl=ja)
* Android課金の基礎用語集
* 課金タイプは2つある
    * `1回限りのアイテム`
    * `定期購入`
* サーバーとの連携部分については、REST APIの`Google Play Developer API`や、状態の変化をモニタリングできるサーバープッシュ通知の`リアルタイム デベロッパー通知`などの理解も必要になってくる
* `購入トークン`、`オーダーID`、`SKU`などは実装中にもたびたび出てくる用語なので押さえておく

## [Google Play Billing Library の使用](https://developer.android.com/google/play/billing/billing_library_overview?hl=ja)
* 1 回限りのアイテムと定期購入の両方に共通する実装方法を説明している
    * 依存関係の追加からGoogle Playへの接続、購入の承認や確認など
* 基本的にはこちらの記事を参考に実装しつつ、わからない箇所については他の記事を頼りながら実装していくのが良いかと

## [定期購入固有の機能の追加](https://developer.android.com/google/play/billing/billing_subscriptions?hl=ja)
* 定期購入には固有の設定オプションがあり、そのそれぞれについて説明している
    * `請求対象期間`、`猶予期間`、`無料試用期間`など
        *  [Google Play 請求サービスの概要](https://developer.android.com/google/play/billing/billing_overview?hl=ja) にも説明あり

# 全体像の把握に役立つ記事
はじめに全体像を掴んでおけると良さそう:ok_hand:
## [簡単なGoogle Play Billing Libraryの課金の流れ - Qiita](https://qiita.com/takahirom/items/4d597b00f500efb3dc7f)
* わかりやすい図があるので、課金処理全体の流れを把握するのにおすすめ

> 基本的にはBillingClientに対して以下をするだけです。
- 接続する。
- 課金アイテムの情報を取得する。
- アイテムの情報を渡して課金するだけ。

## [詳解定期購入 - Speaker Deck](https://speakerdeck.com/ymnder/xiang-jie-ding-qi-gou-ru?slide=3)
* 実装以外の部分についても書かれているので、広い意味でAndroid課金について理解することができる
    * 課金導入の経緯や、導入によって得られた効果について
    * 検証方法について
    * etc...
* テスト購入のトラブルシューティング（p93）に書かれている内容はハマりやすいので注意
    * 「アカウント切り替えても最初にPlayStoreに登録したアカウントでしか購入できない」

# Google Play Billing Library について知るのに役立つ記事
毎年新しいメジャーバージョンが発表され、そのたびに様々な変更が入るので、Google Play Billing Library の動向については知っておく必要があります:rolling_eyes:

## [DroidKaigi 2020 Re:ゼロから始める Play Billing Library - Speaker Deck](https://speakerdeck.com/syarihu/re-zero-starting-uses-of-play-billing-library)
* AIDL -> Google Play Billing Library へ
* Google I/O 2019で発表された Google Play Billing Library バージョン2.0では「購入の承認」と「保留中のトランザクションのサポート」が必須となったが、それらについての説明がされている
* 発表概要がすでにわかりやすい
    * [Re:ゼロから始めるPlay Billing Library | DroidKaigi 2020](https://droidkaigi.jp/2020/timetable/156623)

> またPlay Billing Libraryは今後、毎年開催されるGoogle I/Oにて新しいメジャーバージョンがリリースされます。
（中略）
現在Google Playの課金機能をつかってアプリ内課金を提供しているアプリは今後、2年に1回は必ずPlay Billing Libraryのアップデートを行う必要があります。

## [【2020年版】Play Commerceアップデート対応 | Medium](https://medium.com/@syarihu/2020%E5%B9%B4%E7%89%88-play-commerce%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E5%AF%BE%E5%BF%9C-682716d240fd)
* Google Play Billing Library バージョン3.0 のアップデート内容に関する説明がされている
    * 「ライブラリ自体には大きな新機能などのアップデートはなく、Google Playの定期購入に関連するいくつかの発表があった」
        * `Account Hold`
        * `Restore`
    * 2020年11月までに対応する必要がある

# サーバー側の処理について知るのに役立つ記事
課金処理の一部をサーバー側にまかせている場合に読む記事です。
サーバー側でやっていることを理解しておくと、サーバーサイドエンジニアとのやりとりがスムーズになったり、アプリ側の実装がしやすくなるというメリットがあります:v:

## [自動購読課金について【Android編】 | サイバーエージェント 公式エンジニアブログ](https://ameblo.jp/principia-ca/entry-12071725733.html)
* サイバーエージェント社の課金まわりの設計がわかりやすい図にまとまっている
    * アプリ ー GooglePlay ー サーバ ー GooglePlayAPI 間の流れがよくわかる
    * サーバー側では主に、「署名の検証」「レシートの検証」を行っている

## [iOS/Androidアプリ内課金の不正なレシートによる有料会員登録を防ぐ - pixiv inside archive](https://devpixiv.hatenablog.com/entry/2014/12/09/111310)
* pixiv社の課金まわりの設計がわかりやすい図にまとまっている
* 不正なレシートに対してどう対応するかにも言及している
    * Androidアプリ単体で防ぐのは難しく、サーバー側で対策を講じる必要がある