Android应用上架国内应用市场踩坑

前言

大家可能心里明白新政下来之后上架会很难,但是到底有多难?心里有底吗?反正我知道。

我们之前一直是做海外市场的,今年下半年才开始做国内的应用,我也是很久没有接触国内应用市场了。不上不知道,现在国内上架都这样了!

目前各大应用市场陆续推出声明,各种备案截止日期到12月就要到最后期限责令整改不让更新,明年再不整改就面临下架风险。

image.png

那么如何进行 App 的各种备案大家有头绪吗?如果是一个新的 App 如何从新开始上架需要经历那些步骤,会踩到哪些坑?

从域名备案,IPC备案,App网安备案,隐私协议检测,到上架各大应用市场的隐私检测,证件查验,功能确认提出整改。

虽然本次上架的是 Flutter App 但是 Android App 完全可以参考使用。

下面就从隐私协议,网安备案,应用市场审核三座大山一并讲来,到底有哪需要注意的点和容易踩的坑。

一、隐私协议

说一下需要注意的点和踩坑的点。

1. 应用启动的协议弹窗

大家应该使用 App 都遇到过这样的应用启动弹窗:

大家了解最多的就是这个,我们需要在应用启动的时候弹出权限声明弹窗,附上隐私协议与用户协议。

大致包括一些敏感信息的收集,数据安全的声明,敏感权限的使用声明,第三方库的收集信息声明,自启动相关声明,个性化推荐相关声明等等。

2. 延迟初始化,ContentProvider自动初始化?

我们现在就不能在 Application 应用启动的时候就初始化第三方插件了,需要在用户同意协议之后才能初始化,所以才有延迟初始化这么个说法。

那前两年很流行的 ContentProvider 自动初始化技术怎么办?那我走?

Flutter 应用可以在 main.dart 中创建 app 的时候弹窗,也可以在 Splash 页面中检测弹窗都可以。Android App 也是同样的做法,可以在 Application 中检测也可以在 Splash 页面中检测。

如果有第三方SDK在没有用户授权的前提下偷偷的初始化了,被检测出来将会不予通过。

3. 浏览模式

其实网安检测,只需要在不同意协议的时候退出应用就可以通过,但是部分应用市场需要提供浏览模式,你不能暴力的让用户退出。

就算用户没有同意协议,就算一些第三方不能初始化,就算不能登录注册收集用户敏感信息,用户也要能浏览应用的基本功能。所以开发者就要推出浏览模式。

我们可以进入一些基本的功能页面,在底部或顶部展示授权的弹窗,让用户同意隐私协议之后享受完整功能。

image.png

4. 个人信息收集,设备ID收集

这个应该不会有什么问题,隐私协议中需要声明,收集用户哪些信息,收集设备哪些信息,用于干什么怎么保存是否加密等等。 有限不包括 设备ID,运营商,用户ID,设备SN,用户信息 等等。

5. 危险权限声明

我们的应用会使用哪些危险权限,用于做什么用途, 危险权限包括:相机,存储卡,定位,麦克风。

比较难搞的就是一些第三方SDK声明了一些鬼权限我们用不到的,比如我只想用相册,为什么给我麦克风权限...

如果要修改只能自己手动改。

6. 第三方SDK收集信息声明

微信,腾讯,百度,极光,等等使用了哪些第三方库都需要声明。

比如百度定位收集经纬度,怎么保存,用于什么用途等等。

比如极光推送会收集IMEI MAC地址 设备ID,软件安装列表,自启动等等。

有一点比较难搞的就是收集一些说不清的信息,比如 Bugly 你收集崩溃信息就算了,为什么还要手机应用安装列表的信息。

都解释不通,只能在隐私权限中加上是应用需要功能,不通过不让使用,也是难搞。

可能 Bugly 的 Native 版本更新了这个问题,可是 Flutter 插件比较老,如果每一个第三方都需要这么分别搞 Native 的桥接,那还是有很大的工作量的。

7. 注销账号功能

这个功能,iOS市场和谷歌市场都有相关要求,不难理解,只需要在设置页面加上就行。

image.png

8. 默认勾选协议

包括登录,注册的协议CheckBox,包括一键登录页面中的协议CheckBox,都不能默认勾选,需要用户手动勾选或者弹窗勾选。

9. 自启动

这个不是保活啊,一般自启动都是推送相关SDK需要用到,例如极光和个推。

我们需要在隐私协议中声明为什么需要自启动即可。

