mcpField
F
freemius-troubleshooting

freemius-troubleshooting

github.com/freemius開発3103 回インストール15 週間前に更新
リポジトリ

freemius-troubleshooting について

Freemius の連携を行う開発者向けに、チェックアウト、Webhook、SDK、設定で起きる一般的な問題を整理した診断スキルです。症状から原因と専用リファレンスをたどれるほか、関連する Freemius スキルも参照できます。

主な機能

  1. 01症状から修正方法を探す索引
  2. 02Webhook とリダイレクトの診断
  3. 03SDK の型とイベントの指針
  4. 04チェックアウトと顧客ポータルの確認
  5. 05関連スキルへの相互参照

活用シーン

  1. 01購入後にアクセス権が付かない問題の診断
  2. 02Webhook 署名検証エラーの調査
  3. 03SDK の型やイベントのエラー解決
  4. 04ポータル、アップグレード、権利の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/freemius/freemius-ai --skill freemius-troubleshooting

インストール後、Claude Code で/freemius-troubleshootingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
checkout-and-portal.md
sdk-types-and-events.md
stack-and-porting.md
webhooks-and-redirect.md

詳細

Freemius のトラブルシューティング

Freemius の連携で問題が発生した場合、原因はほとんどの場合、次の5つのいずれかです:ウェブフック/リダイレクトの設定、SDK の型/イベント、スタック/移植レイヤー、チェックアウト/ポータルの接続、またはシークレット/ダッシュボードの設定。この Skill は診断用のインデックスです。症状を見つけ、該当するリファレンスを開いて修正を適用してください。

FAQ の原文: https://freemius.com/help/documentation/ai/lovable/#troubleshooting

この Skill の使い方

  1. 以下の表で該当する症状を確認します。
  2. リンク先のリファレンスを開き、根本原因と修正方法を確認します。
  3. freemius-core/freemius-checkout/freemius-customer-portal に関する問題の場合、リファレンスから該当する Skill の正確なセクションに移動できます。

症状 → 修正方法のインデックス

