社群改版 2.4.0
此页保留对应版本的历史说明和验收记录。当前 2.5.8 已取消实时语音、视频通话;原通话与 TURN 配置说明不再适用,详见 取消实时通话。
按提供的《社群.docx》调整 APP 和自建服务器。升级时需要同时更新客户端与服务端;保留原服务器数据目录,首次启动自动补齐社群字段和表,保留原账户、卡密、授权、帖子及私信。
页面与发布
社群包含「关注、同城、推荐、供需、广场、私信」,默认打开推荐,点击或左右滑动切换。风险提示由管理员在「设置 → 进入管理后台 → 社群风险提示与官方推荐」修改;普通账户可点提示查看全文。推荐仅管理员发布,授权用户可评论、点赞。所有新发布须填写公开城市和地址。
关注无需好友申请,备注仅设置者可见。关注页显示所关注账户的发布,同城页按填写的城市匹配,广场支持文字和照片。供需卡片和帖子详情均可直接联系作者,私信保持账户之间的一对一模式。
供需按销售、采购、鉴定、合作、其他筛选,支持物品大类、细类、城市、品牌、成色、固定价区间及关键词组合筛选。浮动贵金属报价显示「融回 / 融销 / 上交 +/- 元/克」,不混入固定价格区间。
| 卡片大类 | 细类 | 主要字段 | 照片上限 |
|---|---|---|---|
| 投资性贵金属 | 黄金、白银、铂金、其他 | 源头、克重、销售起拿克重、固定或浮动价格、发货地、发票 | 2 |
| 贵金属首饰 | 黄金、白银、铂金、其他 | 品牌、纯度、克重、型号尺寸、价格、成色、发货地、附件 | 2 |
| 贵金属旧料 | 黄金、白银、铂金、其他 | 纯度、克重、发货地 | 6 |
| 奢侈品 | 包、表、鞋服、配饰、其他 | 品牌、系列、型号、尺寸、备注、价格、成色 | 6 |
| 珠宝玉石 | 钻石、玉石、其他 | 品牌、尺寸或号数、克拉、整体克重、主体及配件材质、证书、发证单位 | 4 |
| 汽车 | 标准、非标 | 品牌、型号、上牌日期、公里数、户籍地、价格、全套或非全证件、备注 | 3 |
| 房产 | — | 地址、面积、房产类型、户型、价格、备注 | 6 |
| 其他 | — | 品牌、价格、成色、备注 | 6 |
所有供需卡片含简介、发布位置和交割方式。到付为默认,可同时选择面交;到付与包邮互斥。投资性贵金属采购无照片时显示贵金属图标,源头默认为无要求;销售默认为无品牌,发票默认为无。
「我的卡片」可一键刷新原卡片,每张卡片两次刷新间隔至少 60 秒。同账户发布完全相同供需内容会返回原卡片,避免重复刷屏。作者可编辑、删除自己的发布,管理员可删除公开违规内容。未发布内容按账户保存为本机草稿。
私信和通话
私信支持文字、图片、APP 内录制的语音和视频。语音最长 60 秒,视频最长 30 秒;服务器解析实际录制文件的时长,拒绝超限内容。录制后可预览、重新录制或发送。客户端上传重试和消息重试保留请求编号,避免重复发送。
语音、视频通话采用 WebRTC,支持呼叫、接听、拒绝、静音、视频开关及挂断,通话结果进入双方私信记录。麦克风和相机由 Android 权限控制。服务器只把通话和信令提供给参与双方,第三方账户及管理员不能读取他人私信附件或信令。
目前来电在 APP 前台轮询提示;退出 APP、切到后台或离开通话页会释放麦克风与相机、结束通话。此版没有系统后台来电通知、推送唤醒或后台持续通话服务。
公网通话配置
同网络直连可使用默认 ICE 配置。不同网络、移动网络或严格 NAT 下,应部署可公网访问的 TURN 中继;仅开放登录服务器的 5188 端口不足以保证音视频连接。运营者在服务端配置中继地址和共享密钥,普通用户没有服务器地址或中继设置入口。
$env:JDJ_TURN_URL = 'turn:你的中继主机:3478?transport=udp'
$env:JDJ_TURN_SECRET = '与 TURN 服务一致的随机共享密钥'
.\启动服务器.ps1
服务端生成一小时有效的账户专属 TURN 凭证,共享密钥留在服务器。与 coturn 的 use-auth-secret 和 static-auth-secret 对应;监听及中继端口应按实际 coturn 配置开放,NAT 部署还要设置公网地址映射。参见 coturn 官方配置说明。
需要多个 ICE 地址时,可使用 JDJ_RTC_ICE_SERVERS JSON,例如 [{"urls":["stun:你的中继主机:3478"]}];有用户名、密码的中继还可填写 username 和 credential。配置通过服务端下发,APP 的登录 API 地址继续在 ServerSettings.BaseUrl 中硬编码。本机测试覆盖实际媒体传输;现有公网服务器和跨运营商 TURN 环境未由本次本机测试部署。
文件与备份
帖子、关注、私有备注、消息、通话记录和媒体元数据保存在 accounts.db。图片、语音、视频文件保存在数据目录的 community-media/,读取接口校验账户、设备授权和可见范围。私信媒体不通过公开静态 URL 暴露。
停服后备份整个数据目录,必须同时保留数据库和 community-media/。升级只替换程序,不能用新空数据目录覆盖旧目录。单图片最多 5 MB,语音或视频最多 25 MB,每账户媒体容量 512 MB;无引用且超过七天的本账户临时上传在下一次上传时清理。
验证
自动检查包含原有业务与授权检查、登录卡密检查、公开内容与社群接口检查,以及新增旧库迁移、组合筛选、卡片重复请求、私人备注、附件权限、通话状态和 TURN 临时凭证检查。
真实媒体检查使用两个独立浏览器客户端录制并发送音视频,验证双方收到音频字节及视频帧,并验证 31 秒视频被服务器拒绝。Pixel 7 / API 36 使用独立测试包 com.xfestudio.jidangjia.authtest 连接本机服务器,测试数据和凭证均在被 Git 忽略的独立目录,不使用公网真实账户。
本次结果:231 项业务与授权检查、24 项登录管理接口检查、60 项实际客户端登录卡密检查、29 项全局内容检查、202 项既有社群接口检查、139 项新增社群接口检查、99 项双浏览器真实媒体检查均通过。Pixel 7 / API 36 通过 45 项原生页面检查和 34 项图片、录制、播放、呼入呼出、拒接及双方通话检查;其中双方视频分别收到 41 帧、24 帧。Android Debug 构建为零警告、零错误;正式 2.4.0 APK 发布成功,升级签名一致,编译后的生产地址保持硬编码公网地址。
可复现接口与真实媒体检查:
dotnet build src/JiDangJia.Server -c Release
node tools/check-community.cjs
node tools/check-community-revision.cjs
node tools/check-community-media.cjs
真实媒体脚本使用 Playwright 与 Edge,JDJ_NODE_PACKAGES 可指定包含 playwright-core 的 node_modules 目录,JDJ_CHROMIUM 可指定浏览器程序;默认从本机 Codex 依赖目录加载 Playwright。
原生 UI 测试先运行 tools/build-community-test.ps1,它创建独立输出目录和硬编码本机地址的测试包,不修改生产源码地址。用 ADB 安装输出的测试 APK,在 Pixel 7 / API 36 上启动。确保本机 5188 端口空闲,在另一个终端运行 node tools/start-community-fixture.cjs,保留此测试服务器运行。首次使用新建的测试服务器时,APP 应停留在登录页;测试凭证只写入被 Git 忽略的 artifacts/test-data/community-revision/fixture.json。依次执行以下脚本:
node tools/check-community-ui.cjs login
node tools/check-community-ui.cjs feeds
node tools/check-community-ui.cjs forms
node tools/check-community-android-media.cjs capture
node tools/check-community-android-media.cjs calls
node tools/check-community-android-media.cjs outgoing
node tools/check-community-android-media.cjs image
node tools/check-community-ui.cjs admin
node tools/check-community-ui.cjs navigation
本机 Emulator 35.5.10 曾在播放视频时退出进程;使用 -gpu swiftshader_indirect -feature -Vulkan,-HardwareDecoder 重新启动后通过语音、视频播放及双方通话验收。这些是本次模拟器启动参数。Android 官方排障说明也提供了禁用 Vulkan 的启动选项。
结果及界面证据保存在 artifacts/verification/community-*.json、community-*.txt 和 community-*.png。