claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🔐revenuecat-identify-user

プラグイン
rc

説明

RevenueCatのIDをアプリの認証システムに紐付けます。 次のような場合に使用: ユーザーがRevenueCatへのログイン、RevenueCatとのユーザー同期、ログイン時のRevenueCatユーザーの切り替え、RevenueCatからのログアウト、匿名ユーザーから識別済みユーザーへの移行、`appUserID`の設定、またはiOS・Android・Kotlin Multiplatform・Flutter・React Nativeにおけるアカウント切り替えの処理を求めている場合。

原文を表示

Tie RevenueCat identity to your app's auth system. Use when the user asks to log in to RevenueCat, sync a user with RevenueCat, switch RevenueCat user on login, log out of RevenueCat, move a user from anonymous to identified, set appUserID, or handle account switching on iOS, Android, Kotlin Multiplatform, Flutter, or React Native.

ユースケース

  • ユーザーがRevenueCatへログインするとき
  • RevenueCatとのユーザー同期が必要なとき
  • ログイン時にRevenueCatユーザーを切り替えるとき
  • RevenueCatからログアウトするとき
  • 匿名ユーザーを識別済みユーザーに移行するとき

本文(日本語訳)

revenuecat-identify-user: RevenueCatをあなたの認証システムと連携する

次のような場合に使用: ユーザーがRevenueCat SDKのlogIn / logOutを呼び出し、アプリのユーザーとRevenueCatのサブスクライバーを紐付けたい場合。

このスキルは、SDKの初期セットアップ(integrate-revenuecatを参照)、購入処理(revenuecat-purchase-flow)、アクセス制御(revenuecat-entitlements-gate)はカバーしません。


1. プラットフォームの検出

作業ディレクトリを調べ、以下の順番で最初に一致したものを採用してください:

  1. React Native: package.jsonreact-native-purchasesのエントリがある、またはreact-nativeが依存関係に含まれている → platforms/react-native.mdを読む。expoも依存関係にある場合は、Expoプロジェクトとして記録する。
  2. Flutter: プロジェクトルートにpubspec.yamlが存在する → platforms/flutter.mdを読む。
  3. Kotlin Multiplatform: build.gradle.ktskotlin { … }のマルチプラットフォームソースセットブロックが含まれる、またはcom.revenuecat.purchases:purchases-kmp*に依存している → platforms/kmp.mdを読む。
  4. Android(ネイティブ): build.gradle(.kts)com.android.applicationを適用している(かつKMPではない)→ platforms/android.mdを読む。
  5. iOS(ネイティブ): プロジェクトルートにPackage.swift*.xcodeproj*.xcworkspace、またはPodfileがある → platforms/ios.mdを読む。

複数一致する場合(例: Flutterプロジェクト内にios/フォルダがある場合)は、ビルドを管理している最外側のプロジェクトを選択してください。 それでも判断できない場合は、ユーザーにどのプラットフォームを設定したいか確認してください。


2. 共通の概念(全プラットフォーム共通)

  • デフォルトは匿名。 logInを呼び出す前は、RevenueCatが$RCAnonymousID:というプレフィックス付きの安定した匿名IDを割り当てます。 匿名状態で行われた購入は、最初にlogInが呼び出された際に実際のappUserIDにエイリアスされるため、サインイン前に購入しても「購入が失われる」リスクはありません。

  • メールアドレス・電話番号・連番のデータベースIDをappUserIDに使用しないこと。 バックエンドのユーザーUUIDや、ユーザーIDのハッシュ値など、安定した不透明な値を使用してください。 RevenueCatはIDを不透明な文字列として扱うため、後から変更することは困難です。

  • logInは認証システムがセッションを確認した後に呼び出すこと。 投機的にlogInを呼び出してはいけません。 典型的なトリガーは、サインイン済みユーザーに対して認証状態リスナーが発火したタイミングです。 logInは、ユーザーの現在のCustomerInfoと、そのユーザーが新規のRevenueCatカスタマーかどうかを示すcreated: Booleanの両方を返します。

  • logOutは識別済みユーザーに対してのみ機能する。 SDKが匿名IDの状態でlogOutを呼び出すと、すべてのSDKでエラーがスローされます(PurchasesErrorCode.LogOutWithAnonymousUserErrorまたはiOS相当のエラー)。 独自の「サインイン済み」フラグでガードしてください。

  • Restoreはログインではない。 restorePurchases()はストアに現在のレシートを問い合わせ、現在のRevenueCatユーザーにアタッチします。 IDの切り替えは行いません。 新しいデバイスでサインインする場合は、まずlogIn(appUserID)を呼び出し、現在のストアアカウントからレシートを取得する必要がある場合にのみrestorePurchases()を呼び出してください。

  • アカウントの切り替えはlogOutの後にlogIn アプリがサインアウトして別のユーザーとしてサインインし直すことを許可している場合は、まずlogOut()を呼び出して完了を待ち、その後logIn(newId)を呼び出してください。 2回目のlogInで直接切り替えようとすると、2つのIDがエイリアスされてしまうため避けてください。

  • 事前にConfigureを実行すること。 logIn / logOutの前にPurchases.configure(…)が実行済みでなければなりません。 未実行の場合、SDKはエラーをスローします。


