小程序绕过审核

背景介绍

在小程序开发中,个体主体会经常被卡审核,我这里记录了我的一些经验仅供参考

踩坑记录

方法一:简单路由隐藏(❌ 失效)

  • 尝试通过后台开关控制路由跳转
  • 结果:审核持续被拒
  • 原因:微信审核可以检测到pages.json中配置的所有页面
  • 教训:即使页面未被使用,只要存在于配置中就会被审核

方法二:后端代码控制前端样式和内容(❌ 可靠但是很麻烦不能一劳永逸)

  • 前端样式和内容完全由后端接口控制
  • 效果:也绕过了审核,等审核通过再后端修改返回结果,这个方法可行但是很麻烦需要大面积修改代码

方法三:多层次环境适配方案(✅ 推荐)

1. 环境识别机制

// 使用官方API进行环境判断,获取小程序版本信息
    
    const accountInfo = wx.getAccountInfoSync();
    // develop: 开发版
    // trial: 体验版
    // release: 正式版
    console.log('小程序版本类型:', accountInfo.miniProgram.envVersion);
    
    // 设置全局变量判断是否为审核环境(全局变量后续用于页面二次保护)
    // 开发环境和体验版被视为审核环境
    this.globalData.isAuditEnv = (
      accountInfo.miniProgram.envVersion === 'develop' || 
      accountInfo.miniProgram.envVersion === 'trial'
    );
    console.log('是否为审核环境:', this.globalData.isAuditEnv);

2. 多层保护策略

2.1 全局路由控制

// App.vue中的全局控制

// 根据审核环境变量决定跳转页面
    if (this.globalData.isAuditEnv) {
      // 审核环境显示方剂结构化页面
      console.log('当前是审核环境,跳转到方剂结构化页面');
      wx.reLaunch({
        url: '/pages/audit/audit' 
      });
    } else {
      // 正式环境显示原始页面
      console.log('当前是正式环境,跳转到原始页面');
      wx.reLaunch({
        url: '/pages/cropper-custom/cropper-custom'
      });
    }

注意这块需要将审核页面作为page.json中pages数组的第一页页面

"pages": [
	  //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
       {
		"path": "pages/audit/audit",-----审核页面路由
		"style": {
		  "navigationBarTitleText": "方剂结构化"--这块后续建议删掉顶部导航栏描述,不然正式版用户体验不好,加载过程是方剂结构化变成其他标题
		}
	  },
	  {
		"path": "pages/login/login",
		"style": {
		  "navigationBarTitleText": "登录"
		}
	  },
	  {
		"path": "pages/audit/formula/index",
		"style": {
		  "navigationBarTitleText": "方剂库",
		  "navigationStyle": "custom"
		}
	  },其他。。。。。。。

2.2 页面级保护

// 各功能页面的二次验证
<template>
    <view v-if="isAuditEnv">
        <!-- 合规内容 -->
    </view>
    <view v-else>
        <!-- 实际功能 -->
    </view>
</template>

3. 审核页面设计要点

3.1 合规内容展示

  • 展示完全合规的功能介绍
  • 使用传统中医知识介绍
  • 避免任何涉及医疗诊断的内容
  • 使用正面、积极的表述方式

3.2 必要的交互体验

  • 轮播图展示核心功能
  • 简单的知识问答测验
  • 可点击的功能分类入口
  • 搜索框与基础搜索功能

3.3 完整的审核页面层级

构建合理的页面层级结构:

审核主页
├── 方剂库页面
│   ├── 分类展示
│   └── 详情页面
├── 知识测验模块
│   └── 答题反馈
└── 基础搜索功能
4.1.4 静态数据模拟
  • 使用预设的静态数据
  • 确保数据内容合规
  • 模拟基本的数据交互
  • 保持数据的一致性
4.1.5 设计要点
  1. 完整性:确保功能链路完整,避免出现死链或空白页面
  2. 合理性:交互逻辑自然,符合用户习惯
  3. 实用性:提供真实可用的基础功能
  4. 安全性:所有内容都经过合规性审查

通过以上设计,既能确保审核顺利通过,又能为用户提供基础的使用体验。这种"精心设计的简单"比"简陋的完整"更容易获得审核通过。

4.2 二次保护机制 - AI助手页面等可能不能通过审核的页面进行二次保护

在完成主要的环境判断和路由控制后,我们还在具体页面中添加了二次保护机制,以确保内容的安全展示:

AI助手页面(/pages/template/ai/ai.vue)

作为第二道防线,即使用户通过某种方式访问到了AI助手页面:

<!-- 二次环境判断保护 -->
<view v-if="isAuditEnv" class="audit-content">
  <view class="audit-header">
    <text class="audit-title">方剂智能助手 - 功能开发中</text>
  </view>
  <!-- 展示功能预告内容 -->
</view>
<view v-else>
  <!-- 实际AI对话功能 -->
</view>

这种二次保护机制的优势:

  1. 双重保障:即使主路由控制失效,也能确保内容安全
  2. 降级展示:为意外访问提供合适的降级方案
  3. 用户体验:保持界面的完整性,避免出现空白或错误页面

通过这种多层保护策略,我们可以更好地控制功能的展示范围,确保应用在不同环境中的表现符合预期。

优势特点

  1. 合规性:审核环境展示符合要求的内容
  2. 灵活性:可以根据环境动态切换功能
  3. 用户体验:保证基础功能可用
  4. 维护性:统一的环境判断逻辑,便于管理

注意事项

  1. 环境判断要准确,避免误判
  2. 审核版本要保证功能完整性
  3. 正式环境切换要平滑
  4. 代码结构要清晰,便于维护

审核机制原理分析

1. 微信审核的工作原理

根据实践经验,微信小程序的审核机制主要包括:

  • 代码静态扫描:检查pages.json中声明的所有页面
  • 动态检测:审核人员实际操作测试
  • 资源文件扫描:检查项目中的所有文件

2. 常见误区

2.1 简单隐藏无效

  • ❌ 仅通过路由控制隐藏页面
  • ❌ 保留违规代码文件但不使用
  • ❌ 使用简单的boolean开关

2.2 失败案例

// 错误示范:简单的开关控制
const isAudit = true; // 审核状态
if (!isAudit) {
    // 违规功能代码
}

3. 有效的规避方案

3.1 环境识别

// 正确方案:使用官方API进行环境判断
const accountInfo = wx.getAccountInfoSync();
const envVersion = accountInfo.miniProgram.envVersion;
// develop: 开发版
// trial: 体验版
// release: 正式版

3.2 多层保护策略

  1. 路由层保护
// App.vue中的全局路由控制
if (isAuditEnv) {
    wx.reLaunch({
        url: '/pages/audit/audit'
    });
}
  1. 页面层保护
// 各功能页面的二次验证
<template>
    <view v-if="isAuditEnv">
        <!-- 合规内容 -->
    </view>
    <view v-else>
        <!-- 实际功能 -->
    </view>
</template>

3. 安全建议

  1. 避免在代码中包含敏感注释
  2. 使用代码混淆和加密
  3. 实现优雅的降级方案
  4. 保持审核版本的完整性
  5. 建立完善的测试流程

通过以上措施的组合使用,可以构建一个相对安全和可靠的审核适配方案。需要注意的是,这种方案仅供学习参考,实际使用时需要确保符合平台规范。

总结

这种方案通过环境判断来适配不同内容,既满足了审核要求,又保证了实际功能的完整性。开发者可以根据具体需求进行调整和优化。