React Native 0.72 应用市场审核问题2024最新版

配图为法国画家Martin Jarrie画的一只鲭鱼

随着国家工信部出台了一系列关于个人信息保护、内容管理、数据安全等方面的政策要求,app的上线审核变得越来越严格,为了确保app在中国市场顺利上线并长期运营,开发者应仔细阅读并时刻紧跟工信部的相关政策要求,通过不断优化和改进,确保app及时、顺利通过应用市场审核,高质量服务于广大用户。

近期本人使用React Native 0.72新架构开发的app需要同步上线苹果、小米、华为、应用宝、OPPO、VIVO 6大应用市场,现在各家应用市场都有自动化代码审核引擎对上线app在人工审核之前进行细致的白盒预审,审核内容包括代码安全、SDK使用情况等,试着浅比较下各家审核平台的不同。

  • 小米:属于审核最快的一档,基本从发版到结果反馈控制在8小时以内,经常中午发版,晚上6点就有结果反馈,但是其审核引擎十分严格,小米先后上线两次, 返回三份审核报告、一份excel版SDK调用详情, 使用了4家不同的审核引擎,包括:小米安全、百度史宾格、捷兴信源、智游网安(爱加密)。

  • 华为:6个平台中审核最慢,经常3天以上才有结果反馈,华为似乎知道自己审核很慢, 有别与其他平台,非常贴心的提供了一个【催审】按钮, 但是你点击,会提示你【第一次催审时间间隔为提交审核后36小时,请耐心等待审核结果】。。。
    华为的人工审核最为严格, 一共发布了3次每次都有新的反馈,反馈了包含【隐私政策弹窗拒绝选项按钮为“取消”,点击取消应用未退出 】【您的应用明示存在定向推送功能,但未满足在应用内显著标识定推服务/提供定推服务关闭选项的要求,不符合华为应用市场审核标准】【您的应用分类与应用实际功能和用途不相符】等问题。

  • 腾讯应用宝:平均2~3天有结果反馈,审核同样严格,特别人工审核细致,反馈了包含【不允许上传的【应用截图】第四张含有“个人信息“】等内容。

  • vivo、oppo: 平均2天有结果反馈,严格程度不如小米、华为、腾讯应用宝。

  • 苹果:属于审核最快的一档,和小米相差无几。自动化代码审核、以及遵守工信部政策这块,相比另外5家平台,属于最不严格这一档,但是人工审核细致,特别对于app元数据信息、用户体验、app流畅性有更高要求。

另外,除了苹果外,以上所有安卓应用市场均要求上传《电子版权认证证书》和 《计算机软件著作权登记证书》(或《软件著作权认证证书》)三选一。

下面提供一下本人各大应用市场的踩坑记录,以供参考。

1. ICP备案

安卓、苹果所有应用市场均要求有醒目的ICP备案信息展示,且点击备案号可跳转到工信部备案信息查询网站。

2. 账号注销

任何具备账号系统的app, 均需要提供账号注销或账号删除功能,但是这块具体执行起来,可以分为硬删除和软删除两种,前者是直接将用户账号及使用期间产生的业务数据一并删除,后者是将用户标记为删除状态使其不能登录,但并不删除用户使用期间产生的业务数据。二者可斟酌采用。

3.隐私及权限相关

  • 【隐私协议】【用户协议】二者缺一不可,所有安卓应用市场都需要有这2个协议在app明显位置展示,有些审核不严格的应用市场,缺少用户协议是给过的,但是审核严格的应用市场是肯定过不了的,所以老老实实提供【隐私协议】【用户协议】且规范协议内容,内容和实际不符,应用市场也是不给过的。
  • 所有安卓应用市场均要求,app首次启动要以【隐私政策弹窗】的形式向用户明示收集使用规则,注意必须要弹框。

4.违规权限调用

  • 在用户点击同意隐私协议之前,不允许调用ANDROID_ID、IMEI、设备MAC、ip地址、WiFi SSID、位置信息、硬件传感器等权限。针对此项政策,点击同意隐私协议之前尽量不要import相关库,如果必须import,则需要严格判断是否点击了同意隐私协议,未同意状态不要使用相关库及相关方法。
小米返回的违规信息1

