问题描述
一、使用背景
我们在做一个微信小程序的“局域网设备发现与添加”功能(最初是打印机,现扩展为局域网设备)。
目标是:在手机与设备处于同一 Wi-Fi/同网段时,发现可用设备并完成添加。
当前已实现并真机验证以下能力:
- wx.startLocalServiceDiscovery / wx.onLocalServiceFound(mDNS)
- wx.createUDPSocket + bind + send + onMessage(SSDP 探测)
- wx.createTCPSocket(端口探测)
- wx.getLocalIPAddress(本机 IP)
- 页面内有深度扫描(同网段 1-254 + 常见端口)
二、现象与问题
在真机上反复测试时,常见现象为:
- SSDP 日志持续显示 sending probe,但几乎无 onMessage 回包;
- mDNS 回调命中率很低,且有时出现空 serviceName 的解析失败回调;
- 同网段条件已满足(本机有局域网 IP),但设备发现结果仍为空或极少;
- 其他第三方 App 在同网络环境下可发现并添加局域网设备(如打印机)。
我们理解“小程序支持局域网通信”,但实际发现层成功率明显受限,无法判断是:
- 平台能力边界;
- 某些系统/机型限制;
- API 使用姿势问题;
- 或微信容器对组播/广播场景有额外限制。
三、复现信息
- 平台:微信小程序真机 鸿蒙6.0
- 基础库版本:[请填写]
- 微信版本:[请填写]
- 机型:[purx]
- 网络:同一 Wi-Fi(非蜂窝),本机 IP:[请填写]
- 关键日志特征:ssdp sending probe: ... 持续输出
- ssdp raw packet 很少/无
- onLocalServiceFound 很少/无
- 偶发 onLocalServiceResolveFail(空 serviceName)
四、希望官方解答的问题
- 小程序在“局域网设备发现”上的官方能力边界具体是什么?
- 是否保证 mDNS/SSDP 在同网段下一定可用?
- 是否存在平台层面对组播/广播的限制策略?
- 在真机上,createUDPSocket 的接收链路是否存在已知限制或前置条件?
- 如 bind 端口策略、权限声明、机型兼容差异等。
- startLocalServiceDiscovery 在 iOS/Android 的能力差异及已知问题有哪些?
- 对空 serviceName + 参数错误回调是否有官方说明?
- 对“扫描局域网设备”场景,是否有推荐的标准实践或官方示例?
- 例如建议组合 API、推荐重试/超时策略、调试方法。
- 后续是否有计划开放更完整的局域网发现能力(例如更稳定的发现接口)?