症状考えられる原因参照
チェックアウトは完了するが、ユーザーがアクセス権を取得できないリダイレクト URL または Webhook が設定されていない/公開されていないreferences/webhooks-and-redirect.md
Webhook の署名検証に失敗するリスナーに渡す前に、Raw body がパースされているreferences/webhooks-and-redirect.md
Entitlement の type に対する TS エラー:Type '"lifetime"' is not assignableEntitlement の type は subscription | oneoff であり、lifetime ではありませんreferences/sdk-types-and-events.md
license.quota.changed を購読しても何も起きない/型エラーになる@freemius/[email protected] にそのイベントは存在しませんreferences/sdk-types-and-events.md
Webhook ハンドラー内の license に対する TS エラー:Object is possibly 'false'配列サブスクリプションの license は、削除済みの形式を含むユニオン型ですreferences/sdk-types-and-events.md
prisma generate/クライアントでドライバーアダプターを要求される;url が拒否されるPrisma 7 では従来の datasource url が削除されています。Prisma 6 に固定してくださいreferences/stack-and-porting.md
ブラウザーで process.env.NEXT_PUBLIC_* が undefined になるVite では process.env ではなく、import.meta.env.VITE_* を使用しますreferences/stack-and-porting.md
@/... または @shared/... のインポートを解決できないvite.config.ts と tsconfig の paths にエイリアスがありませんreferences/stack-and-porting.md
npx skills add でスキルをインストールしたが、Claude Code(CLI)に表示されない/スラッシュコマンドが見つからないClaude Code はデフォルトのインストール先ではありません。スキルは ~/.agents/skills/ にインストールされ、~/.claude/skills/ へのシンボリックリンクがありませんreferences/stack-and-porting.md
Claude Desktop(Claude.ai アプリ)で npx skills add … -a claude-code の CLI 方式を試したが、適用されないCLI/-a claude-code フラグは Claude Code 専用の概念です。Desktop では、Customize → Skills → "+" → Upload a skill から各スキルの .zip を個別にインストールします(最初に core をインストールし、Settings → Capabilities で Code execution を有効にしてください)references/stack-and-porting.md
シークレットキー/API トークンがブラウザーに漏れる、または Freemius から 401 が返るFreemius の呼び出しがサーバー側ではなくクライアント側で行われていますreferences/checkout-and-portal.md
チェックアウトオーバーレイが空または未設定の状態で開くサーバーで作成した CheckoutSerialized からオーバーレイが初期化されていませんreferences/checkout-and-portal.md
アップグレードのルートが 500 を返す:「Payment method update is not allowed for lifetime licenses」checkout.create({ licenseId }) は、更新可能なライセンス(expiration: null)を拒否する支払い方法更新エンドポイントを呼び出します。setLicenseUpgradeByKey を使用してくださいreferences/checkout-and-portal.md
ユーザーが「アップグレード」したが、サブスクリプションが 2 つになった/二重請求されたすでにサブスクリプションに加入しているユーザーに、通常のサブスクライブ用チェックアウトを提示しています。ライセンスアップグレード用チェックアウト(setLicenseUpgradeByKey)と、entitlement を考慮した表示を使用してくださいreferences/checkout-and-portal.md
ポータルの操作で 404 が返る/トークンが無効/api/portal エンドポイント 1 つで、データと署名付きアクションの両方を処理する必要がありますreferences/checkout-and-portal.md
1 回限り/Lifetime の購入がサブスクリプションのデモと同じように動作しない課金方式が異なります。billing_cycle: 'lifetime' と type oneoff を使用してくださいreferences/checkout-and-portal.md
Lifetime にアップグレードしたのに、引き続き機能が制限される/クレジットが請求される/アクティブとして表示されない(請求書は正しい)freemius.entitlement.getActive() は type: 'subscription' で絞り込むため、1 回限りの Lifetime 行は表示されず、getUserEntitlement() は null を返しますreferences/sdk-types-and-events.md
クーポン適用済みのサブスクリプションが約 100 年後に「更新」される(USD 0 · renews 2126)100%オフのクーポンが「初回の支払いと更新」に適用されていますreferences/checkout-and-portal.md
キャンセル後の再サブスクライブが拒否される(「すでにアクティブなサブスクリプションに加入しています」)管理者がライセンスをキャンセルしたため、サブスクリプションが孤立したままアクティブになっていますreferences/checkout-and-portal.md
アクティブなサブスクリプションに加入しているのに、ユーザーにペイウォール/402 が表示される;user_fs_entitlement テーブルが空オーバーレイの purchaseCompleted 同期と Dashboard のチェックアウトリダイレクト URL を設定せずに、ホスト型のリダイレクトだけを使ってチェックアウトしました。そのため、entitlement の行が書き込まれていませんreferences/checkout-and-portal.md
すべてのユーザーで user_fs_entitlement が空;同期 POST が 400 "License ID is required in the request body" を返す(フロントエンドの .catch() がエラーを隠す)オーバーレイの purchaseCompleted POST が checkout.request.createProcessor/processRedirect 経由でルーティングされている(または syncEndpoint が /api/checkout/redirect?action=process_purchase を指している)ためです。この経路は、オーバーレイのペイロードにない署名付きリダイレクト/本文中の license_idを要求します。オーバーレイの同期には、ペイロードからライセンスを読み取り syncEntitlementByLicenseId を呼び出す通常の POST /api/purchase を使用してください。これはホスト型の GET /api/checkout/redirect とは別のエンドポイントですfreemius-checkout → references/checkout-provider.md
制限付き機能(例:Premium の画像 OCR)で、一般的な 「OCR failed. Please try another file.」 と表示されるサーバーのティア/entitlement ゲート(tier_upgrade_required/image_requires_pro などの理由を伴う 403/402)が、すべてのエラーを処理する catch によって握りつぶされています。ゲートは失敗ではありません。ステータスと理由に応じて分岐し、エラートーストではなく、アップグレード経路を提示するペイウォールを開いてくださいfreemius-checkout → references/paywall.md
購入は成功するが、料金ページがない/最初にペイウォールに到達しなくても、プランを確認したり購入したりする方法がないビルドにペイウォールは含まれていますが、独立した料金ページのルートが抜けています。専用の /pricing ページ(GET /api/checkout/pricing から取得する Subscribe + Topup テーブル)とナビゲーションリンクは、必須の成果物ですfreemius-checkout → references/pricing-tables.md
サブスクリプションの購入後(または Lifetime に不適切な文言で)、成功トーストに 「credits added to your account」 と表示される購入後の文言が、同期された購入タイプに応じて分岐していません。再取得した entitlement のティアを使ってください。lifetime →「Lifetime access unlocked」、subscription →「<tier> unlocked」、クレジットパック →「page credits added」freemius-checkout → references/checkout-provider.md
OCR(従量制)の実行後、手動でページを更新するまでクレジット残高に古い値が表示されるサーバーはクレジットを正しく差し引いています(credit -= pages)が、従量制アクションの成功ハンドラーが表示中の残高を更新しないため、完全に再読み込みするまでバッジが古いままです。再読み込みせずに表示を更新するには、アクションのレスポンスから新しい残高を読み取るか、購入フローと同じ refreshEntitlement()(GET /api/entitlement → credit)を await してください。これは、購入後の entitlement 更新に対応する、利用後の更新ですfreemius-checkout → references/paywall.md
Lifetime/最上位ティアのユーザーで /pricing に何も表示されない(「何も表示されなくなった」)購入対象の最上位ティアをすでに所有しているため、すべての購入画面が正しく非表示になっていますが、すべてを隠すと空白のページが残ります。代わりに「すべて所有しています」という親切な空状態を表示してください。空白のページにしてはいけません(クレジットのみの利用者には、Subscribe + Topup を引き続き表示する必要があります)freemius-checkout → references/pricing-tables.md
アカウントページの 「Change plan」 が、キャンセルの隣で位置がずれた、パディングのない下線付きリンクとして表示されるボタン用のクラス(例:btn-outline)が指定されたルーターの <Link> ですが、そのクラスは基本の .btn クラスからパディング、角丸、text-decoration:none のみを継承します。<a> に単独で適用すると、そのすべてが失われます。ボタン/アウトラインのクラスを単独で完結するようにするか、基本クラスと修飾クラスの両方を <Link> に設定してくださいfreemius-customer-portal → references/subscription-and-upgrade.md
継続利用クーポン:「割引を適用してプランを継続」をクリックするとウィザードが閉じるだけで、何も起きず、Dashboard の 利用回数が 0 と表示される適用 POST の本文が空の {} でした。SDK の更新クーポンアクションは { couponId: <coupons[0].coupon_id> } を要求し、それ以外の場合は 400 を返します。また、ウィザードが res.ok を確認していないため、呼び出しに失敗しても成功したかのように閉じます。実際の couponId を送信し、res.ok を確認してください(失敗時はエラーを表示し、ウィザードを開いたままにします)freemius-customer-portal → references/cancellation-and-coupon.md
ホスト型チェックアウト/アップグレード後、ブラウザーが /checkout-result?success=true に移動し、ヘッダーだけの空白ページが表示されるサーバーの GET リダイレクトハンドラーは /checkout-result に移動させますが、SPA ルーター(App.tsx の <Routes>)には一致するクライアントルートがありません。ビルドで出し忘れた実ページがリダイレクト先になっています。success を読み取り、マウント時に entitlement を 1 回更新し、確認メッセージを表示してアプリに戻る /checkout-result ルートを追加してくださいfreemius-core → references/purchase-processing.md
キャンセル/更新後に entitlement が更新されない。Webhook が機能していないように見えるが、ハンドラー、URL、署名に問題はないDashboard で Webhook URL が有効化/反映される前にライフサイクルイベントが発生したため、配信されていません(後から再送もされません)references/webhooks-and-redirect.md

