m***@163.com
m***@163.com
  • 发布:2026-06-09 14:22
  • 更新:2026-06-09 14:23
  • 阅读:30

android上架应用市场审核失败

分类:uni-app

错误说明

未经用户同意,SDK存在DCloud 开发通用工具库获取摄像头的行为

manifest.json

{  
    "name": "xxx",  
    "appid": "__UNI__00000",  
    "description": "xxx",  
    "versionName": "0.3.1",  
    "versionCode": 31,  
    "transformPx": false,  
    /* 5 App特有相关 */  
    "app-plus": {  
        "usingComponents": true,  
        "nvueStyleCompiler": "uni-app",  
        "compilerVersion": 3,  
        "screenOrientation": [  
            //可选,字符串数组类型,应用支持的横竖屏  
            "portrait-primary" //可选,字符串类型,支持竖屏  
        ],  
        "splashscreen": {  
            "alwaysShowBeforeRender": true,  
            "waiting": true,  
            "autoclose": true,  
            "delay": 0  
        },  
        /* 模块配置 */  
        "modules": {  
            "Camera": {},  
            "VideoPlayer": {},  
            "Payment": {},  
            "Barcode": {},  
            "Share": {},  
            "Record": {}  
        },  
        /* 应用发布信息 */  
        "distribute": {  
            /* android打包配置 */  
            "android": {  
                "permissions": [  
                    "<uses-feature android:name=\"android.hardware.camera\"/>",  
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",  
                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",  
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",  
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",  
                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",  
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",  
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",  
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",  
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",  
                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",  
                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",  
                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",  
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",  
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",  
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",  
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",  
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",  
                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",  
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"  
                ],  
                "autoSdkPermissions": false,  
                "abiFilters": ["arm64-v8a", "x86"],  
                "schemes": "smgapp",  
                "targetSdkVersion": 30,  
                "minSdkVersion": 23  
            },  
            /* ios打包配置 */  
            "ios": {  
                "dSYMs": false,  
                "idfa": false,  
                "privacyDescription": {  
                    "NSPhotoLibraryUsageDescription": "用于从手机相册选择图片上传、发布内容时选取本地照片,例如更换头像、提交商品售后选择图片",  
                    "NSPhotoLibraryAddUsageDescription": "用于将拍摄的图片、生成的海报保存到您的系统相册,方便您查看和分享",  
                    "NSCameraUsageDescription": "用于拍摄照片、头像上传、提交商品售后图片时拍照使用,例如上传商品图片、更换个人头像"  
                },  
                "UIBackgroundModes": []  
            },  
            /* SDK配置 */  
            "sdkConfigs": {  
                "share": {  
                    "weixin": {  
                        "appid": "wx1617b10d4f8f2159",  
                        "UniversalLinks": "https://mall.szcaifuyun.cn/ios/"  
                    }  
                },  
                "ad": {},  
                "payment": {  
                    "alipay": {  
                        "__platform__": ["ios", "android"]  
                    },  
                    "weixin": {  
                        "__platform__": ["ios", "android"],  
                        "appid": "wx1617b10d4f8f2159",  
                        "UniversalLinks": "https://mall.szcaifuyun.cn/ios/"  
                    }  
                },  
                "oauth": {},  
                "geolocation": {  
                    "system": {  
                        "__platform__": ["ios", "android"]  
                    }  
                },  
                "maps": {}  
            },  
            "icons": {  
                "android": {  
                    "hdpi": "unpackage/res/icons/72x72.png",  
                    "xhdpi": "unpackage/res/icons/96x96.png",  
                    "xxhdpi": "unpackage/res/icons/144x144.png",  
                    "xxxhdpi": "unpackage/res/icons/192x192.png"  
                },  
                "ios": {  
                    "appstore": "unpackage/res/icons/1024x1024.png",  
                    "ipad": {  
                        "app": "unpackage/res/icons/76x76.png",  
                        "app@2x": "unpackage/res/icons/152x152.png",  
                        "notification": "unpackage/res/icons/20x20.png",  
                        "notification@2x": "unpackage/res/icons/40x40.png",  
                        "proapp@2x": "unpackage/res/icons/167x167.png",  
                        "settings": "unpackage/res/icons/29x29.png",  
                        "settings@2x": "unpackage/res/icons/58x58.png",  
                        "spotlight": "unpackage/res/icons/40x40.png",  
                        "spotlight@2x": "unpackage/res/icons/80x80.png"  
                    },  
                    "iphone": {  
                        "app@2x": "unpackage/res/icons/120x120.png",  
                        "app@3x": "unpackage/res/icons/180x180.png",  
                        "notification@2x": "unpackage/res/icons/40x40.png",  
                        "notification@3x": "unpackage/res/icons/60x60.png",  
                        "settings@2x": "unpackage/res/icons/58x58.png",  
                        "settings@3x": "unpackage/res/icons/87x87.png",  
                        "spotlight@2x": "unpackage/res/icons/80x80.png",  
                        "spotlight@3x": "unpackage/res/icons/120x120.png"  
                    }  
                }  
            },  
            "splashscreen": {  
                "androidStyle": "common",  
                "android": {  
                    "hdpi": "unpackage/res/imgs/480-762.png",  
                    "xhdpi": "unpackage/res/imgs/720-1242.png",  
                    "xxhdpi": "unpackage/res/imgs/1080-1882.png"  
                },  
                "useOriginalMsgbox": true  
            }  
        }  
    },  
    /* 快应用特有相关 */  
    "quickapp": {},  
    /* 小程序特有相关 */  
    "mp-weixin": {  
        "appid": "wxb0240c07e287a57e",  
        "libVersion": "latest",  
        "optimization": {  
            "subpackages": true  
        },  
        "setting": {  
            "urlCheck": true,  
            "postcss": true,  
            "es6": true,  
            "minified": true  
        },  
        "usingComponents": true,  
        "permission": {}  
    },  
    "mp-alipay": {  
        "usingComponents": true  
    },  
    "mp-baidu": {  
        "usingComponents": true  
    },  
    "mp-toutiao": {  
        "usingComponents": true  
    },  
    "uniStatistics": {  
        "enable": false  
    },  
    "vueVersion": "3",  
    "h5": {  
        "router": {  
            "mode": "history",  
            "base": "/mall/"  
        },  
        "title": "xxx",  
        "sdkConfigs": {  
            "maps": {  
                "amap": {  
                    "key": "",  
                    "securityJsCode": "",  
                    "serviceHost": ""  
                }  
            }  
        }  
    },  
    "locale": "zh-Hans",  
    "fallbackLocale": "zh-Hans"  
}