3. 実装

検出したプラットフォームに対応するファイルを読んでください:

  • platforms/ios.md
  • platforms/android.md
  • platforms/kmp.md
  • platforms/flutter.md
  • platforms/react-native.md

各プラットフォームファイルには、典型的な認証状態オブザーバーに組み込まれたlogInおよびlogOutの呼び出し例が記載されています。


4. 検証

以下がすべて確認できるまで、ID同期が機能していると主張しないこと:

  1. RevenueCatダッシュボードのテストユーザーのCustomerページに、$RCAnonymousID:のプレースホルダーではなく、バックエンドが使用している同一のappUserIDが表示されている。
  2. サインアウトするとIDが新しい匿名ユーザーに戻り、別のアカウントでサインインするとそのアカウントの購入履歴に切り替わる(新規アカウントの場合は購入履歴なしで表示される)。
  3. 匿名状態での購入後にlogInを呼び出すと、購入はサインイン済みユーザーにエイリアスされ、失われずに紐付いている。
  4. すでに匿名状態でlogOutを呼び出した場合に、クラッシュや無言の成功として扱われず、適切にハンドリングされている。
原文(English)を表示

revenuecat-identify-user: connect RevenueCat to your auth system

Use this skill when the user wants to call logIn / logOut on the RevenueCat SDK so that their app users line up with RevenueCat subscribers. This skill does not cover initial SDK setup (see integrate-revenuecat), purchases (revenuecat-purchase-flow), or gating (revenuecat-entitlements-gate).

1. Detect the platform

Inspect the working directory and pick the first match, from top to bottom:

  1. React Native: package.json has a react-native-purchases entry, or react-native as a dependency → read platforms/react-native.md. If expo is also a dependency, note it as an Expo project.
  2. Flutter: pubspec.yaml exists at the project root → read platforms/flutter.md.
  3. Kotlin Multiplatform: build.gradle.kts contains a kotlin { … } multiplatform source sets block, or depends on com.revenuecat.purchases:purchases-kmp* → read platforms/kmp.md.
  4. Android (native): build.gradle(.kts) applies com.android.application (and is not KMP) → read platforms/android.md.
  5. iOS (native): Package.swift, *.xcodeproj, *.xcworkspace, or Podfile at the project root → read platforms/ios.md.

If several match (e.g. an ios/ folder inside a Flutter project), pick the outermost project, the one that owns the build. If still ambiguous, ask the user which platform they want to configure.

2. Shared concepts (all platforms)

  • Anonymous by default. Before logIn is called, RevenueCat assigns a stable anonymous ID prefixed $RCAnonymousID:. Purchases made while anonymous are aliased onto the real appUserID the first time logIn is called with it, so there is no "lost purchase" risk from letting users buy before signing in.
  • Never use email, phone number, or a sequential database id as the appUserID. Use a stable opaque value such as your backend's user UUID, or a hash of the user id. RevenueCat treats the ID as an opaque string and it is difficult to change later.
  • Call logIn after your auth system confirms the session. Do not call logIn speculatively. The typical trigger is your auth state listener firing with a signed in user. logIn returns both the user's current CustomerInfo and a created: Boolean that tells you whether this is a brand new RevenueCat customer.
  • logOut only works on identified users. Calling logOut while the SDK is on an anonymous ID throws an error in every SDK (PurchasesErrorCode.LogOutWithAnonymousUserError or the iOS equivalent). Gate it behind your own "is signed in" flag.
  • Restore is not login. restorePurchases() asks the store for the current receipt and attaches it to the current RevenueCat user. It does not switch identities. If the user signs in on a new device, call logIn(appUserID) first, then restorePurchases() only if they also expect to pull a receipt from the current store account.
  • Account switching is logOut then logIn. If your app lets a user sign out and sign back in as someone else, call logOut() first, wait for it, then logIn(newId). Do not try to swap directly with a second logIn, since that will alias the two IDs together.
  • Configure first. Purchases.configure(…) must have run before logIn / logOut. If it has not, the SDK throws.

3. Implementation

Read the platform file that matches detection:

  • platforms/ios.md
  • platforms/android.md
  • platforms/kmp.md
  • platforms/flutter.md
  • platforms/react-native.md

Each platform file shows the logIn and logOut calls wired into a typical auth state observer.

4. Verify

Do not claim identity sync works until:

  1. In the RevenueCat dashboard, the Customer page for your test user shows the same appUserID your backend uses, not the $RCAnonymousID: placeholder.
  2. Signing out clears the ID back to a fresh anonymous user; signing in as a different account switches to that account's purchases (or shows none if it is a new account).
  3. A purchase made while anonymous, followed by logIn, remains attached to the signed in user (aliased, not lost).
  4. Calling logOut while already anonymous is handled, not treated as a crash or a silent success.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。