Ionic Capacitor iOS端自定义URL Scheme重定向失败排查
iOS端InAppBrowser无法通过自定义Scheme跳转回Ionic/Capacitor应用的解决方案
1. 修正Info.plist中的URL Scheme配置
你的CFBundleURLSchemes配置存在错误,自定义Scheme仅需填写纯协议名,不需要包含://或路径后缀。修改后的正确配置如下:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.bidding.starter</string> <key>CFBundleURLSchemes</key> <array> <string>com.bidding.starter</string> <!-- 仅保留这一行即可 --> </array> </dict> </array>
多余的com.bidding.starter://oauth?和com.bidding.starter://oauth会导致iOS无法正确识别你的Scheme规则。
2. 拦截InAppBrowser的自定义Scheme跳转
iOS的WKWebView(InAppBrowser基于该组件实现)默认会阻止非HTTP(S)协议的跳转,必须通过代码监听页面加载事件,手动拦截并处理Scheme跳转逻辑:
代码示例(Ionic/TypeScript):
import { InAppBrowser, InAppBrowserEvent } from '@ionic-native/in-app-browser/ngx'; import { App } from '@capacitor/app'; // 打开SSO登录页面 const browser = this.inAppBrowser.create('https://你的SSO登录地址.com', '_blank', { location: 'yes', clearcache: 'yes', clearsessioncache: 'yes' }); // 监听页面加载起始事件 browser.on('loadstart').subscribe((event: InAppBrowserEvent) => { const targetUrl = event.url; // 匹配自定义Scheme的跳转请求 if (targetUrl.startsWith('com.bidding.starter://')) { // 关闭InAppBrowser窗口 browser.close(); // 调用Capacitor的App插件触发应用跳转 App.openUrl({ url: targetUrl }); } });
3. 验证Capacitor基础配置
确保capacitor.config.ts中已正确配置应用ID(需与Scheme前缀一致):
import { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { appId: 'com.bidding.starter', appName: 'BiddingHub', // 其他配置项... }; export default config;
4. 重置iOS项目环境
修改配置后需执行以下操作确保生效:
- 关闭Xcode
- 运行
npx cap sync ios同步配置 - 打开Xcode后执行清理操作(快捷键
Cmd+Shift+K) - 重新编译运行项目
错误根源说明
Xcode抛出的Redirection to URL with a scheme that is not HTTP(S)错误,本质是WKWebView的安全限制导致;同时你配置的冗余Scheme规则,让iOS无法正确匹配跳转请求,两者共同导致了跳转失败。
内容的提问来源于stack exchange,提问作者vgnsh
相关产品推荐
相关产品推荐

