辣条人
辣条人
  • 发布:2026-07-08 23:01
  • 更新:2026-07-08 23:03
  • 阅读:171

自己写的APP以隐私政策弹窗,怎么避免上架不通过,一般会提示APP以隐私政策弹窗的形式向用户明示收集使用规则,未经用户同意,存在收集设备MAC地址、IMEI等信息的行为

分类:uni-app

不太想用原生的有点丑

问题:如标题

2026-07-08 23:01 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

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

如果你觉得原生的隐私政策弹窗不够好看,想自己做一个漂亮的弹窗,同时又想避开“未经同意就收集 mac 地址、imei”这类审核问题,关键在于用对配置模式,并控制好代码执行时机

核心思路:用 “none” 模式 + 自己写弹窗

你想要自定义弹窗样式,就不能使用原生 template 模板。正确的做法是,在 androidPrivacy.json 里把模式设为 "none",告诉原生引擎不要自动处理隐私弹窗,然后完全由你自己写一个页面或组件来展示。

但仅仅这样还不够,审核不通过的根本原因是:在用户点击“同意”之前,你的 app 或者内置的 sdk 就偷偷读取了设备信息。 所以,你的自定义弹窗必须做到以下两点:

  1. 阻断一切提前收集行为:在用户同意前,不要调用任何会触发权限请求或读取设备信息的 api,也不要去初始化那些不听话的第三方 sdk。
  2. 接管“同意”状态的判断:自己记录用户是否同意,并在后续逻辑中以此为依据。

具体实现步骤

1. 配置 androidPrivacy.json 为 “none” 模式

在你的项目根目录下,找到或新建 androidPrivacy.json 文件,写入以下内容。这是最关键的第一步,它让系统知道你要自己处理隐私弹窗。

{  
  "version": "1",  
  "prompt": "none"  
}

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

2. 制作你的自定义隐私弹窗页面

创建一个新的页面,比如 pages/privacy/privacy.vue,把它做得要多好看有多好看。这个页面只做两件事:

  • 展示你的《服务协议》和《隐私政策》。
  • 提供“同意并继续”和“暂不同意”的按钮。

3. 在应用入口控制页面跳转逻辑

app.vueonLaunch 生命周期里,你需要判断用户是否已经同意过协议。如果没同意,就跳转到你自己的隐私弹窗页;如果已经同意了,才可以进入主页面。

示例代码:

<script>  
export default {  
  onLaunch: function() {  
    // 每次启动时,检查是否已同意隐私政策  
    const hasAgreed = uni.getStorageSync('user_privacy_agreed');  
    if (!hasAgreed) {  
      // 没同意过,就跳转到你自己的隐私页面  
      uni.reLaunch({  
        url: '/pages/privacy/privacy'  
      });  
    } else {  
      // 已经同意过了,可以安全地进行初始化  
      this.initApp();  
    }  
  },  
  methods: {  
    initApp() {  
      // 在这里执行你原来 onLaunch 里的逻辑  
      // 比如初始化第三方 sdk、检查更新等  
      console.log('用户已同意隐私政策,开始正常初始化');  
    }  
  }  
}  
</script>

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

4. 在你的自定义弹窗页面处理用户操作

在你的 privacy.vue 页面中,根据用户点击的不同按钮执行操作。

<template>  
  <view class="privacy-container">  
    <!-- 这里是你美美的弹窗内容 -->  
    <view class="content">  
      <text>欢迎使用我们的app!</text>  
      <text>请阅读并同意《服务协议》和《隐私政策》</text>  
      <!-- 你的协议链接... -->  
    </view>  
    <view class="footer">  
      <button @click="handleDisagree">暂不同意</button>  
      <button @click="handleAgree">同意并继续</button>  
    </view>  
  </view>  
</template>  

<script>  
export default {  
  methods: {  
    handleAgree() {  
      // 1. 记录用户“同意”的状态  
      uni.setStorageSync('user_privacy_agreed', true);  

      // 2. 跳转到真正的应用首页  
      uni.reLaunch({  
        url: '/pages/index/index'  
      });  
    },  
    handleDisagree() {  
      // 根据应用市场规定,点击不同意通常需要退出应用  
      // 在 app 端可以使用 plus.runtime.quit() 退出  
      if (typeof plus !== 'undefined') {  
        plus.runtime.quit();  
      } else {  
        // 非 app 端的处理,比如提示一下  
        uni.showToast({  
          title: '需要同意协议才能使用',  
          icon: 'none'  
        });  
      }  
    }  
  }  
}  
</script>

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

需要特别注意的“坑”

  • 三方 sdk 延迟初始化:如果你用了推送、统计、广告等 sdk,务必把它们从 onLaunch 里挪到用户点击“同意”之后(即上面的 initApp 方法里)再初始化。很多审核问题就是这些 sdk 在同意前偷偷启动并读取了信息。
  • 原生插件排查:如果你集成了 uni 原生插件,用排除法检查一下,在用户同意前它们有没有静默收集信息。有问题的插件要升级或移除。
  • 隐私政策内容要明确:在你美美的弹窗和隐私政策链接里,必须清晰、完整地列出你会收集哪些信息(比如 mac 地址、imei、oaid 等)以及用来干什么。不要用模糊的词语,比如“我们可能收集...”。可以参考 DCloud App引擎隐私政策 来补充。
  • 不要用自定义基座提交审核:打包正式版提交市场,自定义基座可能不会触发合规逻辑。

总结

放弃原生模板,用 "prompt": "none" + 自定义页面,是完全可行的,也是很多开发者的选择。只要严格遵守“同意前,不收集;同意后,再初始化”的原则,美美的自定义弹窗也能顺利通过审核。

内容为 AI 生成,仅供参考

要回复问题请先登录注册