如何为Expo应用配置多个URL Scheme?遇EAS更新报错及Scheme无效问题
解决Expo应用多URL Scheme配置问题
核心注意事项
Expo根配置的scheme字段仅支持单个字符串,直接用数组会触发eas update错误。多Scheme需通过iOS/Android各自的原生配置字段实现,且原生配置变更必须通过eas build重新构建应用,无法通过eas update生效。
iOS平台正确配置
在app.json的ios.infoPlist下,通过CFBundleURLTypes添加多个Scheme,可选择两种配置方式:
方式1:单个URL类型条目包含多个Scheme
{ "expo": { "scheme": "scheme1", // 根字段保留单个字符串,避免eas update报错 "ios": { "infoPlist": { "CFBundleURLTypes": [ { "CFBundleURLSchemes": ["scheme1", "scheme2", "scheme3"], "CFBundleURLName": "com.your.app.identifier" // 替换为你的App Bundle ID } ] } } } }
方式2:每个Scheme单独一个URL类型条目
{ "expo": { "scheme": "scheme1", "ios": { "infoPlist": { "CFBundleURLTypes": [ { "CFBundleURLSchemes": ["scheme1"], "CFBundleURLName": "com.your.app.identifier" }, { "CFBundleURLSchemes": ["scheme2"], "CFBundleURLName": "com.your.app.identifier" }, { "CFBundleURLSchemes": ["scheme3"], "CFBundleURLName": "com.your.app.identifier" } ] } } } }
Android平台正确配置
在app.json的android字段下,通过intentFilters添加多个Scheme,两种配置方式可选:
方式1:单个Intent Filter包含多个Scheme
{ "expo": { "scheme": "scheme1", "android": { "intentFilters": [ { "action": "VIEW", "data": [ { "scheme": "scheme1" }, { "scheme": "scheme2" }, { "scheme": "scheme3" } ], "category": ["BROWSABLE", "DEFAULT"] } ] } } }
方式2:每个Scheme单独一个Intent Filter
{ "expo": { "scheme": "scheme1", "android": { "intentFilters": [ { "action": "VIEW", "data": { "scheme": "scheme1" }, "category": ["BROWSABLE", "DEFAULT"] }, { "action": "VIEW", "data": { "scheme": "scheme2" }, "category": ["BROWSABLE", "DEFAULT"] }, { "action": "VIEW", "data": { "scheme": "scheme3" }, "category": ["BROWSABLE", "DEFAULT"] } ] } } }
后续操作
- 确保根配置的
scheme字段为单个字符串,避免eas update报错。 - 执行
eas build重新构建iOS/Android应用二进制包,原生配置变更仅在新构建的包中生效。 - 测试所有Scheme是否正常唤起应用:可通过浏览器输入
scheme2://test、scheme3://demo等链接验证。
内容的提问来源于stack exchange,提问作者The Silkworm
相关产品推荐
相关产品推荐

