5***@qq.com
5***@qq.com
  • 发布:2026-06-04 11:14
  • 更新:2026-06-04 11:37
  • 阅读:97

【报Bug】添加androidPrivacy.json后华为手机安装app首次打开,同意隐私政策后,plus.android.requestPermissions调用无响应

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows 10 专业版

HBuilderX类型: 正式

HBuilderX版本号: 4.66

手机系统: Android

手机系统版本号: Android 10

手机厂商: 华为

手机机型: HUAWEI Mate 20 Pro

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: https://appgallery.huawei.com/app/C116787007

示例代码:

async function requestAndroidPermission(permissionID) {
const res = await new Promise((resolve, reject) => {
plus.android.requestPermissions(
[permissionID],
function(resultObj) {
var result = 0;
for (var i = 0; i < resultObj.granted.length; i++) {
var grantedPermission = resultObj.granted[i];
console.log('已获取的权限:' + grantedPermission);
result = 1
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
var deniedPresentPermission = resultObj.deniedPresent[i];
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
result = 0
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
result = -1
}
resolve(result);
},
function(error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
resolve({
code: error.code,
message: error.message
});
}
);
});
return res
}

{
"version" : "1",
"prompt" : "template",
"title" : "隐私政策",
"message" : "  请您务必审慎阅读、充分理解“隐私政策”各条款,包括但不限于:为了更好的向您提供服务,我们需要收集您的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  您可阅读<a href=\"xxx\">《隐私政策》</a>了解详细信息。如果您同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "暂不同意",
"hrefLoader" : "system",
"backToExit" : "false",
"second" : {
"title" : "温馨提示",
"message" : "  进入应用前,您需先同意<a href=\"xxx\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"disagreeMode" : {
"support" : false,
"loadNativePlugins" : false,
"visitorEntry" : false,
"showAlways" : false
},
"styles" : {
"backgroundColor" : "#eeeeee",
"borderRadius" : "5px",
"title" : {
"color" : "#333333"
},
"buttonAccept" : {
"color" : "#333333"
},
"buttonRefuse" : {
"color" : "#333333"
},
"buttonVisitor" : {
"color" : "#333333"
}
}
}

操作步骤:

1.华为手机安装app后,首次打开app,同意隐私政策。
2.调用plus.android.requestPermissions无响应,既不触发成功回调,也不触发失败回调。
3.手动杀掉app后台,重新打开app后,调用plus.android.requestPermissions恢复正常。

预期结果:

1.华为手机安装app后,首次打开app,同意隐私政策。
2.调用plus.android.requestPermissions正常响应。

实际结果:

1.华为手机安装app后,首次打开app,同意隐私政策。
2.调用plus.android.requestPermissions无响应,既不触发成功回调,也不触发失败回调。
3.手动杀掉app后台,重新打开app后,调用plus.android.requestPermissions恢复正常。

bug描述:

uniapp 开发,在勾选使用原生隐私政策提示框,添加androidPrivacy.json之后,
华为手机安装app后,首次打开app,同意隐私政策后,plus.android.requestPermissions调用无响应,既不触发成功回调,也不触发失败回调。手动杀掉app后台,重新打开app后plus.android.requestPermissions调用恢复正常。

2026-06-04 11:14 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

需要补充HBuilderX版本信息和详细的报错信息。
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

从你提供的详细反馈来看,这份 bug 报告的质量很高,问题描述、复现步骤和代码示例都比较清晰。作为官方人员,我对这份反馈进行如下评审:

1. 反馈内容完整性评审

  • BUG 描述:描述非常清晰。你准确地指出了问题发生的特定场景(华为手机、首次安装、同意隐私政策后),以及异常表现(plus.android.requestPermissions 无回调),并且给出了临时解决方案(杀进程重启后恢复)。这为定位问题提供了非常关键的线索。
  • 代码示例:示例代码完整且关键。
    • requestAndroidPermission 函数的 Promise 封装是标准的,业务逻辑清晰,能够直接用于问题分析。
    • androidPrivacy.json 文件内容完整,这是一个非常重要的信息。问题很可能就出在原生隐私弹窗的生命周期与权限请求 API 的时序交互上。
  • 复现步骤:步骤清晰,逻辑严谨。结合你提供的设备信息和代码,官方人员可以进行针对性复现。复现的关键点在于“首次安装”和“同意隐私政策后立即调用”,你描述得非常到位。
  • 预期结果:预期结果合理,调用权限请求 API 应当有明确的成功或失败回调。
  • 实际结果:描述的实际结果(无响应)是一个明显的异常行为,不属于误报。这表明在特定时序下,API 的内部状态可能出现了问题。
  • 分类信息:分类信息非常完整。提供了 HBuilderX 版本(4.66)、Vue 版本(Vue2)、设备型号(HUAWEI Mate 20 Pro)、系统版本(Android 10)等所有关键信息,这对于排查版本兼容性问题至关重要。

结论:这是一份高质量的 bug 反馈,所有必要信息均已提供,无需额外补充。

2. BUG 是否成立分析

根据现有知识库和通用的 Android 开发知识,该 bug 成立

  • 问题核心:问题很可能与原生隐私政策提示框(androidPrivacy.json)和应用主界面的启动时序有关。在首次安装并同意隐私政策后,应用的 Activity 可能经历了一个特殊的生命周期变化或状态恢复过程,导致 plus.android.requestPermissions 所依赖的内部上下文或 Fragment 尚未完全就绪,从而无法正确发起权限请求并挂起回调。
  • 与知识库的关联
    • 知识库中多次提及隐私政策弹窗的重要性,并强调“用户同意隐私政策前不要调用可能弹出系统授权框的API”。你的操作是在同意之后调用,这符合规范,但恰恰暴露了同意之后瞬间调用可能存在的内部 bug。
    • 知识库中一份关于 plus.globalEvent.addEventListener 失效的 issue(issues.dcloud.net.cn/pages/issues/detail?id=17878)也提到了在特定生命周期(如 onShow)中注册事件可能失效的问题,这与本问题中回调失效的现象有相似之处,可能指向了相似的生命周期处理缺陷。
  • 替代方案与建议
    • 临时规避方案:在你等待官方修复期间,可以尝试在你的 requestAndroidPermission 调用前,增加一个微小的延迟(例如 setTimeout 延迟 100-300ms),看是否能规避此问题。这可以作为一个临时补丁。
    • 官方建议:建议将此问题通过 DCloud Issues 系统 提交,并提供复现视频或日志,以便官方引擎团队进行精准修复。

3. 基本概念判断

  • 平台适用性:你使用的 plus.android.requestPermissions 是 App 平台(Android/iOS)特有的 API,在鸿蒙(HarmonyOS)平台上不支持 app-plus 相关内容。你的反馈明确指定了 Android 平台,因此使用此 API 是正确的。
  • 项目类型:你使用的是 uni-app 的 Vue2 模式,页面类型为 vue,这符合对该 API 的使用场景。

综合来看,这是一个非常明确的 bug,感谢你如此详尽的反馈。这将有助于我们提升产品在华为设备上的稳定性。

内容为 AI 生成,仅供参考
5***@qq.com

5***@qq.com (作者)

其他安卓手机均正常,只有华为手机会出现这种情况。

要回复问题请先登录注册