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

React Native iOS端WebSocket连刷卡设备遇1006及OSStatus -9807错误

问题分析与解决方案

错误码OSStatus error -9807对应SSL证书域名不匹配或证书未被iOS信任,结合Postman能正常连接的情况,核心原因是iOS的ATS(App Transport Security)策略严格验证SSL证书,而Postman默认跳过了部分证书校验。以下是具体解决步骤:

1. 确认证书域名匹配

你使用的是IP地址wss://192.168.1.2:8443,但刷卡设备的SSL证书中绑定的域名可能是其他值(比如localhost或自定义域名),导致iOS验证域名不匹配触发错误。

  • 解决:要么重新生成包含该IP的SSL证书,要么在iOS端配置ATS例外允许该IP的证书校验。

2. 配置iOS ATS例外

修改项目的ios/[你的项目名]/Info.plist文件,添加针对目标IP的ATS例外规则:

<key>NSAppTransportSecurity</key>
<dict>
  <!-- 允许本地网络访问(局域网IP需要) -->
  <key>NSAllowsLocalNetworking</key>
  <true/>
  <key>NSExceptionDomains</key>
  <dict>
    <key>192.168.1.2</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSExceptionRequiresForwardSecrecy</key>
      <false/>
      <key>NSExceptionAllowsArbitraryLoads</key>
      <true/>
    </dict>
  </dict>
</dict>
  • 注意:全局开启NSAllowsArbitraryLoads(设为YES)虽然能快速解决问题,但不符合App Store审核规范,建议仅针对特定IP配置例外。

3. 手动信任自签名证书(如果是自签证书)

如果刷卡设备使用的是自签名SSL证书,需要将证书安装到iPad并手动信任:

  • 将证书文件发送到iPad(比如通过邮件),打开后按照提示安装到设备的「设置-通用-VPN与设备管理」中。
  • 安装完成后,进入「设置-通用-关于本机-证书信任设置」,开启该证书的信任开关。

4. 代码层面的小调整

确保WebSocket实例的生命周期管理正确,避免重复创建连接。另外,可以在onerror中打印更详细的错误信息:

const ws = new WebSocket('wss://192.168.1.2:8443');

ws.onopen = () => {
    console.log("Connection Established")
    ws.send('Initiate Payment');
};

ws.onmessage = e => {
    console.log(e.data)
}

ws.onerror = e => {
    // 打印完整错误对象
    console.error('WebSocket Error:', JSON.stringify(e));
}

ws.onclose = e => {
    console.log('Connection Closed:', e.code, e.reason);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:03:26