アプリにサブスクとかの課金機能を導入したくて、
RevenueCatに入門してみたときの備忘録(*´ω`*)
とりあえず、ドキュメントを眺めてみる。
まずは、OverviewとSDK Quickstartまで。
RevenueCatとは
アプリ内課金に関するあれこれをよしなにしてくれるSaaS
月の決済金額が2,500ドルまでは無料で使えて、
それ以上は売上の1%が請求される感じなので、
ほとんどは無料で使えるのですてき
- In-App Subscriptions Made Easy – RevenueCat
- Overview | In-App Subscriptions Made Easy – RevenueCat
- Adding subscriptions to your app | In-App Subscriptions Made Easy – RevenueCat
すでに課金機能を使っているアプリにも対応しているっぽい
Setting up RevenueCat
使い始める流れはこんな感じ
- RevenueCatのFree アカウントを作る
- RevenueCatでProjectを作成する
- ProjectにAppを追加する
Project
やApp
、App User ID
などの用語が出てくる
- ProjectはAppのまとまり
- Appは単一のプラットフォームのアプリ
- Projectでサブスクのステータスなどを共有
- 同じプラットフォームのAppでも複数追加できる
- Project内では同じApp User IDを共有する
その他の設定関連
- Projectへのメンバー招待/権限管理
- 2段階認証などのRevenueCatアカウントのセキュリティ
- 支払いに関する設定
- APIキーや認証関連
SDK Quickstart
上記のSetting up RevenueCat
の詳細版
大枠はここを見るのが良さそう
Create a RevenueCat Account
アカウント作成について、
請求の管理はProjectの所有者(Owner)のみっぽい
Project and App Configuration
Create a Project
Projectを作る。上記と同じ
Add an App / Platform
アプリを追加する。各プラットフォームで以下が必須。
RevenueCat側でのトランザクション検証に必要。
これが不正だとSDKでreceipt is not valid
エラーになる。
HERE'S A TIP!
Platform Server Notificationsを有効にするのがいいっぽい。
任意だけど、webhooksの呼び出しやサブスクの更新が短縮される。
STAGING VS. PRODUCTION APPS AND USERS
RevenueCat側でステージングと本番環境の違いはないっぽい。
ユーザがsandboxかproductionかで判断する。
ステージングと本番でBundle ID(iOS)やPackage Name(Android)が異なる場合は、
別のRevenueCat Projectを作成して、設定をミラーリングできるっぽい。
また、環境で判断もしないので、同じユーザが、
sandbox購入とproduction購入が同時にできる。
Service Credentials
RevenueCatが各プラットフォームとやり取りしてくれるので、
Service Credentials(サービス資格情報)が必要。
各プラットフォームのリンクは以下。
Androidの場合は、反映までに最大36時間かかる場合もあるらしい。
Product Configuration
Product
(商品/現物) = 各プラットフォームの課金アイテム
Store Setup
まずは、各プラットフォーム/ストアで課金アイテムを登録する。
iOSの場合は、テスト前に以下を完了しておく必要がある。
- 「Paid Applications Agreement」に署名
- 「Agreements, Tax, and Banking」の口座や税の情報を入力
WANT TO SKIP THE STORE SETUP WHILE TESTING?
開発/テスト時に、ストアの設定を省略したい場合には、
StoreKit Configuration files
を代わりに使うとできるっぽい。
その場合、Xcode経由で最低限のセットアップが必要。
Configure Products and Entitlements in RevenueCat
各ストアで登録した課金アイテムを、RevenueCat側にProduct
として登録していく。
そのままProductを直接ユーザに提供するわけではなく、
Entitlement
とOffering
というのを設定していく。
Entitlement
(権利/資格)- 特定のProductを購入した顧客に与える資格/権利
- pro/liteみたいな機能のアクセスコントロールに利用できる
Offering
(提供)- 顧客に提供する(paywall/購入画面に表示する)商品のまとまり
- 選択されたOfferingが表示される感じ
- RevenueCatだけで、通常とセール時の商品を切り替えるなどできる
Package
- 各ストアの課金アイテム(Product)を同一の商品として扱うためのもの
- Offeringでは表示するPackageを選択する
イメージ図や細かい話は次のセクションに。
Using RevenueCat's Purchases SDK
設定関連はここまで。ここからSDKの使う時の話。
iOS/Android/React Native/Flutter/Unityや、
Capacitor&Ionic/Cordova/macOS&Catalyst/Webなんかもある
Initialize and Configure the SDK
SDKの初期化にはAPI Keyが必要。紹介されてる関連ドキュメントは以下
CONFIGURING PURCHASES WITH USER IDS
app_user_id
を設定する.logIn()
を使うといいらしい
Fetch and Display Available Products
Offeringに応じた有効なProject(商品)の取得。
自動的に読み込まれるので、購入画面のときにはすでに読み込み完了してるらしい。
Make a Purchase
商品の購入。検証など各ストアのトランザクションを処理してくれるらしい。
購入すると、Entitlements
が有効であるかをチェックできる。
Check Subscription Status
購入してるサブスクの状態確認。
Entitlements
が有効であるかをチェックできる。
Purchases
(購入履歴?)はCustomerInfo
が更新されるたび、
自動的にキャッシュされるので高速に動作するっぽい。
有効/向こうだけではなく、「自動更新かどうか」
「クレジットカードに問題があるか」なども確認できるっぽい。
Restore Purchases
購入した課金アイテムの復元。iOSでは必須。
アプリの再インストールや携帯の買い替えでも、
復元する必要があるときの機能。
2つの異なるApp User IDが同じストアアカウントからの購入を復元する場合、
RevenueCatでは2つのApp User ID間でエイリアスを作成し、
今後は同じユーザとして扱う可能性があるっぽい。
細かい設定などは、以下を参照
Reacting to Subscription Status Changes
サブスク状態の変更への対応。
各ストアからの情報をRevenueCatが受け取って統合してくれていて、
CustomerInfo
の変更を受け取るメソッドがある。
Purchases.addPurchaserInfoUpdateListener((purchaserInfo) => { // handle any changes to purchaserInfo });
更新されたCustomerInfo
を受け取るのは、以下のメソッドを実行したとき。
getCustomerInfo()
purchase(package:)
purchase(product:)
restorePurchases()
CustomerInfo
の更新は、RevenueCatからはアプリにプッシュされず、
メソッドが呼ばれたときにのみ発生する。
(つまり、管理画面や別端末からの更新は即時反映されない?)
ここまでのまとめ
とりあえず、OverviewとSDK Quickstartまで。
登場した用語とかはこんな感じ。
Project
- Projectでサブスクのステータスなどを共有
- 以下のものを共通で管理する単位
App
- 単一のプラットフォームのアプリ
- 同じプラットフォームのAppでも複数追加できる
App User Id
(顧客ID)- RevenueCat内での顧客ID
- Project内では同じApp User IDを共有する
Entitlement
(権利/資格)- 特定のProductを購入した顧客に与える資格/権利
- pro/liteみたいな機能のアクセスコントロールに利用できる
Offering
(提供)- 顧客に提供する(paywall/購入画面に表示する)商品のまとまり
- 選択されたOfferingが表示される感じ
- RevenueCatだけで、通常とセール時の商品を切り替えるなどできる
Package
- 各ストアの課金アイテム(Product)を同一の商品として扱うためのもの
- Offeringでは表示するPackageを選択する
CustomerInfo
(顧客情報)- SDKのオブジェクト、アプリ内ではこれを使ってあれこれする
なんとなく概要は掴めた気がする(*´ω`*)