用户反馈"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:
@@ -38,6 +38,23 @@ cd android
|
||||
gradle :app:assembleDebug # 或 ./gradlew(wrapper 需 Android Studio 补齐)
|
||||
```
|
||||
|
||||
## 连不上后端?先看这三件事
|
||||
|
||||
1. **后端要监听所有网卡**:`uvicorn app.main:app --host 0.0.0.0 --port 8100`。
|
||||
默认的 `127.0.0.1` 只有本机可见,手机连不上。
|
||||
2. **地址要填对**:包里的默认值是模拟器地址 `http://10.0.2.2:8100`。
|
||||
真机在登录页点「改地址」填电脑的局域网 IP(如 `http://192.168.8.151:8100`),
|
||||
点「测试连接」看到「连得通」再登录。改一次会记住,不用重新打包。
|
||||
3. **防火墙**:Windows 没弹过「允许访问」的话,手机包会被丢。管理员 PowerShell 执行
|
||||
`New-NetFirewallRule -DisplayName "DadaoTask backend 8100" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8100 -Profile Private`。
|
||||
|
||||
还有一个容易查半天的点:主清单配了 `network_security_config`(白名单只有
|
||||
`10.0.2.2/127.0.0.1/localhost`),这种情况下 `android:usesCleartextTraffic="true"` **不生效**,
|
||||
真机连 `http://192.168.8.x` 会被系统拦成 "CLEARTEXT communication not permitted",
|
||||
表现就是"点了登录没反应/登录不上去",而模拟器一切正常。
|
||||
所以 `android/app/src/debug/res/xml/network_security_config.xml` 单独给 debug 放开了明文,
|
||||
release 依旧只走 HTTPS 白名单。
|
||||
|
||||
## 连哪个后端
|
||||
|
||||
`android/local.properties`(不入库):
|
||||
|
||||
Reference in New Issue
Block a user