南通智慧园林绿化管护app上架华为应用市场时,由于《网络安全法》、《关于开展APP侵害用户权益专项整治工作的通知》等法律条款的要求,基于本app的实际使用测试所反馈的一些问题,总结如下:

  1. 权限类问题
  2. 用户隐私问题
  3. 表述问题
    1、 详细描述:我们发现您的第二张和第三张应用截图的内容与应用实际功能不符合。
    对审核内上传的应用内截图,需要考虑登录用户的权限,保证所提供的账号均能访问到。
    2、 详细描述:我们发现您的应用内的隐私政策在AppGallery Connect上提交的隐私政策网址内开发者名称与上传应用的开发者名称信息不一致。

应用内的隐私政策、在App Gallery Connect上提交的隐私政策网址内注明开发者名称以及应用名称,并确保应用名称与开发者提交的应用名称信息一致,开发者名称与上传应用的开发者名称一致。
在这里插入图片描述正确的声明方式
同时应该注意:
·APP应该将个人信息处理规则以弹窗等形式向用户明示(包含第三方SDK)。包含收集个人信息的目的、处理方式和范围,未经用户同意,APP(包含第三方SDK)不应收集个人信息。
·APP在征求用户同意环节,应提供明确的同意和拒绝选项,不应仅使用“好的”、“我了解”、“我知晓”、“我已阅读”、“立即使用”、“下一步”等无法清晰表达用户同意的词语。
·APP在征求用户同意环节,不应设置为默认同意。
常见的问题有:1. 隐私弹窗无拒绝选项;2.无勾选框“登录即代表同意”;3. 默认勾选同意隐私政策等。
3、 详细描述:我们发现使用您提供的测试账号和密码无法正常登录应用,提示用户名或密码错误
在需要注册、登录的情况下,对用户注册的账号需及时的审核,或者直接提交可以正常访问的账号、密码。
4、 详细描述:我们发现您的应用首次启动时,批量申请权限。测试步骤:启动后,应用批量索取。
分析: 动态权限:Android自系统6.0开始,提供动态权限机制,对于敏感权限(存储,定位,录音,拍照,录像等),需要在APP运行过程中动态向用户申请,这就和IOS系统的权限使用体验保持一致了(IOS一直以来就是动态权限)。

解决:在用户同意用户隐私政策之后,当用户执行到对应的操作时,先判断用户当前是否已授权该权限,若没有授权再单独的进行权限申请(禁止权限的批量申请)。这里用到了两个方法hasPermission 、 requestPermission。
使用动态权限,要求APP编译的目标SDK(即targetSdkVersion)为23及以上(对应的是android6.0及以上的系统),但我们使用apicloud 创建的默认模板的targetSdkVersion为22,需要我们进行以下操作:
1.在根目录下创建manifest.xml,将版本号置为23及以上。当我们将版本号设置为23及以上时,及开启了动态权限。

2. 在config文件里设置对应的permission
3.将代码中所有涉及到动态权限申请的地方修改为(官方示例中的部分代码)
判断权限:
function hasPermission(one_per){
var perms = new Array();
if(one_per){
perms.push(one_per);
}else{
var prs = document.getElementsByName(“p_list”);
for(var i = 0; i < prs.length; i++){
if(prs[i].checked){
perms.push(prs[i].value);
}
}
}
var rets = api.hasPermission({
list:perms
});
if(!one_per){
apialert(‘判断结果:’ + JSON.stringify(rets));
return;
}
return rets;
}
申请权限
function reqPermission(one_per, callback){
var perms = new Array();
if(one_per){
perms.push(one_per);
}else{
var prs = document.getElementsByName(“p_list_r”);
for(var i = 0; i < prs.length; i++){
if(prs[i].checked){
perms.push(prs[i].value);
}
}
}
api.requestPermission({
list: perms,
code: 100001
}, function(ret, err){
if(callback){
callback(ret);
return;
}
var str = ‘请求结果:\n’;
str += '请求码: ’ + ret.code + ‘\n’;
str += "是否勾选"不再询问"按钮: " + (ret.never ? ‘是’ : ‘否’) + ‘\n’;
str += ‘请求结果: \n’;
var list = ret.list;
for(var i in list){
str += list[i].name + ‘=’ + list[i].granted + ‘\n’;
}
apialert(str);
console.log(JSON.stringify(ret));
});
}
4. 云编译界面勾选APP所需的权限

在这里插入图片描述
在这里插入图片描述
使用到该权限时在进行权限的申请

若用户决绝授权,应不影响用户对app的整体使用。
5、 详细描述:我们发现您的应用在用户同意隐私政策前申请获取个人信息(IMEI)。
分析-可能存在的原因:
·是否在同意隐私政策前调用接口。
·受外部模块加载的影响
·代码中存在未判断的动态权限
最终经过排查是apicloud中用于自动检测版本更新的mam模块所影响的。
6、 详细描述:经检测发现,您的应用存在获取用户IMEI敏感信息行为,且未在应用内的隐私政策,在App Gallery Connect 上提交的隐私政策网址中进行说明。
解决方案:同问题5。
7、 详细描述:我们发现您的应用在首次启动、注册登录界面均未明确提示用户阅读隐私政策。测试环境:Wi-fi联网、EMUI 11.0.0(Mate 30)、中文环境
解决方案:强制提醒用户阅读隐私政策,否则不予注册或登录。
8、 详细描述:我们发现您的应用targetsdk版本小于26,不符合上架要求。
分析:targetSdkVersion:自2018年11月开始,GooglePlay以及国内大部分应用市场要求APP编译目标SDK必须为26及以上,否则不予提交审核,这也导致了问题4的产生。
解决方案:参考问题4步骤一,将targetSdkVersion置为23及以上。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