revenuecat-identify-user について
アプリの認証システムとRevenueCatのユーザーIDを同期する開発スキルです。対応プラットフォームでのログイン、ログアウト、アカウント切り替え、匿名購入の扱いを案内します。
主な機能
- 01React Native、Flutter、KMP、Android、iOSを判別
- 02認証状態変更後のlogInを案内
- 03安全なログアウトとアカウント切り替え
- 04匿名購入の紐付けと検証を説明
活用シーン
- 01ログインユーザーをRevenueCatの購読者に対応付け
- 02サインアウトやアカウント切り替えの処理
- 03匿名購入がログイン後も紐付くことの検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ revenuecat/ ai-toolkit --skill revenuecat-identify-userインストール後、Claude Code で/revenuecat-identify-userを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
platforms/android.mdflutter.mdios.mdkmp.mdreact-native.md詳細
revenuecat-identify-user:RevenueCat を認証システムに接続する
ユーザーが RevenueCat SDK で logIn / logOut を呼び出し、アプリのユーザーと RevenueCat のサブスクライバーを対応させたい場合に、このスキルを使用します。このスキルでは、SDK の初期セットアップ(integrate-revenuecat を参照)、購入(revenuecat-purchase-flow)、またはアクセス制御(revenuecat-entitlements-gate)は扱いません。
1. プラットフォームの検出
作業ディレクトリを調べ、上から順に最初に一致したものを選びます。
- React Native:
package.jsonにreact-native-purchasesのエントリーがある、または依存関係としてreact-nativeが含まれている →platforms/react-native.mdを読みます。expoも依存関係に含まれている場合は、Expo プロジェクトであることを記録します。 - Flutter:プロジェクトのルートに
pubspec.yamlがある →platforms/flutter.mdを読みます。 - Kotlin Multiplatform:
build.gradle.ktsにkotlin { … }のマルチプラットフォームソースセットブロックが含まれている、またはcom.revenuecat.purchases:purchases-kmp*に依存している →platforms/kmp.mdを読みます。 - Android(ネイティブ):
build.gradle(.kts)でcom.android.applicationが適用されている(KMP ではない)→platforms/android.mdを読みます。 - iOS(ネイティブ):プロジェクトのルートに
Package.swift、*.xcodeproj、*.xcworkspace、またはPodfileがある →platforms/ios.mdを読みます。
複数の条件に一致する場合(たとえば、Flutter プロジェクト内に ios/ フォルダーがある場合)は、ビルドを管理する最も外側のプロジェクトを選びます。それでも判断できない場合は、設定するプラットフォームをユーザーに確認してください。
2. 共通の概念(すべてのプラットフォーム)
- デフォルトでは匿名です。
logInが呼び出される前に、RevenueCat は$RCAnonymousID:を接頭辞とする安定した匿名 ID を割り当てます。匿名状態で行われた購入は、初めてlogInに実際のappUserIDを指定して呼び出したときに、その ID にエイリアスとして紐付けられるため、サインイン前にユーザーが購入しても購入が失われるリスクはありません。 - メールアドレス、電話番号、連番のデータベース ID を
appUserIDに使用しないでください。 バックエンドのユーザー UUID やユーザー ID のハッシュなど、安定した不透明な値を使用してください。RevenueCat は ID を不透明な文字列として扱うため、後から変更するのは困難です。 - 認証システムでセッションが確認された後に
logInを呼び出してください。 推測でlogInを呼び出さないでください。一般的な呼び出しタイミングは、認証状態のリスナーがサインイン済みユーザーを検知したときです。logInは、ユーザーの現在のCustomerInfoと、このユーザーが RevenueCat にとって新規顧客かどうかを示すcreated: Booleanの両方を返します。 logOutは識別済みユーザーに対してのみ機能します。 SDK が匿名 ID の状態でlogOutを呼び出すと、すべての SDK でエラー(PurchasesErrorCode.LogOutWithAnonymousUserErrorまたは iOS の同等のエラー)が発生します。独自の「サインイン済み」フラグで呼び出しを制御してください。- 購入の復元はログインではありません。
restorePurchases()はストアから現在のレシートを取得し、現在の RevenueCat ユーザーに紐付けます。ID は切り替わりません。ユーザーが新しいデバイスでサインインする場合は、まずlogIn(appUserID)を呼び出し、現在のストアアカウントからレシートを取得する必要がある場合にのみ、その後restorePurchases()を呼び出してください。 - アカウントを切り替える場合は、
logOutの後にlogInを呼び出します。 アプリでユーザーがサインアウトし、別のユーザーとして再度サインインできる場合は、まずlogOut()を呼び出して完了を待ち、その後logIn(newId)を呼び出してください。2 つの ID が互いにエイリアスとして紐付けられるため、2 回目のlogInを呼び出して直接切り替えようとしないでください。 - 最初に設定してください。
logIn/logOutを呼び出す前に、Purchases.configure(…)が実行されている必要があります。実行されていない場合、SDK はエラーをスローします。
3. 実装
検出結果に一致するプラットフォームのファイルを読みます。
platforms/ios.mdplatforms/android.mdplatforms/kmp.mdplatforms/flutter.mdplatforms/react-native.md
各プラットフォームのファイルでは、一般的な認証状態オブザーバーに logIn と logOut の呼び出しを組み込む方法を説明しています。
4. 検証
次の条件を満たすまでは、ID の同期が機能すると判断しないでください。
- RevenueCat ダッシュボードのテストユーザーの顧客ページに、
$RCAnonymousID:のプレースホルダーではなく、バックエンドで使用しているものと同じ appUserID が表示されていること。 - サインアウトすると ID が新しい匿名ユーザーのものに戻り、別のアカウントでサインインすると、そのアカウントの購入情報に切り替わること(新しいアカウントの場合は何も表示されないこと)。
- 匿名の状態で購入した後に
logInを呼び出しても、その購入がサインインしたユーザーに引き継がれていること(失われず、エイリアスとして紐付けられていること)。 - すでに匿名の状態で
logOutを呼び出した場合に、クラッシュや何も通知しない成功として扱われず、適切に処理されること。
コメント
Markdown 対応