Skip to main content

RevenueCat

Overview

RevenueCatはアプリのサブスクリプション管理と課金のバックエンドを提供するプラットフォーム。
iOS、Android、Webアプリ向けに、アプリ内課金(IAP)や定期購読の処理を簡単にするためのツールを提供しています。

アプリ内課金の仕組み

アプリ内課金ではレシートという用語が出てくる。
これはアプリ内課金を行なったときに App/Play Store が発行してくれるデータで、購入した内容や日時、サブスクリプションの場合は期限が切れる日時などが入っており、アプリ側で取得できる。
通常は、base64エンコードした文字列にしてサーバーとやり取りする。

tip

このレシートが改ざんされていないかどうかは Apple/Google に問い合わせるしかなく、問い合わせにはSecretKey的なものを使用するのでセキュリティの観点から通常はバックエンドで行う。

上記を踏まえた上で、アプリ内課金を実装する場合の一般的な処理の流れは以下のようになる。

  1. アプリ側で決済処理を行う
  2. アプリ側で取得できるレシートをバックエンドに送る
  3. バックエンドで受け取ったレシートをApple/Googleに問い合わせてレシートを検証する
  4. レシートが正しい場合はレシート情報を元に、サブスク加入状態にする
info

RevenueCatは、上述のバックエンドを提供してくれるためサーバーのコード無しでクロスプラットフォームのアプリ内課金を管理できる。
さらに、アプリ側の複雑な決済処理やRevenueCatバックエンドとのやりとりは、公式が提供しているSDKを使えばまるっと行なってくれます。

RevenueCatの主な機能

  1. サブスクリプション管理(以下のプラットフォームの課金を統合的に管理) Apple App Store(iOS)
    Google Play(Android)
    Stripe(Web)
  2. バックエンドの構築不要
    独自のサーバーを用意することなく、アプリ内課金の実装が可能。
    REST APIやSDK(iOS, Android, Flutter, React Native, Unityなど)が提供されている。
  3. 分析とレポート
    ユーザーの課金状況(アクティブサブスクライバー、解約率、MRRなど)をダッシュボードで可視化。
  4. クロスプラットフォームのサポート
    例えばiOSで購入したサブスクリプションをAndroidでも利用できるようにするなど、プラットフォームをまたいだサブスクの管理ができる。
  5. リモートで価格やオファーを管理 アプリを更新せずにプランや価格設定の変更が可能。
  6. Webhook・API連携 StripeやMixpanel、Firebaseなどの他の分析・マーケティングツールとも統合可能。

RevenueCatを使うメリット

  • アプリ開発者は課金まわりの実装を最小限にできる
  • ストアの課金仕様変更に自分で対応しなくて済む
  • 解約分析やリテンション改善に役立つデータが取れる
  • WebでもIAPと統一管理ができる

検討する場合

  • サブスクリプション型のアプリを作っている開発者
  • 課金システムを簡単に導入したいモバイルアプリ開発者
  • 解約率の分析や改善をしたいプロダクトオーナー

競合サービス

  • Google Play Billing & Apple StoreKit(直接実装する方法)
  • Superwall(ノーコードのペイウォール)
  • Adapty(RevenueCatの競合で、UIのカスタマイズが柔軟)

RevenueCatの概念

RevenueCatは、アプリ内課金やサブスクリプション管理を簡単にするための強力なツール。
FlutterでRevenueCatを使ってサブスクリプションを実装する際、特に難しいのが以下の4つの概念。

  • Products (商品)
  • Packages (パッケージ)
  • Entitlements (エンタイトルメント)
  • Offerings (オファリング)

Product

Productは実際にユーザーが購入するアイテム。
例:1ヶ月間のプレミアム会員権や広告を消すための1回限りの購入アイテムが該当する。

Package

Packageは同じ内容の商品を異なるプラットフォームや異なる価格プランで提供する場合に使う。
例えば、App StoreやGoogle Playで同じ商品を提供する際、価格や期間が異なる場合。これらをまとめて1つのエンタイトルメントに紐づけることができる。

  • Monthly Premium (App Store): iOS向けの1ヶ月プレミアム
  • Monthly Premium (Google Play): Android向けの1ヶ月プレミアム

Entitlements(権利)

Entitlementは、サブスクリプションを購入したユーザーが得られる権利や機能のこと。
ユーザーが特定のサブスクリプションを購入した後に、アプリ内で何ができるかを制御する。

  • Premium Access
    • プレミアムユーザー向けに特別なコンテンツや機能にアクセスできる権利
  • Ads Free Experience
    • 広告なしでアプリを利用できる権利

Offerings(「提供」「申し出」「募集)

Offeringは、異なる時期に異なる商品を提供する際に使います。例えば、通常時は通常価格で商品を販売し、キャンペーン期間中には割引価格で提供する場合、これをOfferingで管理する。

  • Regular Offering
    • 通常価格のプレミアムサブスクリプション
  • Campaign Offering
    • 期間限定の割引サブスクリプション

RevenueCatレシート検証

Google Play の purchaseToken / orderId と RevenueCat

Android の課金では purchaseTokenorderId という2つの識別子が存在する。

項目purchaseTokenorderId
役割購入状態を識別するトークン決済トランザクションID
主な用途サブスクリプション状態確認返金・会計・サポート
サブスク更新時基本的に同じトークンを使用更新ごとに新しいIDが発行

purchaseToken

purchaseToken は Google Play Billing が購入時に発行するトークンで、 Google Play Developer API でサブスクリプション状態を確認する際のキーとして利用される。

GET /androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{purchaseToken}
info

通常、Google Play を直接実装する場合はバックエンドでこの purchaseToken を保存する必要がある。

RevenueCat を利用する場合

RevenueCat を利用している場合、アプリは purchaseToken を直接管理する必要はない。

購入フローは次のようになる。

User Purchase

Google Play Billing

purchaseToken 発行

RevenueCat SDK が取得

RevenueCat サーバーへ送信

RevenueCat が保存

Google Play Developer API で検証

つまり

  • purchaseToken の保存
  • Google Play API への検証
  • サブスクリプション状態の管理

RevenueCat が内部で処理してくれる。

orderId

orderId は Google Play の注文IDで、決済トランザクションごとに発行される。

GPA.1234-5678-9012-34567

サブスクリプションでは更新ごとに suffix が増えていく。

GPA.1234-5678-9012-34567..0
GPA.1234-5678-9012-34567..1
GPA.1234-5678-9012-34567..2

主に以下の用途で利用される。

  • 返金処理
  • カスタマーサポート
  • 会計処理

まとめ

RevenueCat を利用する場合の役割分担は次のようになる。

管理対象担当
purchaseToken 保存RevenueCat
サブスク状態検証RevenueCat
Google Play API 呼び出しRevenueCat
アプリ側の権限制御Entitlement

Resource