用户反馈"app 端登录不上去"。查下来是两个叠在一起的问题,都不是"后台没开": 1) 主清单设了 android:networkSecurityConfig(白名单只有 10.0.2.2 / 127.0.0.1 / localhost), 而它的优先级高于 debug 清单里的 android:usesCleartextTraffic="true"。 所以真机连 http://192.168.8.x:8100 会被系统拦成 CLEARTEXT communication not permitted, 表现成登录无反应;模拟器因为地址在白名单里,一切正常,很容易误判。 → 新增 app/src/debug/res/xml/network_security_config.xml,debug 放开明文; release 仍只有白名单,线上必须 HTTPS。 2) 后端地址编译期写死 BuildConfig.API_BASE = http://10.0.2.2:8100,那是模拟器专用地址。 → 登录页加「服务器:… / 改地址」:可改、可「测试连接」、存在 TokenStore 里, 改一次就记住,不用重新打包。地址缺失协议时自动补 http://。 顺带把网络异常翻成人话:以前 OkHttp 抛 IOException 原样冒到界面, 现在统一成「连不上 <地址> —— 具体该去查什么」,并区分了 "10.0.2.2 是模拟器地址"、"127.0.0.1 在手机上指的是手机自己"两种情况; 连不上时自动展开地址面板。 后端这边没有代码改动,但真机要用 --host 0.0.0.0 启动(原来只监听 127.0.0.1), 已写进 DEVELOPMENT.md 与 android/README.md,附防火墙放行命令。 实测:模拟器内把地址改成 http://192.168.8.151:8100 → 测试连接「连得通」→ 取码(开发环境验证码回显)→ 登录成功进入工作区列表。
This commit is contained in:
+42
-2
@@ -129,7 +129,47 @@ VECTOR_DATABASE_URL=postgresql+asyncpg://dadao_app:dadao_dev_pw@127.0.0.1:5434/d
|
||||
> 当前这台机器 Docker 起不来(见下),所以向量库还没真正跑起来,
|
||||
> 上面是配置与脚本,M3 开工前必须先把它跑通。
|
||||
|
||||
## 8. 常见坑
|
||||
## 8. 让安卓真机连上本地后端
|
||||
|
||||
手机连不上后端,90% 是这三件事之一,按顺序查:
|
||||
|
||||
**① 后端有没有监听所有网卡**
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
.venv\Scripts\python.exe -m uvicorn app.main:app --host 0.0.0.0 --port 8100
|
||||
```
|
||||
|
||||
`--host 127.0.0.1`(uvicorn 默认)只对本机可见,手机必然连不上。用 `0.0.0.0` 之后:
|
||||
|
||||
```powershell
|
||||
Invoke-RestMethod http://192.168.8.151:8100/health # 换成你自己的局域网 IP
|
||||
```
|
||||
|
||||
**② 手机上填的地址对不对**
|
||||
|
||||
APK 里默认写的是 `http://10.0.2.2:8100`(模拟器映射宿主机的地址),真机连不上它。
|
||||
在**登录页 → 服务器:… → 改地址**里填电脑的局域网 IP,点「测试连接」看到「连得通」再登录。
|
||||
地址存在本地,改一次即可,不需要重新打包。
|
||||
|
||||
**③ 防火墙**
|
||||
|
||||
Windows 上 python.exe 首次监听端口时如果没弹「允许访问」,手机连过来的包会被丢。
|
||||
以**管理员**运行一次:
|
||||
|
||||
```powershell
|
||||
New-NetFirewallRule -DisplayName "DadaoTask backend 8100" -Direction Inbound `
|
||||
-Action Allow -Protocol TCP -LocalPort 8100 -Profile Private
|
||||
```
|
||||
|
||||
**关于明文 HTTP**:Android 从 9 开始默认禁止明文流量。主清单里配了
|
||||
`network_security_config`(只放行 `10.0.2.2/127.0.0.1/localhost`),而
|
||||
`android:usesCleartextTraffic` 一旦和它同时存在就不再生效——这就是"真机怎么都登不上、
|
||||
但模拟器正常"的根因。所以 debug 变体单独放了一份
|
||||
`android/app/src/debug/res/xml/network_security_config.xml` 允许明文;
|
||||
release 仍走白名单,线上域名必须 HTTPS。
|
||||
|
||||
## 9. 常见坑
|
||||
|
||||
| 现象 | 原因 | 处理 |
|
||||
|---|---|---|
|
||||
@@ -180,7 +220,7 @@ VECTOR_DATABASE_URL=postgresql+asyncpg://dadao_app:dadao_dev_pw@127.0.0.1:5434/d
|
||||
- **安装类命令一律写日志文件再 tail**,不要用管道截断输出,否则看不到进度也不知道卡在哪。
|
||||
- `npm install` 要加 `--ignore-scripts`:沙箱不允许 npm 的 lifecycle 脚本派生进程(`EPERM spawn`)。
|
||||
|
||||
## 9. 提交前自检清单
|
||||
## 10. 提交前自检清单
|
||||
|
||||
1. `pytest` 全绿,`ruff` 无告警。
|
||||
2. 新增租户表时:`workspace_id NOT NULL` + RLS 策略 + 跨租户测试,三者齐全。
|
||||
|
||||
Reference in New Issue
Block a user