開発事例

NFC SNS CARD MAKER バグ修正記録(2026/04/22) — edit_token復元とSNS無料開放

NFC SNS CARD MAKER バグ修正記録(2026/04/22) — edit_token復元とSNS無料開放

「ブラウザで編集できない」を3段階のフォールバックで完全解決

2026年4月22日、NFC SNS CARD MAKERの本番コードに対して今日だけで4件のコミットを行いました。いずれも実機テスト中に発覚した問題です。修正内容をそのまま記録します。

NFC SNS CARD MAKERの画面

問題1: SNSグリッド編集・再書き込みがPRO限定になっていた

**コミット:** `fix: remove Pro gate from SNS write and SNS grid editor`

SNSグリッドの並び替え・削除・追加・リセットと、SimpleWriteViewの再書き込みボタンがPROユーザーのみに制限されていました。これらは無料機能として設計されていたので、Pro認証ガードと鍵アイコン・ペイウォールシートをすべて削除しました。

SNSGridEditorViewから `hasProAccess` チェック・`ProFeatureGate` ラッパー・ペイウォールシートの計18行を削除し、SimpleWriteViewの再書き込みボタンのguard文も除去。

問題2: Keychainが空のときedit_tokenが取れず「ブラウザで編集」が開かない

**コミット:** `fix: editToken empty guard — fall back to Keychain so edit-in-browser always opens`

デジタル名刺の「ブラウザで編集」ボタンをタップしても何も起きないケースがありました。原因はedit_tokenが空のままURLに付与されないこと。

CardModeRootViewとCardManagerのedit_token取得フローを修正し、メモリ上の値が空のときはKeychainから読み直すフォールバックを追加しました。

問題3: 手動でDBにシードしたカードはKeychainにもedit_tokenがない

**コミット:** `fix: recover edit_token from API when Keychain is empty`

アプリ外(管理ツールやSupabase直接操作)でカードを作成した場合、Keychainにedit_tokenが存在しません。問題2のフォールバックだけでは解決できないケースです。

CardManager内のrefreshCardとrestoreFromServer両メソッドに、Keychain→APIの3段階フォールバックを追加:

① メモリ上のeditToken → ② Keychainから読む → ③ Supabase APIにfetchEditTokenリクエスト

問題4: VercelのDeployment ProtectionがAPI経由のtoken取得をブロック

**コミット:** `fix: use Supabase Edge Function card-claim to bypass Vercel protection`

問題3の修正でAPIから取得しようとしたところ、`https://api.nfc.bz/cards/token` がVercelのDeployment Protection(認証壁)で401を返していることが判明。

エンドポイントをVercel経由のAPIルートからSupabase Edge Function `card-claim` に切り替えました。

GETリクエストを廃止し、`POST https://krbkqkqpxxjdboqxfhyj.supabase.co/functions/v1/card-claim` にusernameをJSONボディで送る形式に変更。SupabaseはVercelの保護対象外なので確実に疎通します。

まとめ: edit_tokenの3段階復元フロー

edit_token復元の優先順位

優先度取得元対象ケース
1stメモリ(起動時から保持)通常のアプリ内作成カード
2ndKeychain再起動後・メモリクリア後
3rdSupabase Edge Function手動シード・旧データ移行カード

この修正により、どのルートで作成されたカードでも「ブラウザで編集」が確実に動作するようになりました。

Download on the

App Store

NFC SNS CARD MAKER — 無料ダウンロード・7日間PROトライアル付き

この記事が役に立ったらシェアしてください