
Contents
結論
アプリ内課金(In-App Purchase)が動かない原因は
EAS環境変数(env)の設定ミスと競合でした。
前提環境
- Expo(EAS Build)
- React Native
- RevenueCat導入済み
- App Store Connect設定済み
- TestFlightで課金テスト中
発生した問題
- TestFlightで課金できない
- RevenueCatも正常に見える
- App Store Connectも問題なし
- コードもエラーなし
👉 なのに 課金だけ動かない
最初に疑ったこと(全部やった)
① RevenueCatの設定確認
- Product ID一致 → OK
- Offering設定 → OK
- Entitlement → OK
② App Store Connect確認
- In-App Purchase作成済み → OK
- ステータス → OK
- サンドボックステスター → OK
③ コード確認
Purchases.configure({ apiKey: process.env.EXPO_PUBLIC_RC_API_KEY_IOS });
👉 問題なし
それでも動かない…
ここでかなりハマる。
原因:envの「競合」と「設定ミス」
これが実際の状態👇
EXPO_PUBLIC_RC_API_KEY_IOS=*****(Secret)
EXPO_PUBLIC_RC_API_KEY_IOS=appl_appl_XXXXX(間違い)
問題点
① 同じenvが2つ存在していた
👉 EAS上で競合
② 値が壊れていた
appl_appl_XXXXX
👉 正しくは
appl_XXXXX
③ SecretとSensitiveが混在
👉 process.envで読めない可能性あり
なぜ起きたか
eas secret:create(旧コマンド)を使用eas env:create(新仕様)と混在- 上書きできずに2重登録
👉 envの管理ミス
正しい解決手順
① envを全削除
eas env:delete
👉 同名のものを全部削除
② 正しく再登録
eas env:create \
--name EXPO_PUBLIC_RC_API_KEY_IOS \
--value "appl_XXXXX" \
--environment production
👉 visibilityは Sensitive
③ 確認
eas env:list --environment production
👉 こうなればOK
EXPO_PUBLIC_RC_API_KEY_IOS=appl_XXXXX
④ eas.json修正
"production": {
"autoIncrement": true,
"environment": "production"
}
⑤ 再ビルド
eas build --platform ios --profile production
なぜこれで解決するのか
EASの仕組み👇
ビルド時にenvがコードに埋め込まれる
↓
TestFlightで実行
👉 envが間違ってると
👉 APIキーが空 or 無効になる
ハマる理由(重要)
この問題は:
- エラーが出ない
- 見た目も正常
- 他の設定も全部OK
👉 原因特定がめちゃくちゃ難しい
同じ現象が起きる人の特徴
- Expo + RevenueCat使ってる
.envとEAS envを混同してる- コマンドを複数回試している
- envを上書きしてるつもり
学び
- envは「上書き」ではなく「競合」する
- SecretとSensitiveは別物
- EAS Buildはローカル.envを使わない
まとめ
アプリ内課金が動かないときは👇
- RevenueCat
- App Store Connect
- env(ここ超重要)
👉 特にEAS使ってる人は
👉 envを最優先で疑うべき
SEOキーワード
- Expo アプリ内課金 動かない
- RevenueCat 課金できない
- TestFlight 課金テストできない
- EAS env 反映されない
- React Native IAP エラーなし動かない
最後に
「全部正しいのに動かない」は
だいたい envが原因です。
これはマジで盲点でした。