androidPrivacy.json

{  
    "version": "1",  
    "prompt": "template",  
    "title": "服务协议和隐私政策",  
    "message": "\t本应用尊重并保护所有用户的个人隐私权。为了给您提供更准确的服务,本应用会按照隐私政策的规定使用和披露您的个人信息。<br/>\t(1)为识别您的设备D并预防恶意程序及反作弊、提高服务安全性、保障运营质量及效率,我们会收集您的设备信息 (包括<font color=\"red\">IMEI</font>、<font color=\"red\">设备序列号</font>、<font color=\"red\">OAID</font>、MEID、<font color=\"red\">Android IDMSI</font>、GUID、<font color=\"red\">MAC地址</font>、<font color=\"red\">SIM卡序列号</font>、<font color=\"red\">OAID</font>、<font color=\"red\">AAID</font>)、<font color=\"red\">已安装APP信息</font>或<font color=\"red\">运行中的进程信息</font>。<br/>\t(2)为实现垃圾清理与运行加速功能,我们将请求您的<font color=\"red\">存储</font>权限获取外置存储信息(SD卡数据),用以检查手机CPU、内存和SD卡情况。<br/>\t(3)当你播放视频等内容时,为了适配你的设备状态,我们会调用设备的<font color=\"red\">重力</font>、<font color=\"red\">加速度</font>等<font color=\"red\">传感器信息</font>,以识别你的设备横竖屏状态。<br/>\t(4)微信SDK在你分享或接收被分享的信息时,需要在本地访问你的<font color=\"red\">剪切板</font>读取其中包含的口令、分享码、链接,以实现跳转、分享、活动联动等功能或服务<br/>\t你可阅读<a href=\"https://mall.szcaifuyun.cn/page/tos\">《服务协议》</a>和<a href=\"https://mall.szcaifuyun.cn/page/privacy_policy\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",  
    "buttonAccept": "同意并接受",  
    "buttonRefuse": "暂不同意",  
    "hrefLoader": "system|default",  
    "backToExit": "false",  
    "second": {  
        "title": "确认提示",  
        "message": "  进入应用前,你需先同意<a href=\"https://mall.szcaifuyun.cn/page/tos\">《服务协议》</a>和<a href=\"https://mall.szcaifuyun.cn/page/privacy_policy\">《隐私政策》</a>,否则将退出应用。",  
        "buttonAccept": "同意并继续",  
        "buttonRefuse": "退出应用"  
    },  
    "disagreeMode": {  
        "support": false,  
        "loadNativePlugins": false,  
        "visitorEntry": true,  
        "showAlways": true  
    },  
    "styles": {  
        "backgroundColor": "#fff",  
        "borderRadius": "5px",  
        "title": {  
            "color": "#000"  
        },  
        "buttonAccept": {  
            "color": "#4cd964"  
        },  
        "buttonRefuse": {  
            "color": "#dd524d"  
        },  
        "buttonVisitor": {  
            "color": "#808080"  
        }  
    }  
}
2026-06-09 14:22 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

