くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

RevenueCatに入門してみた その1 | ドキュメントを眺める Part1

アプリにサブスクとかの課金機能を導入したくて、
RevenueCatに入門してみたときの備忘録(*´ω`*)

とりあえず、ドキュメントを眺めてみる。
まずは、OverviewSDK Quickstartまで。

RevenueCatとは

アプリ内課金に関するあれこれをよしなにしてくれるSaaS

  • iOS/Android/Stripeなどの課金アイテムを管理できたり、
  • iOS/Android/Webでの各実装を簡単に実装できたり、
  • 顧客管理やダッシュボードで分析もできたりする

月の決済金額が2,500ドルまでは無料で使えて、
それ以上は売上の1%が請求される感じなので、
ほとんどは無料で使えるのですてき

すでに課金機能を使っているアプリにも対応しているっぽい

Setting up RevenueCat

使い始める流れはこんな感じ

  1. RevenueCatのFree アカウントを作る
  2. RevenueCatでProjectを作成する
  3. ProjectにAppを追加する

ProjectAppApp User IDなどの用語が出てくる

  • ProjectはAppのまとまり
  • Appは単一のプラットフォームのアプリ
  • Projectでサブスクのステータスなどを共有
  • 同じプラットフォームのAppでも複数追加できる
  • Project内では同じApp User IDを共有する

その他の設定関連

SDK Quickstart

上記のSetting up RevenueCatの詳細版
大枠はここを見るのが良さそう

Create a RevenueCat Account

アカウント作成について、
請求の管理はProjectの所有者(Owner)のみっぽい

Project and App Configuration

Create a Project

Projectを作る。上記と同じ

Add an App / Platform

アプリを追加する。各プラットフォームで以下が必須。
RevenueCat側でのトランザクション検証に必要。
これが不正だとSDKreceipt is not validエラーになる。

  • iOS
    • In-App Purchase Key
    • Bundle ID
    • Shared Secret
  • Android
    • Package Name
    • Service Credentials

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を直接ユーザに提供するわけではなく、
EntitlementOfferingというのを設定していく。

  • Entitlement(権利/資格)
    • 特定のProductを購入した顧客に与える資格/権利
    • pro/liteみたいな機能のアクセスコントロールに利用できる
  • Offering(提供)
    • 顧客に提供する(paywall/購入画面に表示する)商品のまとまり
    • 選択されたOfferingが表示される感じ
    • RevenueCatだけで、通常とセール時の商品を切り替えるなどできる
  • Package
    • 各ストアの課金アイテム(Product)を同一の商品として扱うためのもの
    • Offeringでは表示するPackageを選択する

イメージ図や細かい話は次のセクションに。

image

Using RevenueCat's Purchases SDK

設定関連はここまで。ここからSDKの使う時の話。

iOS/Android/React Native/Flutter/Unityや、
Capacitor&Ionic/Cordova/macOSCatalyst/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のオブジェクト、アプリ内ではこれを使ってあれこれする

image

なんとなく概要は掴めた気がする(*´ω`*)