配置

配置 Expo 环境 key、应用变体、链接、app config 和服务降级行为。

Expo 配置分成两处:

  • .env.local 或按环境拆分的文件提供公开客户端 key。
  • app.config.ts 生成原生配置、应用标识、URL scheme、权限、plugins 和 EAS update 元数据。

配置链路

.env.example 开始

cp .env.example .env.local

如果要按构建环境拆分值,可以使用 .env.development.env.preview.env.production

Expo 内联 EXPO_PUBLIC_*

每个 EXPO_PUBLIC_* 都会进入发给用户的 JavaScript bundle。把这些值当成公开值: 可发布的 Supabase anon key、RevenueCat public SDK key、PostHog project key 和 Sentry DSN 可以放这里;service-role key、webhook secret、APNs private key、Sentry auth token 不可以。

Provider 读取自己的 key

Supabase 是 auth/data/storage 的基础。可选 Provider 会检查自己的 key:RevenueCat 报告未配置,PostHog 禁用 capture,Sentry 禁用 SDK capture,更新门禁保持安静, 链接退回 Expo 创建的 URL。

app.config.ts 生成原生应用配置

动态配置会派生显示名称、bundle/package ID、URL scheme、原生权限、plugins、 associated domains、Android intent filters、EAS project ID、runtime version 和 update URL。

服务端值必须留在 JS bundle 外。REVENUECAT_WEBHOOK_AUTH 和 APNs key 放在 Supabase Edge secrets;SENTRY_AUTH_TOKEN 放在 EAS secrets 或 CI。不要把它们 暴露成 EXPO_PUBLIC_*

起步 .env.local

# Supabase
EXPO_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_PROJECT_ID=your-project-ref

# Optional providers
EXPO_PUBLIC_REVENUECAT_IOS_KEY=
EXPO_PUBLIC_REVENUECAT_ANDROID_KEY=
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=
EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=
EXPO_PUBLIC_POSTHOG_API_KEY=
EXPO_PUBLIC_SENTRY_DSN=
APP_VARIANT=development

修改 EXPO_PUBLIC_* 后重启 Expo dev server。修改原生标识、plugins、权限或 URL scheme 行为后,需要重建 development client。

Key reference

Supabase

Prop

Type

RevenueCat

Prop

Type

lib/purchases.tsx 不会在 Web 上配置 RevenueCat。应用仍然通过 useEntitlement().isEntitled 从 Supabase 读取权益;RevenueCat CustomerInfo 只是 购买和缓存状态,不是 gate。

Google Sign-In

Prop

Type

Google Sign-In 是 native-only。Web 上不会加载可选模块;缺少所需 ID 时按钮会给出配置错误。

PostHog

Prop

Type

Sentry

Prop

Type

版本门禁

Prop

Type

链接、法律与商店

Prop

Type

App variant

Prop

Type

应用变体

app.config.ts 会从 APP_VARIANT 派生标识符,让 development、preview 和 production 构建可以同时安装:

Variant应用名Bundle / package IDURL scheme
developmentSoar Starter (Dev)expo.soarstarter.com.devsoar-starter-expo-dev
previewSoar Starter (Preview)expo.soarstarter.com.previewsoar-starter-expo-preview
productionSoar Starterexpo.soarstarter.comsoar-starter-expo

eas.json 中的 EAS profiles 设置同样的 variant:

  • development 使用 development client、internal distribution 和 development channel。
  • preview 使用 internal distribution、Android APK 输出和 preview channel。
  • production 使用 store distribution、auto-increments versions 和 production channel。

动态原生配置

原生应用设置应放在 app.config.ts,不要放在静态 app.json。模板当前配置了:

  • newArchEnabled: true 和 Android edgeToEdgeEnabled: true
  • 按当前 variant 派生 iOS 与 Android bundle identifiers。
  • 按当前 variant 派生 scheme
  • 设置 EXPO_PUBLIC_LINKING_DOMAIN 时,生成 iOS associatedDomains 和 Android intentFilters
  • expo-routerexpo-splash-screenexpo-apple-authentication@react-native-google-signin/google-signinexpo-tracking-transparency 和 Sentry plugins。
  • Camera、photos、notification、ATT 和 Apple Sign-In 权限/能力元数据。
  • EAS project id、runtimeVersion: { policy: "appVersion" }expo-updates URL。

相关页面

On this page