**10. 广告的倒计时 **

广告倒计时不能超过5秒,并且要可以关闭,规范点击范围,并且明确表示跳过广告的文本。

11. 推送与个性化推荐

推送与个性化推荐是不同的两个东西,推送是基于用户信息给用户发送通知。

需要在设置中提供关闭推送的开关。

个性化推荐是手机用户信息,大数据分析用户tag,展示不同的信息流。如果你的应用没有个性化推荐千万不要加这种文本。

如果你的应用有个性化推荐,那么就要提供相应的相应关闭个性化推荐的开关。并且开启和关闭之后信息流会发送明显的变化,如果开启和关闭信息流没有变化就会无法通过隐私协议审核。

关于隐私方面其实大家可以白嫖小米开放平台的隐私检测,上架小米市场可以先检查应用的隐私协议,只要它能审核过了,除了华为市场其他市场都没问题,它是相对比较严格的,而华为市场再另一层,后面单独讲它。

二、网安备案

App备案流程分为 服务器域名备案,IPC备案,网安备案。

我们都可以通过阿里云来申请,这里我不打广告,有兴趣的可以自己去阿里云官网去查找。只需要填写相关公司信息和实名信息不难通过,难的是 App 网安备案。

网络安全备案的流程是先申请,然后工作人员到公司实地考察,然后委托第三方对App进行安全审查,审查通过之后完成备案可在全国互联网安全管理服务平台查看。

国内各大应用市场主要是需要应用去申请这个备案。

具体的复杂流程就是这个第三方审查机构,由于是与ZF合作的关系,各个城市可能第三方的审核机构都不同,我们这里是某邦平台,下面开始踩坑。

提交开发好的 App 包 WX 发给对方的对接人员,他们检测之后会出具检测报告,大概100页左右。

由于第一次我太天真以为只是扫扫毒查查隐私的什么的,没有加固直接给他们了,结果:

image.png

原来审查这么严格,他们的要求是整改全部的中风险和高风险。

赶紧使用某60加固之后再次提交试试,结果确实少了很多,但是剩下的都是一些顽固问题。

一些第三方SDK中四大组件的一些问题很难搞,可能是一些 Flutter 插件并不是最新的,需要手动的集成 Native 库,而一些 Native 库里面又嵌套 Native,烦不胜烦。

改来改去,拉扯几个回合,直到最后的一个问题始终解决不了,就是未混淆与反编译风险。

原始APP混淆之后,反编译Dex是这样:

df7960bf77ede6bc9c402e66dedec25.png

如果使用某60加固之后是这样:

9e2e74b004679a94518e36c7fc2c4f5.png

虽然已经很好了,但是审核机构会说类名没有混淆,不让通过,那就用他们自家的加固产品吧。反编译之后是这样的:

df012e9da9e5264cf6e4cde0e3db3db.png

他们自家的确实是混淆了类名,这样就能过了? 不会!他又会说你的代码有反编译风险。

算了算了回归正题,下面说明一些 App 安全审查容易中招的点:

1. 加固服务,解决了加固问题,WebView相关漏洞攻击风险,Http漏洞攻击风险,动态调试攻击风险,应用克隆”漏洞攻击风险,动态注入攻击风险 都可以解决

image.png

2. 拒绝服务攻击漏洞

image.png

3. 代码混淆处理 

image.png

4. 反编译风险

image.png

5. 导出标识和组件权限

image.png

可以自己导入修改,也可以使用 Gradle 插件修改。

6. 数据任意备份风险

image.png

7. 全局异常检测风险

image.png

主要就是这些了。

App安全审核通过之后第三方机构也会审核你应用的隐私协议,只要按照上面的要求来办基本问题不大。

image.png

整改,弹窗上的同意协议与不同意协议的按钮要明确不能暗示用户点击同意。

image.png

推送的相关隐私协议声明了即可。

image.png

明确收集的信息哪里存储如何保证安装,用于什么用途等等之类。

等一切都通过了,网安会发送短信提示审核通过:

image.png

可以在全国互联网安全管理服务平台查看了:

image.png

需要注意的是 App 备案包括网安备案只会审查第一次,只要过了,后续如果继续更新 App 则无需再次审查了,而应用市场上架会每次都审查,不过应用市场主要审核隐私协议与 App 功能,对于 App 的安全则没有网安审查那么严格,一般只要使用加固服务基本都能过。

三、应用市场上线

