开发react-native应用时如何连接SoftAP设备并通过TCP发送WiFi信息
实现SoftAP配网的整体流程逻辑
先理清楚核心实现步骤,对齐端侧约定后再做开发:
- 第一步:收集用户输入的目标WiFi的SSID、密码参数,提前做基础校验(比如SSID非空、密码长度符合对应加密规则要求)
- 第二步:引导用户跳转系统WiFi设置页,连接设备放出的SoftAP热点;安卓10及以上版本可以调用系统API申请自动连接指定热点,无需用户手动跳转,更低版本必须引导用户手动操作
- 第三步:确认手机成功连接设备SoftAP后,获取设备的网关IP(一般是192.168.4.1这类固定地址,具体和设备端的配置对齐即可)
- 第四步:和设备建立TCP连接,使用双方约定的通信端口,按约定报文格式把SSID、密码等配网参数发送给设备
- 第五步:等待设备返回配网成功的响应报文,收到后引导用户切回正常的WiFi网络即可
可落地的技术方案
纯React Native实现方案
无需写原生代码,直接用成熟的第三方社区库实现:
- WiFi管理功能用
react-native-wifi-reborn,支持WiFi列表扫描、连接指定WiFi、获取当前连接WiFi的SSID、网关地址等能力;注意安卓端要提前申请对应权限:安卓12及以下需要ACCESS_FINE_LOCATION、ACCESS_WIFI_STATE、CHANGE_WIFI_STATE权限,安卓13及以上还要额外加NEARBY_WIFI_DEVICES权限 - TCP通信功能用
react-native-tcp-socket,可以直接在JS层实现TCP客户端的连接、数据发送、接收监听能力 - 注意适配点:如果设备SoftAP没有互联网访问能力,部分安卓机型会自动切回有网的WiFi,需要提前引导用户关闭“智能切换WiFi”“WLAN+”这类系统功能,或者调用安卓
bindProcessToNetworkAPI把当前应用的网络绑定到SoftAP对应的网络上,避免TCP连接被系统切断
混合原生实现方案
如果第三方RN库有兼容性问题,可以自己封装安卓原生模块,打包后APK的适配性更高:
- WiFi管理逻辑直接用Android SDK自带的
WifiManager、ConnectivityManager类实现,权限申请、网络绑定逻辑都在原生层处理,稳定性比第三方RN库更高 - TCP通信用原生的
Socket类实现,封装成RN可调用的方法,只需要给JS层暴露connect、sendData、onReceive几个核心接口即可
调试注意事项
- 先单独验证每一步的功能:先确认手机可以正常连接设备SoftAP,再用TCP调试工具连接设备端口,手动发送测试报文确认设备端可以正常解析配网参数、完成配网,再把逻辑搬到RN项目里
- 报文格式要和设备端提前约定清楚,比如是否需要加校验位、是否加密,避免发送的参数设备解析失败
- 需要添加配网超时逻辑,比如发送配网参数后15秒没有收到设备响应就算失败,提示用户重试
内容的提问来源于stack exchange,提问作者BigJ
相关产品推荐
相关产品推荐

