docs(android): adopt login-page legal consent
This commit is contained in:
@@ -30,22 +30,21 @@ npm --prefix mobile-uni run verify:android-apk
|
||||
|
||||
该命令默认校验 `mobile-uni/dist/debug/android_debug.apk` 自定义基座,包括包名、源码版本、`targetSdkVersion`、调试属性、单签名、APK Signature Scheme v2 和 SHA-256。脚本使用 HBuilderX `app-safe-pack` 内的只读 APK 工具;非默认安装目录可通过 `-HBuilderHome` 指定。
|
||||
|
||||
Android 内测包或正式 RC 必须在同一个 PowerShell 会话注入本次签认的两个公开地址,再生成原生隐私配置、构建 App-Plus 资源并执行联网门禁。当前受控内测技术地址如下;正式发布前仍须由公司法务签认正文:
|
||||
Android 内测包或正式 RC 使用版本化的 `mobile-uni/.env` 保存两个公开法务地址,确保 npm 和 HBuilderX 云打包得到同一配置。地址不是秘密,可由 PowerShell 环境变量覆盖;正式发布前仍须由公司法务签认正文:
|
||||
|
||||
```powershell
|
||||
$env:VITE_APP_TERMS_URL = 'https://peilian.njzhmj.top/legal/terms.html'
|
||||
$env:VITE_APP_PRIVACY_URL = 'https://peilian.njzhmj.top/legal/privacy.html'
|
||||
Remove-Item Env:VITE_DEV_SMS_HINT_ENABLED -ErrorAction SilentlyContinue
|
||||
Remove-Item Env:VITE_DEV_SMS_HINT_VALUE -ErrorAction SilentlyContinue
|
||||
npm --prefix mobile-uni run configure:app-privacy
|
||||
npm --prefix mobile-uni run configure:app-legal
|
||||
npm --prefix mobile-uni run build:app
|
||||
npm --prefix mobile-uni run verify:app-release
|
||||
```
|
||||
|
||||
`configure:app-privacy` 会同时校验 HTTPS、公网域名、两个地址互不相同,并从模板生成被 Git 忽略的 `mobile-uni/src/androidPrivacy.json`;`build:app` 再将其复制到 `dist/build/app/androidPrivacy.json`,并把项目根的 `AndroidManifest.xml` 与 `nativeResources/android/res/xml/network_security_config.xml` 同步到云打包输入目录。源码和编译产物都纳入门禁,避免 npm/Vite CLI 项目把原生配置留在源码但未进入安装包而产生假绿。`verify:app-release` 还会确认:
|
||||
`configure:app-legal` 会校验 HTTPS、公网域名和两个地址互不相同,并从模板生成被 Git 忽略的 `mobile-uni/src/androidPrivacy.json`;其唯一职责是明确 `prompt=none`,不再提供启动原生确认。`build:app` 将该配置复制到 `dist/build/app/androidPrivacy.json`,并把项目根的 `AndroidManifest.xml` 与 `nativeResources/android/res/xml/network_security_config.xml` 同步到云打包输入目录。源码、编译产物和实际 APK 都纳入门禁。兼容别名 `configure:app-privacy` 暂时保留。`verify:app-release` 还会确认:
|
||||
|
||||
- 首次与二次隐私弹窗使用同一组地址;
|
||||
- 原生弹窗地址与本次 App 编译使用的 `VITE_APP_TERMS_URL`、`VITE_APP_PRIVACY_URL` 完全一致;
|
||||
- `manifest.json` 使用 `useOriginalMsgbox=false`,`androidPrivacy.json` 使用 `prompt=none`;
|
||||
- 登录页默认未勾选协议,服务协议与隐私政策链接来自本次 App 编译的 `VITE_APP_TERMS_URL`、`VITE_APP_PRIVACY_URL`;
|
||||
- 发送验证码和登录均先通过同一个 `ensureLegalConsent()` 门禁;
|
||||
- 两个页面可通过公网 HTTPS 访问并包含可识别的协议正文;
|
||||
- `VITE_DEV_SMS_HINT_ENABLED` 与 `VITE_DEV_SMS_HINT_VALUE` 均未进入发布环境;
|
||||
- 编译产物不含手机号、固定测试验证码、私钥或常见云端/API 令牌格式。
|
||||
@@ -61,11 +60,11 @@ npm --prefix mobile-uni run verify:app-release
|
||||
|
||||
HBuilderX 5.22 当前实测中,自定义调试基座不支持安心打包,新应用也不能再使用公共测试证书;调试基座改用 DCloud 云端证书并通过普通云打包生成,CLI 项目的产物位于 `mobile-uni/dist/debug/android_debug.apk`。该云端证书和调试 APK 不替代企业正式签名资产。
|
||||
|
||||
自定义基座 APK 只包含原生调试运行壳,业务 `www` 资源由 HBuilderX 真机运行时另行同步,因此不能要求法务链接出现在基座 APK 内。可直接安装分发的 DCloud 云证书内测包必须使用非自定义基座打包,并用 `dcloud-test` 模式从 APK 内置的 `assets/apps/.../www/androidPrivacy.json` 复核两个地址:
|
||||
自定义基座 APK 只包含原生调试运行壳,业务 `www` 资源由 HBuilderX 真机运行时另行同步,因此不能要求登录页法务链接出现在基座 APK 内。可直接安装分发的 DCloud 云证书内测包必须使用非自定义基座打包,并用 `dcloud-test` 模式复核包内 `prompt=none`、`app-service.js` 的两个登录页地址和未勾选拦截:
|
||||
|
||||
```powershell
|
||||
& '.\mobile-uni\scripts\verify-android-apk.ps1' `
|
||||
-ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.10-dcloud-test.apk' `
|
||||
-ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.12-dcloud-test.apk' `
|
||||
-BuildKind dcloud-test
|
||||
```
|
||||
|
||||
@@ -75,13 +74,13 @@ APK 门禁还会比较包内与当前 `dist/build/app/app-service.js` 的 SHA-25
|
||||
|
||||
```powershell
|
||||
.\scripts\prepare-aug1-rc.ps1 `
|
||||
-ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.10-dcloud-test.apk' `
|
||||
-ApkPath '.\mobile-uni\dist\debug\bangdao-0.1.12-dcloud-test.apk' `
|
||||
-BuildKind dcloud-test
|
||||
```
|
||||
|
||||
脚本会复跑移动端测试/类型检查/H5/App 构建、管理端构建、后端定向测试和打包,验证 APK 后在被 Git 忽略的 `output/aug1-rc/` 生成标准文件名、哈希及 JSON/Markdown 证据。它不执行生产同步、数据库迁移、服务重启或用户隐私选择。
|
||||
脚本会复跑移动端测试/类型检查/H5/App 构建、管理端构建、后端定向测试和打包,验证 APK 后在被 Git 忽略的 `output/aug1-rc/` 生成标准文件名、哈希及 JSON/Markdown 证据。它不执行生产同步、数据库迁移、服务重启或登录页人工同意操作。
|
||||
|
||||
2026-07-28 最终自定义基座大小为 `21,158,193` 字节,SHA-256 为 `82D3352FF96A86F5DB4AC0C71DCB0ED6CEC98F2A785F6EAED2FE8D4FC0C5F704`。2026-07-29 当前独立内测候选包为 `bangdao-0.1.10-dcloud-test.apk`:包名 `com.yincheng.wygj`、版本 `0.1.10 (110)`、`targetSdkVersion=35`,大小 `33,922,134` 字节,SHA-256 为 `20CB16B4E9D024DBF5EEEF577BFBA3B4DF5E5E78B597BABB99CB7450C7AE5034`,签名证书 SHA-256 为 `AB06ECC0DE544DE73C385F3F0690B22966EBC12887FB8BEE1830CDBEFDEBEF5D`。APK 反编译门禁已确认包内业务资源等于当前 App-Plus 编译产物,法务配置、敏感值扫描、`usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均通过;本机 Android 15/API 35 虚拟机已从 `0.1.9` 保留数据覆盖升级并在约 `1.271s` 内冷启动,原生隐私弹窗继续显示,四项敏感权限保持未授权且未见 FATAL/ANR。统一 RC 在干净提交 `dc20b920` 上复跑移动端 198/198、`ruoyi-aihr` 698/698 及全部构建/校验门禁,证据为 `output/aug1-rc/0.1.10-110-dc20b920-frozen/`。该包仍使用 DCloud 云端测试证书,只能作为 8 月 1 日受控内测包;企业正式 release 还必须使用签认后的企业证书摘要。
|
||||
2026-07-28 最终自定义基座大小为 `21,158,193` 字节,SHA-256 为 `82D3352FF96A86F5DB4AC0C71DCB0ED6CEC98F2A785F6EAED2FE8D4FC0C5F704`。2026-07-29 当前独立内测候选包为 `bangdao-0.1.12-dcloud-test.apk`:包名 `com.yincheng.wygj`、版本 `0.1.12 (112)`、`targetSdkVersion=35`,大小 `33,921,458` 字节,SHA-256 为 `DD24E5F20BC7C064F5059E538A1FAB7518DF46CBAB502F59A3629F0B1B1F5EBB`,签名证书 SHA-256 为 `AB06ECC0DE544DE73C385F3F0690B22966EBC12887FB8BEE1830CDBEFDEBEF5D`。APK 反编译门禁确认包内业务资源等于当前 App-Plus 编译产物、启动原生隐私提示已关闭、登录页法务链接与未勾选拦截已进入包体,并通过敏感值、`usesCleartextTraffic=false`、`networkSecurityConfig` 和系统证书信任检查。本机 Android 15/API 35 虚拟机全新安装后确认原生隐私层不可见、四项敏感权限未授权且无 Crash/ANR。统一 RC 在干净提交 `b9e08789` 上复跑移动端 199/199、`ruoyi-aihr` 698/698 及全部构建/校验门禁,证据为 `output/aug1-rc/0.1.12-112-b9e08789-frozen/`。该 x86_64 虚拟机无法可靠运行仅含 ARM ABI 的 DCloud Weex 页面,登录页和业务路径必须改由 ARM64 真机验收。该包仍使用 DCloud 云端测试证书,只能作为 8 月 1 日受控内测包;企业正式 release 还必须使用签认后的企业证书摘要。
|
||||
|
||||
企业正式签名 APK 还必须用发布负责人保管的证书摘要执行 release 模式核验;该模式会额外拒绝 `debuggable=true`、明文 HTTP 和签名摘要不一致:
|
||||
|
||||
@@ -94,7 +93,7 @@ APK 门禁还会比较包内与当前 `dist/build/app/app-service.js` 的 SHA-25
|
||||
|
||||
## 发布前尚需提供的资产
|
||||
|
||||
- 当前受控内测版《服务协议》《隐私政策》已部署到 `https://peilian.njzhmj.top/legal/`,服务器发布前备份为 `/opt/wygj/backups/www-20260728224710`;仍需公司法务对正文、处理者信息、第三方清单和保存期限正式签认。Android 已用实际链接配置原生 template 隐私弹窗,iOS 仍需在后续出包时复核相应的麦克风、相机、相册/文件用途说明。
|
||||
- 当前受控内测版《服务协议》《隐私政策》已部署到 `https://peilian.njzhmj.top/legal/`,服务器发布前备份为 `/opt/wygj/backups/www-20260728224710`;仍需公司法务对正文、处理者信息、第三方清单和保存期限正式签认。Android 登录页已使用实际链接且启动不再弹出原生确认;iOS 仍需在后续出包时复核相应的麦克风、相机、相册/文件用途说明。
|
||||
- 无透明通道的 1024×1024 App Store 图标,以及 Android 自适应图标/启动图。
|
||||
- 企业持有的 Android 签名证书、Apple Team、Bundle ID 注册与 iOS 发布证书。上述资产缺失时可以完成代码与真机调试,不能声称已具备商店上架条件。
|
||||
|
||||
@@ -102,7 +101,7 @@ APK 门禁还会比较包内与当前 `dist/build/app/app-service.js` 的 SHA-25
|
||||
|
||||
- 图标和启动图由 `scripts/generate-app-assets.sh` 从现有 `src/static/brand-logo.png` 生成,输出位于 `src/static/app/`,并由 `manifest.json` 显式关联。iOS App Store 图标为 1024×1024、无 alpha、未预制圆角;生成后可用 `npm --prefix mobile-uni run verify:app-assets` 校验尺寸和映射。
|
||||
- 现有品牌源图仅为 64×64,因此这里生成的是**可用于自定义基座和测试包的派生资产**。正式提交商店前应替换为品牌方提供的高分辨率母版,再重新执行生成和预检。
|
||||
- `androidPrivacy.json.example` 是法务配置模板,其中 `__TERMS_URL__` 与 `__PRIVACY_URL__` 只能由生成器替换。不要手工复制或改写;按“本地验证与出包”设置两个 `VITE_APP_*` 环境变量并执行 `configure:app-privacy`,确保原生弹窗、登录页和发布门禁使用同一组地址。生成文件被 Git 忽略,模板和校验逻辑才是版本化事实源。
|
||||
- `androidPrivacy.json.example` 是原生提示策略模板,固定 `prompt=none`;生成文件被 Git 忽略,模板和校验逻辑才是版本化事实源。两个公开法务 URL 的版本化事实源是 `mobile-uni/.env`,`configure:app-legal` 会校验它们,登录页和 APK 门禁必须使用同一组地址。
|
||||
- iOS 已按实际功能填写麦克风和照片库用途说明;不申请相机、定位、通讯录、蓝牙或广告追踪权限。
|
||||
- `build:app` 依赖 `@dcloudio/uni-app-plus`,它必须与 `@dcloudio/uni-app`、`@dcloudio/uni-h5`、`@dcloudio/vite-plugin-uni` 同版本。缺少 App 编译器时命令**不报错**,只静默产出带 `/h5/` 基路径的 H5 空壳,产物里没有 `app-service.js` 与 `app-renderjs.js`,App 平台代码等于从未编译。判定 `build:app` 是否真的成功要看产物中是否存在 `app-service.js`、`app-renderjs.js`、`manifest.json`,不能只看 `DONE Build complete.`。
|
||||
- App-Plus 实时对练通过 `renderjs` 在系统 WebView 中执行媒体/WebRTC;认证 SDP 与工具请求仍由逻辑层代理。发布前必须在 Android/iOS 真机验证麦克风授权、实时转写、远端语音播放、前后台切换和断线降级。
|
||||
|
||||
Reference in New Issue
Block a user