最初に確認する項目(Lovable FAQ の基本)

このスタックに適用した、公式 FAQ の最優先の推奨事項です。

  1. 失敗した手順を再実行するようエージェントに依頼してください。 これらのスキルはモジュール式です。全体をやり直すのではなく、該当するリファレンス(例:freemius-core → purchase-processing.md)を再度呼び出してください。
  2. Webhook とチェックアウト後のリダイレクトが、重要な 2 つの経路です。 まず両方をエンドツーエンドで確認してください。「支払い後にアクセスできない」という報告の多くは、どちらかの設定ミスが原因です。Webhook の処理に失敗すると Freemius からメールが届くため、そのメールの内容をエージェントに貼り付けると、失敗箇所を特定できます。
  3. 公開/デプロイ後は、すべての URL を更新してください。 リダイレクト URL または Webhook URL がまだ localhost(または古いドメイン)を指していると、フローが気付かないうちに機能しなくなります。PUBLIC_APP_URL は公開中のドメインに設定する必要があります。
  4. 買い切り購入には、サブスクリプションの場合とは異なる方法が必要です。lifetime モダリティについては、チェックアウト/ポータルのリファレンスを参照してください。
  5. それでも解決しない場合は、 Freemius サポート([email protected])に、プロダクト ID、失敗した手順、スクリーンショットを添えてお問い合わせください。

新しい項目の追加

このスキルは拡張していくことを想定しています。検証ゲート中にスキルの不具合が見つかった場合は、そのゲートの「見つかったスキルの不具合」テーブルに記録し、該当するスキルを修正したうえで、ここにトラブルシューティングの項目(症状 → 原因 → 解決方法)を追加してください。そうすれば、次のインテグレーターが同じ問題につまずかずに済みます。

コメント