You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS WebView(react-native-webview)自定义scheme报错NSURLErrorDomain-1002

React Native WebView iOS 唤起自定义Scheme(swish://)报NSURLErrorDomain -1002 解决方案

核心问题原因

iOS的WebView本身不会自动处理第三方APP的自定义Scheme请求,当WebView尝试加载swish://这类URL时,因无法解析会抛出unsupported URL错误,最终 fallback 到about:blank。

解决方法

1. 拦截WebView导航请求,手动唤起APP

使用React Native的LinkingAPI拦截自定义Scheme请求,阻止WebView尝试加载该URL,直接唤起对应APP:

import { Linking } from 'react-native';
import WebView from 'react-native-webview';

// 你的组件代码
<WebView
  source={{ uri: '你的页面地址' }}
  originWhiteList={['swish://*', 'https://*']}
  onShouldStartLoadWithRequest={(request) => {
    // 拦截swish开头的URL
    if (request.url.startsWith('swish://')) {
      // 唤起Swish APP
      Linking.openURL(request.url).catch(err => {
        console.error('唤起Swish失败:', err);
        // 可选:如果APP未安装,这里可以处理跳转下载逻辑
      });
      return false; // 阻止WebView加载该URL,避免报错
    }
    return true; // 允许其他合法URL正常加载
  }}
/>

2. 确认Info.plist配置生效

  • 打开Xcode,进入项目的Info标签页,检查LSApplicationQueriesSchemes数组中是否包含swish;
  • 确保配置添加到了当前运行的Target中,若有多个Target,需逐个配置;
  • 配置后clean并重新编译项目,避免缓存导致配置未生效。

3. 额外检查项(若加载本地HTML)

如果WebView加载的是本地HTML文件,需添加allowUniversalAccessFromFileURLs={true}属性,确保WebView能正常处理外部Scheme请求:

<WebView
  // 其他属性
  allowUniversalAccessFromFileURLs={true}
/>

为什么Safari能正常唤起?

Safari浏览器有专门的逻辑处理自定义Scheme,会自动唤起对应APP;但React Native的WebView基于WKWebView/UIWebView,没有这个自动处理逻辑,必须手动拦截处理。

内容的提问来源于stack exchange,提问作者davidjons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:35:21