Swift项目本地部署Supabase后Realtime Channel无法监听数据变更
问题分析与解决建议
本地Supabase使用HTTP协议确实会导致Realtime Channel无法正常工作,原因及解决方法如下:
核心原因
- Realtime功能依赖WebSocket协议:本地HTTP环境下,Supabase Realtime使用的是
ws://协议,而iOS的App Transport Security(ATS)即使开启了Allow Arbitrary Loads,对WebSocket的非安全连接(ws://)依然可能存在限制——Allow Arbitrary Loads主要放宽HTTP/HTTPS普通请求的限制,对WebSocket的管控逻辑有区别。 - 查询功能不受影响的原因:普通数据查询使用HTTP/HTTPS请求,
Allow Arbitrary Loads已允许这类非安全连接请求,因此可以正常工作。
解决方法
1. 给本地Supabase配置HTTPS(推荐方案)
- 生成自签名SSL证书,配置本地Supabase实例使用HTTPS。此时Realtime会自动使用
wss://协议,符合ATS安全要求,无需额外绕开限制。 - iOS端需信任该自签名证书:将证书安装到设备后,进入「设置」-「通用」-「关于本机」-「证书信任设置」,开启对应证书的信任开关。
2. 调整ATS配置以允许ws://连接(仅开发环境使用)
- 在
Info.plist中添加更具体的ATS例外配置,针对本地Supabase的域名允许非安全WebSocket连接:
替换<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>your-local-supabase-domain.com</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>your-local-supabase-domain.com为你本地Supabase的实际域名或IP(比如localhost)。
3. 检查本地Supabase的Realtime配置
- 确认本地Supabase的Realtime服务已正确启用,并且目标表已开启Realtime监听权限:
- 在Supabase Dashboard的「Realtime」面板中,检查对应表是否已添加到监听列表。
- 确保表的RLS(行级安全)规则允许Realtime连接的用户进行相关操作。
内容的提问来源于stack exchange,提问作者Asif Syeed
相关产品推荐
相关产品推荐

