diff --git a/.gitignore b/.gitignore
index 2778c02..858d4c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,6 @@ unpackage
project.config.json
.hbuilderx
/config/app.js
+
+# Android 签名证书(私钥,禁止入库;见 manifest.json app-plus.distribute.android.keystore)
+keystore/
diff --git a/androidPrivacy.json b/androidPrivacy.json
index 917e0f4..5257f39 100644
--- a/androidPrivacy.json
+++ b/androidPrivacy.json
@@ -1,28 +1,28 @@
{
- "version" : "1",
- "prompt" : "template",
- "title" : "用户协议与隐私政策",
- "message" : "\t请务必审慎阅读、充分理解“用户协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。
- 你可以阅读 《用户协议》与 《隐私政策》了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。",
- "buttonAccept" : "同意并接受",
- "buttonRefuse" : "暂不同意",
- "second" : {
- "title" : "确认提示",
- "message" : "进入应用前,你需先同意《用户协议》与《隐私政策》,否则将退出应用。",
- "buttonAccept" : "同意并继续",
- "buttonRefuse" : "退出应用"
+ "version": "1",
+ "prompt": "template",
+ "title": "用户协议与隐私政策",
+ "message": "\t请务必审慎阅读、充分理解“用户协议与 隐私政策”各条款,包括但不限于:为了 向你提供即时通讯、内容分享等服务,我 们需要收集你的设备信息、操作日志等个 人信息。你可以在“设置”中查看、变更、删除个人信息并管理你的授权。
你可以阅读 《用户协议》与 《隐私政策》了解详细信息。如你同意,请点击“我同意”开始接受我们的服务。",
+ "buttonAccept": "同意并接受",
+ "buttonRefuse": "暂不同意",
+ "backToExit": "true",
+ "second": {
+ "title": "确认提示",
+ "message": "进入应用前,你需先同意《用户协议》与《隐私政策》,否则将退出应用。",
+ "buttonAccept": "同意并继续",
+ "buttonRefuse": "退出应用"
},
- "styles" : {
- "backgroundColor" : "#fff",
- "borderRadius" : "5px",
- "title" : {
- "color" : "#000"
+ "styles": {
+ "backgroundColor": "#fff",
+ "borderRadius": "5px",
+ "title": {
+ "color": "#000"
},
- "buttonAccept" : {
- "color" : "#fff"
+ "buttonAccept": {
+ "color": "#fff"
},
- "buttonRefuse" : {
- "color" : "#ccc"
+ "buttonRefuse": {
+ "color": "#ccc"
}
}
}
diff --git a/config/legal.js b/config/legal.js
new file mode 100644
index 0000000..48d688b
--- /dev/null
+++ b/config/legal.js
@@ -0,0 +1,30 @@
+// +----------------------------------------------------------------------
+// | 合规展示信息(主体 / 备案号)
+// +----------------------------------------------------------------------
+// | 用途:小米、华为等商店硬性要求「应用内可见 APP 备案号」(截图要体现),
+// | 而备案号在开发期还不存在 —— 统一收在这一个文件,号下来只改这里。
+// |
+// | 为什么不放 config/app.js:那个文件在 .gitignore 里(本地私有配置),
+// | 放进去等于不进仓库、换个环境就丢;也不写死在页面里:同一个号要出现在
+// | 设置页与登录页两处,写死两份必然不同步。
+// |
+// | 使用位置:
+// | pages/users/user_set/index.vue 「我的 → 设置」底部的关于区块
+// | pages/users/login/index.vue 登录页页脚(未登录也能看到)
+// | ⚠️ 两处展示都包在 #ifdef APP-PLUS 里:小程序 / H5 的界面与行为不受影响。
+// +----------------------------------------------------------------------
+
+module.exports = {
+ /**
+ * APP 备案号:ICP 备案号 + 「-序号A」后缀,例:京ICP备17065521号-3A
+ * 空字符串 = 不展示该行(备案号下发前保持为空,避免截图里出现占位文案被商店挑刺)
+ * ⚠️ 号码下发后填这里 → 重新出包;不要去改页面。
+ */
+ APP_BEIAN_NO: '',
+
+ /** 网站/主体 ICP 备案号(已有,官网与小程序在用) */
+ WEBSITE_ICP_NO: '京ICP备17065521号',
+
+ /** 备案主体 = 软著著作权人(北京臻惠网络科技有限公司)—— 三处必须一致,改名要同步软著与备案 */
+ SUBJECT: '北京臻惠网络科技有限公司'
+};
diff --git a/manifest.json b/manifest.json
index 2749dc3..966dc2a 100644
--- a/manifest.json
+++ b/manifest.json
@@ -8,6 +8,11 @@
"sassImplementationName" : "node-sass",
/* 5+App特有相关 */
"app-plus" : {
+ /* 隐私政策提示框开关:template = 启动时在 splash 层弹原生隐私框(上架硬性要求)。
+ 提示框内容/样式在同目录 androidPrivacy.json,两者必须同时存在且 JSON 合法。 */
+ "privacy" : {
+ "prompt" : "template"
+ },
"usingComponents" : true,
"nvueCompiler" : "uni-app",
"nvueStyleCompiler" : "uni-app",
@@ -19,6 +24,11 @@
"distribute" : {
/* android打包配置 */
"android" : {
+ "packagename" : "com.yizhezhe.douba",
+ "keystore" : "keystore/douba-shop.keystore",
+ "password" : "douba@2026",
+ "aliasname" : "douba",
+ "schemes" : "douba",
"permissions" : [
"",
"",
@@ -26,24 +36,18 @@
"",
"",
"",
- "",
"",
- "",
"",
"",
"",
"",
"",
- "",
- "",
- "",
"",
"",
"",
- "",
- ""
+ ""
],
- "abiFilters" : [ "armeabi-v7a" ],
+ "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
"permissionExternalStorage" : {
"request" : "none",
"prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
@@ -53,8 +57,8 @@
"prompt" : "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许"
},
"minSdkVersion" : 21,
- "targetSdkVersion" : 30, // 建议设置为 30 或更高
- "compileSdkVersion" : 30
+ "targetSdkVersion" : 34, // 商店普遍要求 30+,34 为稳妥档(36 需同步验证);API 34 起前台服务/权限更严
+ "compileSdkVersion" : 36 // HBuilderX 4.81+ 适配 16KB page size 要求 36
},
/* ios打包配置 */
"ios" : {
@@ -82,8 +86,8 @@
"payment" : {
"weixin" : {
"__platform__" : [ "ios", "android" ],
- "appid" : "wx3e14a895971fbea6",
- "UniversalLinks" : "https://pro.crmeb.net/uni-universallinks/__UNI__7E0054B/"
+ "appid" : "wxbe5081d4835af21b",
+ "UniversalLinks" : "https://mp.yizhezhe.com/uni-universallinks/__UNI__52BA861/"
},
"alipay" : {
"__platform__" : [ "ios", "android" ]
@@ -91,8 +95,8 @@
},
"share" : {
"weixin" : {
- "appid" : "wx3e14a895971fbea6",
- "UniversalLinks" : "https://pro.crmeb.net/uni-universallinks/__UNI__7E0054B/"
+ "appid" : "wxbe5081d4835af21b",
+ "UniversalLinks" : "https://mp.yizhezhe.com/uni-universallinks/__UNI__52BA861/"
}
},
"push" : {},
@@ -104,9 +108,9 @@
},
"oauth" : {
"weixin" : {
- "appid" : "wx3e14a895971fbea6",
- "appsecret" : "ee83a6c94edbc5dd7a5b4614316d85a7",
- "UniversalLinks" : "https://pro.crmeb.net/uni-universallinks/__UNI__7E0054B/"
+ "appid" : "wxbe5081d4835af21b",
+ "appsecret" : "5dafb0ed5b106eb8f56f70824893f7ec",
+ "UniversalLinks" : "https://mp.yizhezhe.com/uni-universallinks/__UNI__52BA861/"
},
"apple" : {}
},
diff --git a/pages/users/login/index.vue b/pages/users/login/index.vue
index 806f367..bf54c5e 100644
--- a/pages/users/login/index.vue
+++ b/pages/users/login/index.vue
@@ -78,6 +78,10 @@
《用户协议》
与《隐私协议》
+
+
+ APP 备案号:{{ beianNo }}
+
@@ -116,6 +120,7 @@
import colors from '@/mixins/color.js';
import Verify from '../components/verify/verify.vue';
import { HTTP_REQUEST_URL, CAPTCHA_TYPE } from '@/config/app';
+ import legal from '@/config/legal.js';
export default {
name: "Login",
components: {
@@ -147,6 +152,8 @@
appleShow: false, // 苹果登录版本必须要求ios13以上的
keyLock: true,
copyrightContext:'',
+ // App 备案号(商店要求应用内可见):号未下发时为空 → 该行不渲染
+ beianNo: legal.APP_BEIAN_NO,
};
},
watch: {
@@ -798,6 +805,14 @@
color: var(--view-theme);
}
+ /* App 备案号:字号比协议再小一档,避免抢协议勾选的视觉重心 */
+ .beian {
+ margin-top: 14rpx;
+ font-size: 20rpx;
+ line-height: 28rpx;
+ color: #b5b5b5;
+ }
+
.trembling {
animation: shake 0.6s;
}
diff --git a/pages/users/user_set/index.vue b/pages/users/user_set/index.vue
index ed278f2..698b660 100644
--- a/pages/users/user_set/index.vue
+++ b/pages/users/user_set/index.vue
@@ -5,6 +5,7 @@ import { mapGetters, mapMutations } from 'vuex';
import colors from '@/mixins/color.js';
import tuiModal from '@/components/tui-modal/index.vue';
import NavBar from '@/components/NavBar.vue';
+import legal from '@/config/legal.js';
export default {
computed: mapGetters(['isLogin']),
data() {
@@ -15,7 +16,11 @@ export default {
loginType: 'h5',
showModal: false,
version: '',
- fileSizeString: ''
+ fileSizeString: '',
+ // 关于区块的合规信息(App 内必须可见备案号):统一取 config/legal.js
+ beianNo: legal.APP_BEIAN_NO,
+ icpNo: legal.WEBSITE_ICP_NO,
+ subject: legal.SUBJECT
};
},
mixins: [colors],
@@ -149,6 +154,28 @@ export default {
+
+
+
+
+ 当前版本
+ {{ version || '—' }}
+
+
+ APP 备案号
+ {{ beianNo }}
+
+
+ ICP 备案号
+ {{ icpNo }}
+
+
+ 开发者
+ {{ subject }}
+
+
+
@@ -230,6 +257,15 @@ export default {
}
}
+ /* 右侧纯文本值(版本号 / 备案号 / 主体):备案号可能较长,允许换行 */
+ .value {
+ color: #999;
+ font-size: 26rpx;
+ max-width: 60%;
+ text-align: right;
+ word-break: break-all;
+ }
+
/deep/.uni-switch-input {
width: 84rpx;
height: 48rpx;