この本について
こんにちは、@_mogamingです。この本では、サブスクリプション(アプリ内課金)の実装をサポートしてくれるRevenueCatというサービスとFirebaseを活用して、Flutterアプリにサブスクリプションを導入する方法をコードを交えて解説します。
セットアップを含めた実装方法から知りたい方は実装編まで飛ばしてしまっても問題ありません。
サブスク導入の選択肢
Flutterアプリにサブスクリプションを導入したくなった場合、選択肢は大きく分けて2種類あります。
- アプリ内課金
- 外部の決済サービスを利用した課金
以下にそれぞれを詳しく見ていきます。
アプリ内課金
AppleやGoogleが提供している課金方式です。In-app Purchase/In-app Billingなどと言われたりします。特徴は下記です。
ユーザー目線での特徴は
- 課金の体験がスムーズ
- クレジットカード情報をサービス側に渡す必要がない
- サービスによっては料金が少し高い
です。
逆に、サービス提供者・開発者側としては
- 決済手数料がアプリ外課金に比べて高い(30%, Appleは2021年から小規模事業者は15%になります)
- Apple/Googleとの連携の実装が必要になる(特にバックエンド)
- カード管理の実装が不要
- 正しく実装できていれば必ず審査が通る
あたりだと思います。バックエンドの実装が複雑になりがちですが、クライアント側は基本的には Flutter公式が提供しているpackage を使って購入処理を実装すればよいですが、各OSの課金処理への理解が少なからず必要になってきます。特に、クライアント側で決済が完了してからバックエンドにレシートを渡して処理を行ってもらうため、クライアント側のトランザクション管理を理解しなければ課金したのにも関わらず有料機能が使えないなんてことが発生しえます。
外部の決済サービスを利用した課金
Stripeなどのアプリ内課金ではない決済サービスを利用して、サービスにサブスクリプション導入する方式です。こちらは基本的にAppleの審査との戦いになります。App Store Reviewガイドラインの3.1.3に該当する場合のみ、外部決済サービスの利用が許可されています。こちらに該当しない場合は基本的には審査は通らないものと思ったほうが良いでしょう。ちなみに、Googleも審査を厳しくするような声明を出しています。
ユーザー目線の特徴は
- クレジットカード情報などの決済情報の入力が必要になり手間
- サービスによってはアプリ内課金よりも安い
です。
逆に、サービス提供者・開発者側としては
- 決済手数料が安い(Stripeの場合は3.6%)
- 決済サービスとの連携のみ実装すれば良い
- カード管理(追加、更新、削除など)の実装が必要(これは地味に大変)
- Stripeの場合、WebのCustomer portalに飛ばせば、実装は不要にできる場合がある
- 審査が通らない場合がある
という特徴があります。クライアント・バックエンドともにアプリ内課金よりも少し実装量が多くなる場合がありますが、決済手数料が非常に低く利益が出やすいのが最大の魅力でしょう。
どちらを選択するのか
課金すると機能が開放されるような一般的なサブスクリプションでは、外部の決済サービスを利用すると基本的には審査に通らず、リリースすることができません。 よって、アプリ内課金を選択することになるでしょう。
しかし、アプリ内課金を実装するには各Platformの理解が必須です。バックエンド側の実装はSDKが提供されているわけでもなく、APIや決済処理周りの仕様をApple/Googleと2重に理解する必要が出てきます。クライアント側もpackageがWrapしてくれてはいるものの、適切にエラーハンドリングをするためには各Platformごとの分岐が必要になります。同じような実装をするにも、アプリ内課金は外部決済サービスを利用する場合に比べて、2倍くらい理解しなければならないことがあるイメージです。
そこで、私がおすすめしたいのが RevenueCat というサービスです。