由于项目使用了sentry进行错误监控,但小米提示sentry违规获取设备传感器,结合小米返回的excel发现sentry在调用设备的温度传感器,通过在安卓工程AndroidManifest.xml的<application></application>标签中加入如下代码,禁止sentry违规调用,这个问题就此解决。

<meta-data android:name="io.sentry.breadcrumbs.system-events" android:value="false" />

但是重新提交后,腾讯应用宝返回


截屏2024-07-16 10.45.26.png

于是将Sentry.init()的初始化方法、项目入口文件的导出Sentry.wrap(App)做了判断,如果用户同意了隐私政策及用户协议则初始化Sentry、export default Sentry.wrap(App),反之则不初始化Sentry、只export default App。

后续的提交,问题主要集中在react-native-device-info、@react-native-community/netinfo这两个库

  • react-native-device-info:
    用于调取硬件设备相关信息及app相关信息,包括设备uuid、app版本号等信息

  • @react-native-community/netinfo
    用于调取ip地址,wifi连接状态

要严格控制这两个库的方法调用,用户点击同意隐私协议之前尽量不要import相关库,未同意状态不要使用相关库及相关方法。

  • APP在申请敏感权限时,应同步说明权限申请的使用目的,包括但不限于申请权限的名称、服务的具体功能、用途;告知方式不限于弹窗、蒙层、浮窗、或者自定义操作系统权限弹框等,且权限申请使用目的说明不应自动消失。

当需要调用位置信息、相机、相册等敏感权限时,需要以弹窗、蒙层、浮窗、或者自定义操作系统权限弹框等方式告知用户权限申请的使用目的。
我们app的相关界面如下:

截屏.png

此功能需要使用react-native官方提供的PermissionsAndroid组件

主要代码如下,以供参考:

async function permissionCameraDiaglog() {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.CAMERA
    );

    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      selectFileSheet.current?.show(); //相册、相机选择弹框
    }
  }
  function requestCameraPermission() {
    try {
      AsyncStorage.getItem(KEY_PERMISSION_CAMERA_IDCARD).then(promise => {
        if (!promise) {
          dialogref.current?.setDialogInfo({
            visible: true,
            title: t('common:permissionCameraTitle'),
            message: t('common:permissionCameraContent'),
            confirmText: t('reimbursement:iUnderstand'),
            onConfirm: async () => {
              await AsyncStorage.setItem(KEY_PERMISSION_CAMERA_IDCARD, "true");
              await permissionCameraDiaglog()
            },
            showCancelButton: true,
          });
        } else {
          permissionCameraDiaglog()
        }
      });
    } catch (err) {
      console.warn(err);
    }
  }

5.被苹果认定为企业内部应用

We found in our review that your app is intended to be used by a specific business or organization, including partners, clients, or employees, but you've selected public distribution on the App Store in App Store Connect. Since the App Store is intended for apps with a public audience, we recommend reviewing the other distribution options available to you through your Apple Developer Program Account.

以上是苹果的审核拒绝原因,大意就是认为该app是一个企业内部的应用,不应该上线到app store, 推荐采用$699一年的企业级开发者账号发布(苹果也是真黑)。

遇到这种情况一定要在开发者账号中认真回复,说明原因,同时针对苹果发的拒审邮件以公司名义尽可能正式的回复一封原因说明邮件,注意以公司名义发正式邮件非常的重要。邮件正文内容大致如下,仅供参考:

尊敬的苹果团队:
您好,感谢您的耐心审核。
我们的app主要发布于中国及部分海外地区,应用于xxx查看招聘信息、培训信息以及上传下载个人简历使用。
我们开发app的主要目的是为了提高xxx的工作效率,方便他们进行在线制作简历、查看工作、培训信息。
相关人员的账号我们采用验证码登录的方式并填写详细信息后进行创建,另外我们也提供线下的方式为用户提供账号和密码进行使用。
我们的app用户,大多只是普通的苹果用户,在设置中进行描述文件的安装操作将会给他们带来很大的困扰。如果现在定性我们的app为一个内部应用程序的话,不便用户的安装和迭代新的版本。
我们将会持续对app进行优化迭代,上线更多优质模块,服务于广xxx业从业人员,未来我们将会做得更好。
我们将重新打包,到时还请继续审核,谢谢。
请您继续审查我们应用程序, 有任何问题可即时和我取得联系,我都将为您做出解答,谢谢。
xxx公司表示最真挚的问候。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容