关于应用市场上线的部分,其实反倒是国内大部分程序员都熟悉的环节了。

我们上架的平台是应用宝,小米,华为,Vivo,Oppo,魅族。除了华为应用市场其他的应用市场都大差不差。

唯一的差别可能就是应用宝,小米,vivo 他们可以上传32位包和64位包,华为不支持分开传但是他支持AAB格式也不错。

只需要准备好相关的证件,如软著(电子版也可),营业执照,特殊行业证件(新闻,招聘,劳务派遣等等),各大应用市场的承诺书盖印公章,上传包提交审核即可。

如果应用被拒了多半是隐私协议的问题,他们不会过多关心你的应用功能怎么样,不会给你应用提出意见。

而隐私协议前面说了可以白嫖小米应用市场的隐私协议

image.png

以下是几个容易踩坑的点:

  1. 加固,一定要加固之后再传包,建议打三个包32位,64位,和全量包,并分别加固。

  2. 危险权限需要在上架的时候声明用途。

部分应用市场需要在上架的时候就需要声明权限。

  1. 自动化测试,小米和华为

一些应用市场需要进云测,我们可以白嫖小米和华为的免费云测时长

  1. 华为应用市场,他们比较人性化了,会对产品提出他们的想法。

比如我们的列表信息没有举报功能不够人性化,用户体验不好,OK我们改。

然后说我们应用黑暗模式不完善,OK我们改。

然后说我们提供测试账号不行,要完善信息通过审核可以测试具体业务逻辑。如购买到商品,申请到工作等。

为什么申请了工作到已工作列表中不展示,因为测试账号的信用分不够状态是待审核,所以这也不行。一定要展示到对应的列表中。

然后再说你权限申请的不对,申请动态权限必须要权限申请弹窗的顶部声明用途,并且拒绝之后不能再次弹窗申请。

第一点,我们的做法是需要在申请权限的时候弹出Dialog,我们一些第三方的如相机相册都是库里面自己申请权限的,现在要我们要在使用功能前自己申请了。这样才能控制在哪个页面弹出Dialog展示对应的权限说明。

关于第二点,为什么拒绝之后不能再次弹窗,很不能理解,万一用户点错了拒绝了权限,他再想统一权限你知道有多麻烦吗?用户要自己去设置中找到权限再找到自己的app再去打开对应的权限,一般用户真的会吗?

我们一般的做法就是弹窗是否再次授权,如果超过二次拒绝就会弹窗给他直接跳转到应用的设置。华为就直接不让弹窗了,这个吐槽一波。

另外证件不够,需要额外的增值电信业务经营许可证。其他平台都不要就他要,8000大米没了。

再就是应用名称有类似的,需要提供品牌证明,好吧我们得注册品牌申请专利和Logo等操作。

不过说到底是为了你自己的应用质量把关和提意见,蛮好的。

特别强调的一点是华为应用市场会把审核失败所有的问题一次性给你这点就特别好。

总结一句除了华为应用市场其他的都还算顺畅,特别是你过了网安的审查和隐私审查之后基本问题不大了。

后记

经过九九八十一难,App终于上架完成。是不是第一次比较轻松后续更新迭代会松一些呢?

错!你说的那是谷歌市场不是国内应用市场,国内的市场更新迭代也需要审核,我就遇到过一些应用市场在迭代的时候找出问题要我们修改隐私协议的,每次更新上架都会审核一次。

不过审核的速度会快一些了,小米是最快的也是比较严格的,其次是 Oppo 也很快没有那么严格,再其次就是应用宝和魅族,再其次就是 Vivo 比较慢,最慢的就是华为应用市场了。

还是没经验啊,我一直都吐槽谷歌市场难用,现在我倒觉得谷歌市场才是最好用平台了。

现在上架一个国内应用市场真心难,如果是个人开发者可想有多难,应用市场不支持个人开发者,你得注册个人公司,开了公司就有隐形的成本付出,就算你注册了个人公司也需要一些额外成本才能最终磕磕绊绊上线。

其实事情过去一个月之后再次回顾起来,其实全流程也不难,如果我们再次上架新应用的话应该会很快,之前主要是没经验。其实各位家里要是有足够的大米的话其实蛮简单的可以少走很多弯路。

无论如何,App总算是上架了,这里也把我踩过的坑分享给大家,希望对各位 Androider 有些帮助。

作者:Newki
链接:https://juejin.cn/post/7304533060548247603
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