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

React Native集成SIP.js遇Android端WebSocket 1006错误求助

React Native Android端sip.js WebSocket 1006错误解决方案

针对你遇到的Android端WebSocket连接异常关闭(code 1006)、iOS正常的问题,可从以下几个方向排查解决:

1. 配置Android网络安全策略

Android 9及以上对网络连接有严格的安全限制,若服务器使用自签名证书或域名未被信任,会导致WSS连接失败。

  • 在android/app/src/main/res/xml目录下创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <!-- 替换为你的WebSocket服务器域名 -->
        <domain includeSubdomains="true">my.websocket.server</domain>
        <!-- 若使用自签名证书,添加以下配置(需将证书文件放在res/raw目录下) -->
        <trust-anchors>
            <certificates src="@raw/your_server_certificate"/>
        </trust-anchors>
        <!-- 指定兼容的TLS版本,避免版本不匹配 -->
        <tls-config minVersion="TLS_1_2" maxVersion="TLS_1_3"/>
    </domain-config>
</network-security-config>
  • 在AndroidManifest.xml的application标签中添加配置引用:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">

2. 显式指定React Native WebSocket构造函数

sip.js默认使用的WebSocket实现可能与Android端存在兼容性问题,显式指定使用React Native内置的WebSocket:
修改你的注册代码:

import { Registerer, UserAgent } from 'sip.js';

export const registerUserAgent = async () => {
  try {
    let sipUsername = 'my username';
    let sipToken = 'my token';

    const userAgentOptions = {
      transportOptions: {
        server: 'wss://my.websocket.server:port',
        traceSip: true,
        // 强制使用React Native的WebSocket
        wsConstructor: WebSocket
      },
      logLevel: 'debug',
    };

    userAgentOptions.uri = UserAgent.makeURI(
      `sip:${sipUsername}@my.websocket.server:port`,
    );

    let userAgent = new UserAgent(userAgentOptions);
    userAgent.delegate = {
      onDisconnect(err) {
        console.log(err, 'Disconnect error');
      },
    };
    await userAgent.start();

  } catch (err) {
    console.log(err);
  }
};

3. 检查网络权限与端口可用性

  • 确保AndroidManifest.xml中已添加必要的网络权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 测试服务器WSS端口是否可被Android设备访问,避免端口被防火墙或网络环境拦截,建议优先使用标准443端口测试。

4. 验证服务器TLS配置

确认服务器的TLS配置支持Android设备兼容的版本(至少TLS 1.2),部分旧Android设备不支持TLS 1.3,可临时降低服务器TLS版本测试是否解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:33:31