当前位置: 首页 > news >正文

uniapp开发的项目上传到国内主流应用市场(华为、小米、oppo、vivo)

manifest中的配置

基础配置

AppID: uniapp创建项目后会自动生成,不能随意变更。

应用名称:发行为App时作为应用桌面图标的名称。

应用描述:用于简单介绍应用情况,发行为App时不会使用。可以不填。

应用版本名称:云端打包后设置为原生工程的应用版本名称。如:主版本号.次版本号.编译版本号

应用版本号:应用的内部版本号,必须使用整数,用于记录开发版本的。建议每次发布(云端打包)时更新为比上一次高。云端打包后设置为原生工程的应用版本号。安装时只能高版本的安装包覆盖升级低版本的安装包,提交各应用市场时也要求必须更新为比上次高的版本。

图标配置

在“自动生成图标”部分选择图标(1024*1024),点击“自动生成所有图标并替换”。

启动界面

 安卓隐私政策

请在《隐私政策》中必告知用户您的应用基于DCloud uni-app(5+ App/Wap2App)开发,增加如下参考条款

我们的产品基于DCloud uni-app(5+ App/Wap2App)开发,应用运行期间需要收集您的设备唯一识别码(IMEI/android ID/DEVICE_ID/IDFA、SIM 卡 IMSI 信息、OAID)以提供统计分析服务,并通过应用启动数据及异常错误日志分析改进性能和用户体验,为用户提供更好的服务。详情内容请访问《DCloud用户服务条款》。(DCloud用户服务条款超链至:https://ask.dcloud.net.cn/protocol.html)

androidPrivacy.json文件配置隐私政策提示框。注意配置《隐私政策》和《服务协议》的链接地址。

注意!androidPrivacy.json不要添加注释,会影响隐私政策提示框的显示!!! 

 androidPrivacy.json:

{"version": "1","prompt": "template","title": "服务协议和隐私政策","message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"static\/privacy\/agreement.html\">《服务协议》</a>和<a href=\"static\/privacy\/privacy.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。","buttonAccept": "同意并接受"
}

配置文档:uni-app官网 

ios隐私政策弹窗

// app.vue 的 onLaunch 中添加        // 获取系统类型const platform = uni.getSystemInfoSync().platform// iOS隐私控制if (platform === 'ios' && !uni.getStorageSync('privacyAgreed')) {// 未同意隐私协议,跳转到隐私协议页uni.navigateTo({url: '/pages/ios-privacy/ios-privacy',success: () => {plus.navigator.closeSplashscreen()}})} else {// 已同意隐私协议,跳转到首页uni.switchTab({url: '/pages/index/index',success: () => {plus.navigator.closeSplashscreen()}})}
//pages.json中添加
{"path": "pages/ios-privacy/ios-privacy","style": {"navigationStyle": "custom","disableSwipeBack": true,"app-plus": {"animationType": "none","bounce": "none"}}},
//ios-privacy.vue<template><view class="privacy-container"><!-- 半透明背景层 --><view class="mask" :style="{ backgroundColor: maskColor }"></view><!-- 弹窗主体 --><view class="dialog" :style="dialogStyle"><view class="title">服务协议和隐私政策</view><scroll-view class="content" scroll-y>请您务必审慎阅读、充分理解<text class="link" @tap="openAgreement(1)">《服务协议》</text>和<text class="link" @tap="openAgreement(2)">《隐私政策》</text>各条款,包括设备标识收集、数据分析等核心内容。</scroll-view><view class="button-group"><button class="btn refuse" @click="handleDisagree">暂不同意</button><button class="btn agree" @click="handleAgree">同意并继续</button></view></view></view>
</template><script>
export default {data() {return {maskColor: 'rgba(0,0,0,0.6)', // 更深的背景遮罩dialogStyle: {width: '75%',borderRadius: '14px',backgroundColor: '#fff',boxShadow: '0 4px 12px rgba(0,0,0,0.15)'}}},methods: {// 协议跳转(动态获取链接)openAgreement(type) {if (type === 1) {// 服务协议uni.navigateTo({ url: '/pages/account/docs/user-agreement' })} else {// 隐私政策uni.navigateTo({ url: '/pages/account/docs/pravicy-policy' })}},// 同意处理handleAgree() {uni.setStorageSync('privacyAgreed', '1')uni.reLaunch({ url: '/pages/index/index' })plus.navigator.closeSplashscreen()},// 拒绝处理(iOS退出)handleDisagree() {if (plus.os.name.toLowerCase() === 'ios') {const application = plus.ios.import("UIApplication").sharedApplication()application.performSelector("exit")}}}
}
</script><style lang="scss">
.privacy-container {position: fixed;width: 100%;height: 100%;z-index: 9999;display: flex;align-items: center;justify-content: center;.mask {position: absolute;width: 100%;height: 100%;}.dialog {position: relative;padding: 22px 20px;transform: translateY(-10%); // 稍微上移.title {font-size: 17px;font-weight: 600;text-align: center;margin-bottom: 12px;color: #333;}.content {height: 120px; // 减少高度font-size: 14px;line-height: 1.6;margin-bottom: 16px; // 减少与按钮的间距color: #666;padding: 0 4px;.link {color: #007AFF;}}.button-group {display: flex;border-top: 0.5px solid #e5e5e5;padding-top: 16px;.btn {flex: 1;margin: 0 6px;height: 38px;line-height: 38px;font-size: 15px;border-radius: 8px;font-weight: 500;border: none; /* 移除默认边框 */outline: none; /* 移除点击时的轮廓线 */position: relative; /* 为伪元素定位做准备 */overflow: hidden; /* 处理可能的边框溢出 *//* 使用after伪元素改善按钮边缘 */&:after {content: '';position: absolute;top: 0;left: 0;width: 200%;height: 200%;transform: scale(0.5);transform-origin: 0 0;pointer-events: none;box-sizing: border-box;border: 0;  /* 完全移除uni-app默认边框 */border-radius: 16px;  /* 因为缩放了0.5,所以这里是8px的2倍 */}&.refuse {background-color: #f2f2f2;color: #666;}&.agree {background-color: #007AFF;color: #fff;}}}}
}
</style>

打包

使用hbuilderx中的云打包功能,提交云打包申请。

云打包失败案例

在经过一系列的manifest修改后,打包出现如下错误:

错误日志中出现这样的信息:

[Error] W: error: invalid manifest package override '~'.

 原因:manifest中有错误,IDE中没有提示,将manifest修改正确后,再次打包就可以了。

提交到应用市场

先提交到vivo应用市场,会自动同步到:OPPO、荣耀、小米。

vivo地址:vivo开放平台

按照提示填写资料提交审核即可。

常见问题

1、应用名称、开发者名称、隐私政策中的应用名称和开发者、软著上的应用名称和开发者,必须保持一致,一个字都不能错!

2、如果一个软著对应有2个应用,如A-用户端、A-工程师端,需要保持应用名称的主标题与软著上的名字完全相同,不同端用副标题区分,且在审核备注中说明清楚。

3、隐私政策中必须将所有用到的权限都明确说明,隐私政策需要有远程链接地址。

4、应用截图中不能有二维码、手机号等敏感信息。

5、app必须备案,且保证一个应用对应一个备案,应用名称、包名、开发者必须保持一致。

6、提交审核前,先在隐私自检中提交隐私自检,通过后再提交上架审核。

7、一句话简介中出现的名称需要和应用名称或开发者主体保持一致。

8、APP隐私政策中公示的SDK要与全国SDK管理服务平台登记SDK公示信息完全一致,要求一致的公示信息包括:SDK名称,开发者信息,隐私政策链接。

全国SDK管理服务平台:

全国SDK管理服务平台-汇聚全网主流SDK产品,指引正品SDK下载

9、app中SDK隐私安全检测常见问题:

OPPO 开放平台-OPPO开发者服务中心

10、UniApp 引擎即使未勾选广告模块,其底层公共类(如 io.dcloud.ad.*)仍可能被隐私检测工具误判为广告 SDK 存在:

检测出数字天堂uni-AD原生广告SDK及相关权限使用:mac 传感器 软件安装列表

问题参考链接:在OPPO应用商店被标记“有广告”,是数字天堂的问题 - DCloud问答

解决办法:

(1)使用最新版本hbuilderx打包做隐私自检

(2)修改隐私政策,把dcluod的隐私协议挂到自己的隐私政策里面去,然后直接提交审核,并在审核备注里面说明:本应用基于 DCloud UniApp 框架开发,检测到的 "uni-ad 原生广告"或“数字天堂uni-AD原生广告” 相关代码和权限使用为框架默认集成的启动逻辑复用代码,并非实际广告功能。已通过 manifest.json 禁用广告模块,并在隐私政策中补充说明。应用内无uni-ad相关行为,敬请审核。

11、外链功能合规要求​

  • ​功能归属声明​​:需在应用描述页标注"商城功能为第三方网页服务"
  • ​隐私政策说明​​:明确外链功能的数据处理方(如"支付由XX平台独立完成")、
***功能为外部网页服务,由***独立运营。在相关功能中,我们不会收集或处理您的个人信息,也不会向第三方应用提供您的个人信息。

12、manifest中多余的权限申请需要删除

13、Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息 - DCloud问答 

14、功能模块只勾必要的,且如果勾了,要在隐私政策中明确说明用途

uni-app官网

15、安卓权限配置参考:

uni-app官网

PS:如果你不确定权限部分的代码都是什么意思,不确定自己用到没,把权限代码全部复制到deepseek中问:含义、用途、必要性

16、manifest配置文档:

manifest.json 应用配置 | uni-app官网 

17、隐私检测不通过时,下载报告和堆栈信息,到deepseek中分析一下。 

18、隐私检测不通过:用户同意隐私政策后,存在收集软件列表、设备MAC地址的行为。

仔细看,标题说的是mac地址这一项,但改进建议中说明具体是因为传感器信息的收集 。

需要排查uniapp云打包相关的权限移除了没:

如果移除了,需要排查自身有没有用到传感器,很多第三方SDK和库会用到传感器信息,如图表、签字等,需要加到隐私政策中:

 

http://www.xdnf.cn/news/350515.html

相关文章:

  • COLT_CMDB_aix_diskinfo.sh
  • OCCT中的基础变换
  • C++卡特兰数讲解
  • Java 显式锁与 Condition 的使用详解
  • Android MVC架构的现代化改造:构建清晰单向数据流
  • AI搜索的未来:技术纵深发展与关键突破路径
  • Kubernetes 手动部署 Prometheus 学习计划
  • 【计算机网路】--tcp四次挥手关闭连接
  • pm2 list查询服务时如何通过name或者namespace进行区分
  • 文本文件的定义
  • CTF杂项入门(BUUCTF-Misc第一页)
  • Python机器学习中的字典列表特征提取
  • 基于vue3+QuillEditor的深度定制
  • [数据库之十四] 数据库索引之位图索引
  • 最短路径-Dijkstra及其堆优化版本
  • 指纹浏览器技术解析:从原理到实战的多账号管理解决方案
  • 数据清洗(ETL/ELT)原理与工具选择指南:企业数字化转型的核心引擎
  • 常用 svg ICON
  • FreeRTOS如何检测内存泄漏
  • Linux操作系统中的通知机制 - 监控文件事件 inotify
  • 印度股票市场API对接文档
  • 麒麟信安举办特种行业核心代理商中级技术认证培训班
  • 【计网】TCP/IP四层模型(一)
  • [硬件电路-18]:MCU - LPC1765FBD100是恩智浦(NXP)半导体推出的一款基于ARM Cortex-M3内核的高性能32位微控制器
  • 如果说开启的TIM3定时器有ccr1,ccr2,ccr3,我想要关闭ccr2的PWM输出,怎么通过代码实现
  • AI优化高频PCB信号完整性:猎板PCB的技术突破与应用实践
  • 多环串级PID
  • 主场景 工具栏 植物卡牌的渲染
  • 从“看不见”到“一目了然”:网络流量分析与监控大屏
  • 手撕基于AMQP协议的简易消息队列-6(服务端模块的编写)