根据您提供的问题描述和应用市场审核反馈,核心问题是:在用户未同意隐私政策前,SDK(DCloud开发通用工具库)存在获取摄像头的行为。这属于典型的隐私合规问题,各大应用市场(尤其是华为、应用宝等)对此审核非常严格。

结合您的 manifest.json 配置和知识库信息,我为您分析原因并提供解决方案。

问题原因分析

  1. 隐私弹窗配置缺失:您的 manifest.json 中虽然配置了 modules(包含 Camera)和 permissions(包含 CAMERA),但没有看到任何关于隐私政策弹窗(template配置)的相关设置。这意味着应用可能在启动时,在用户点击“同意”隐私政策之前,就初始化了包含摄像头权限的SDK,导致被检测为违规收集个人信息。

  2. autoSdkPermissions 配置影响:您的配置中有 "autoSdkPermissions": false。这个配置项如果设置为 false,表示关闭了自动申请SDK所需权限的功能。但这并不能阻止SDK在初始化时尝试获取摄像头状态或相关服务。如果隐私弹窗未正确配置并延迟SDK初始化,仍会被审核机制捕获。

  3. 审核检测的是“行为”而非“权限声明”:应用市场检测的是SDK在隐私协议同意前的实际调用行为(如调用摄像头相关API),而不仅仅是 AndroidManifest.xml 中的权限声明。您配置了 CAMERA 权限,且 modules 中包含了 Camera,这为SDK获取摄像头信息提供了可能。

解决方案

您需要严格按照DCloud的官方要求,使用 template 配置隐私弹窗,确保在用户同意前,不会初始化任何可能涉及用户隐私的SDK和模块。

核心步骤:配置隐私与政策提示框(Android)

根据官方文档Android平台隐私与政策提示框,您需要在 manifest.jsonapp-plus -> distribute -> android 节点下增加 privacy 配置。

修改您的 manifest.json 文件:

在您现有配置的 "android": { ... } 节点内,增加 "privacy" 配置项。建议配置如下:

// ... 其他配置  
"app-plus": {  
    // ...  
    "distribute": {  
        "android": {  
            "permissions": [  
                // ... 您的权限列表保持不变  
            ],  
            "autoSdkPermissions": false, // 建议保持false  
            "abiFilters": ["arm64-v8a", "x86"],  
            "schemes": "smgapp",  
            "targetSdkVersion": 30,  
            "minSdkVersion": 23,  
            // ========== 新增以下隐私弹窗配置 ==========  
            "privacy": {  
                "prompt": "template", // 必须设置为template  
                "template": {  
                    "title": "服务协议和隐私政策",  
                    "message": "请您务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了向您提供拍照上传、分享等服务,我们需要收集您的设备信息、操作日志等个人信息。您可以在“设置”中查看、变更、删除个人信息并管理您的授权。您可阅读<a href=\"\">《服务协议》</a>和<a href=\"\">《隐私政策》</a>了解详细信息。如您同意,请点击“同意”开始接受我们的服务。",  
                    "buttonAccept": "同意",  
                    "buttonRefuse": "暂不使用"  
                    // 如果HX版本低于3.1.0,需要配置buttonAccept和buttonRefuse  
                },  
                "promptBefore": true // 在应用启动时显示,确保在一切初始化之前  
            }  
            // ========== 隐私弹窗配置结束 ==========  
        },  
        // ... ios等其他配置  
    }  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

配置项说明:

  • "prompt": "template"必须,表示使用自定义模板来展示隐私弹窗。
  • "title""message":弹窗的标题和内容。请务必将 message 中的 <a href="">《服务协议》</a><a href="">《隐私政策》</a> 的链接替换为您应用真实的协议地址。
  • "buttonAccept""buttonRefuse":同意和拒绝按钮的文字。
  • "promptBefore": true强烈建议设置为 true,确保隐私弹窗在应用启动后、所有原生功能初始化前就展示出来。

补充检查与建议:

  1. 检查其他模块:您的 modules 中还配置了 Record(录音)、Payment(支付)、Barcode(扫码)等。这些模块同样可能涉及隐私权限。请确保您的隐私政策文案中已完整覆盖所有需要的权限说明。
  2. 重新打包提交:完成上述配置后,请重新进行云端打包,生成新的APK包,然后再次提交到应用市场审核。
  3. 参考官方完整文档:如果上述配置未能完全解决问题,或您想了解更详细的配置项(如二次弹窗、国际化等),请务必通读官方完整文档:Android平台隐私与政策提示框

按照以上步骤配置后,应用会在启动时首先显示隐私政策弹窗,只有在用户点击“同意”后,才会继续初始化包含摄像头等权限的SDK和功能模块,从而满足应用市场的合规审核要求。

内容为 AI 生成,仅供参考

要回复问题请先登录注册