跳到主要内容

小程序与 App

网站、小程序还是 App?

很多人做了第一个 Web 产品之后,就开始琢磨:要不要做个 App?要不要上微信小程序?

先别急,想清楚一个核心问题:你的用户在哪里?

如果你做的是海外市场,用户主要用浏览器访问,那 Web 就够了。把网站做好、做好 SEO、做好 PWA(渐进式 Web 应用),体验已经很接近原生 App 了。90% 的情况下,Web 是性价比最高的选择。

如果你面向国内市场,那微信小程序确实值得考虑。因为国内用户的使用习惯和海外很不一样——大家更习惯在微信生态里完成各种操作,扫码打开小程序比输入网址方便得多。

什么时候选哪种?快速决策表

你的情况推荐方案理由
海外用户、工具类产品Web(PWA)零安装门槛、SEO 友好、迭代最快
国内用户、轻量服务微信小程序用户习惯、微信支付、分享裂变
需要复杂交互/高频使用App推送通知、离线体验、硬件调用
快速验证想法Web开发成本最低、发布最快
预算有限、想多端覆盖跨平台框架一套代码多个平台
国内 + 海外都要先 Web,再按需扩展别贪多,专注做好一个

核心原则: 先把 Web 做好、做透。等你有了稳定的用户群和收入,再根据用户需求决定要不要做小程序或 App。别一开始就想"全平台覆盖",那只会让你什么都做不好。

Web 的优势:为什么大多数时候它就够了

在讨论小程序和 App 之前,先认真想想 Web 能做到什么:

能力Web 支持?说明
跨平台一个 URL,所有设备都能访问
推送通知✅(PWA)Service Worker 支持 Push API
离线使用✅(PWA)Service Worker 缓存策略
添加到主屏幕✅(PWA)和原生 App 图标一样
访问摄像头WebRTC API
地理位置Geolocation API
本地存储IndexedDB,最大几百 MB
文件读写File System Access API
蓃牙✅(有限)Web Bluetooth API
推送 + 后台同步✅(PWA)Background Sync API

Web 做不到的:

  • 复杂的后台任务(App 可以后台运行很久)
  • 深度硬件集成(NFC、指纹识别等原生 API)
  • 应用商店的分发渠道
  • 一些国家/地区用户对"下载 App"的习惯

所以,除非你的产品明确需要上面列的这些能力,否则 Web 是最好的起点。

微信小程序开发详解

第一步:注册小程序账号

  1. 打开 mp.weixin.qq.com,点击"立即注册"
  2. 选择"小程序"类型
  3. 填写邮箱(未注册过微信公众平台的邮箱)、密码
  4. 邮箱收到验证链接,点击激活
  5. 选择主体类型:
    • 个人:只需身份证,但功能受限(不能用微信支付、不能做虚拟支付)
    • 个体工商户:需要营业执照,可以用微信支付
    • 企业:需要企业营业执照,功能最全
  6. 完成主体认证(个人类型免认证,企业需要打款验证或微信认证,认证费 300 元/年)
  7. 进入小程序后台,拿到 AppID(后面开发要用)

第二步:安装开发工具

下载 微信开发者工具,登录你的微信账号,创建一个新项目,填入 AppID。

项目目录结构:

my-miniapp/
├── pages/
│ ├── index/
│ │ ├── index.wxml ← 页面模板(类似 HTML)
│ │ ├── index.wxss ← 页面样式(类似 CSS)
│ │ ├── index.js ← 页面逻辑
│ │ └── index.json ← 页面配置
│ └── about/
│ ├── about.wxml
│ ├── about.wxss
│ ├── about.js
│ └── about.json
├── app.js ← 小程序入口
├── app.json ← 全局配置
├── app.wxss ← 全局样式
└── project.config.json ← 项目配置

第三步:用 AI 写小程序代码

好消息是,AI 对小程序开发也很熟悉。你可以在 Cursor 里直接让它写:

帮我写一个微信小程序页面:
- 顶部显示用户头像和昵称
- 中间是一个列表,显示最近的订单(假数据就行)
- 底部有 tabbar,首页和我的两个 tab

AI 会帮你生成完整的 WXML、WXSS、JS 和 JSON 配置文件。小程序的 WXML 语法和 HTML 很像(<view> 对应 <div><text> 对应 <span>),WXSS 语法和 CSS 基本一样,所以上手很快。

小程序的限制

  • 包体大小:单包 2MB,分包最大 20MB。代码太多就得做分包加载
  • 审核周期:提交审核一般 1-7 天,节假日更慢
  • 平台规则:不能做很多东西,比如虚拟支付要走微信支付(苹果税类似)
  • AI 生成内容审核:如果你的小程序涉及 AI 对话/生成内容,需要额外的资质和审核
  • 域名要求:小程序要求后端接口必须是 HTTPS + 已备案域名

跨平台方案:Taro vs uni-app

如果你既想要小程序,又想要 H5,还想要 App,可以考虑跨平台框架。

Taro

Taro 是京东出的,用 React 语法写,一套代码可以编译成:

  • 微信/支付宝/百度/字节/QQ 小程序
  • H5(移动端网页)
  • React Native App

适合谁: 已经会 React 的开发者。学习成本几乎为零。

// Taro 代码示例 —— 和 React 一模一样
import { View, Text, Button } from '@tarojs/components'
import { useState } from 'react'

export default function Counter() {
const [count, setCount] = useState(0)
return (
<View>
<Text>点击了 {count}</Text>
<Button onClick={() => setCount(count + 1)}>+1</Button>
</View>
)
}

uni-app

uni-app 是 DCloud 出的,用 Vue 语法写,支持的平台更多:

  • 微信/支付宝/百度/字节/QQ/京东/快手/飞书小程序
  • H5
  • iOS App(通过 uni-app 原生渲染或 WebView)
  • Android App

适合谁: 熟悉 Vue 的开发者,或者需要覆盖尽可能多平台的项目。

<!-- uni-app 代码示例 -->
<template>
<view>
<text>点击了 {{ count }} 次</text>
<button @click="count++">+1</button>
</view>
</template>

<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>

Taro vs uni-app 对比

维度Tarouni-app
语法ReactVue
出品方京东DCloud
支持平台主流小程序 + H5 + RN更多小程序 + H5 + 原生 App
App 体验React Native,体验好WebView 或 Weex,体验一般
社区生态活跃,React 生态加持非常活跃,国内用户最多
学习资料丰富非常丰富,插件市场大
适合场景React 团队、注重 App 体验Vue 团队、需要广泛平台覆盖
AI 熟悉度高(React 生态)中等

我的建议: 如果你本来就是 React 技术栈,选 Taro。如果你是 Vue 技术栈或者需要覆盖特别多的小程序平台,选 uni-app。两者都足够成熟,不会踩大坑。

React Native 做 App

如果你确实需要一个原生 App,但又不会 Swift 或 Kotlin,React Native 是最好的选择。

为什么选 React Native

  • 用 JavaScript/TypeScript 写,AI 对它非常熟悉
  • 社区庞大,遇到问题很容易找到答案
  • Expo 工具链让开发体验非常好
  • 编译出来的 App 体验接近原生(比 WebView 套壳好很多)

快速开始(用 Expo)

# 创建项目
npx create-expo-app my-app --template blank-typescript

# 进入目录
cd my-app

# 启动开发服务器
npx expo start

用 Expo Go App 扫码就能在手机上预览。写代码的时候改一下、保存,手机上立刻看到效果。

一个简单的 RN 页面

import { View, Text, StyleSheet, TouchableOpacity, FlatList } from 'react-native'
import { useState } from 'react'

interface Todo {
id: string
text: string
done: boolean
}

export default function App() {
const [todos, setTodos] = useState<Todo[]>([
{ id: '1', text: '学习 React Native', done: false },
{ id: '2', text: '做一个 App', done: false },
])

const toggleTodo = (id: string) => {
setTodos(todos.map(t => t.id === id ? { ...t, done: !t.done } : t))
}

return (
<View style={styles.container}>
<Text style={styles.title}>待办事项</Text>
<FlatList
data={todos}
keyExtractor={item => item.id}
renderItem={({ item }) => (
<TouchableOpacity onPress={() => toggleTodo(item.id)}>
<Text style={item.done ? styles.done : styles.todo}>
{item.done ? '✅' : '⬜'} {item.text}
</Text>
</TouchableOpacity>
)}
/>
</View>
)
}

const styles = StyleSheet.create({
container: { flex: 1, padding: 20, paddingTop: 60 },
title: { fontSize: 24, fontWeight: 'bold', marginBottom: 20 },
todo: { fontSize: 18, paddingVertical: 10 },
done: { fontSize: 18, paddingVertical: 10, textDecorationLine: 'line-through', color: '#999' },
})

用 AI 帮你写 React Native 代码非常高效。你告诉它要什么功能,它生成的代码通常直接能跑。Expo 把原生开发的很多复杂操作封装好了,你基本不需要碰 Xcode 或 Android Studio。

Flutter 对比

Flutter(Dart 语言)也是选项之一。它的 UI 表现力很强,做出的 App 很好看。但 AI 对 Flutter/Dart 的熟悉度不如 React Native/TypeScript,遇到问题时 AI 帮你解决的能力会稍弱一些。如果你没有特别偏好,优先选 React Native

Web 套壳方案

还有一条更省事的路:直接用 Web 技术套一个 App 壳

Capacitor(Ionic 团队出的)或者 Cordova,把你的 Web 项目包装成一个 App。本质上还是网页,但能发布到 App Store 和 Google Play。

# 把现有的 Next.js 项目变成 App
npm install @capacitor/core @capacitor/cli
npx cap init my-app com.example.myapp

# 添加平台
npx cap add ios
npx cap add android

# 构建 Web 然后同步到原生项目
npm run build
npx cap sync

# 打开 Xcode 或 Android Studio
npx cap open ios
npx cap open android

这种方案适合工具类、内容类应用。不适合需要复杂原生交互(比如地图、视频编辑、AR)的场景。

上架应用商店

做完了 App,要上架到应用商店,有一些事情你需要知道。

Apple App Store

  • 开发者账号:每年 99 美元
  • 审核时间:一般 1-3 天,首次提交可能更久
  • 审核严格程度:很高。会检查隐私政策、功能完整性、界面规范、支付是否走 IAP 等
  • 被拒是常态:不要怕,按反馈修改再提交就行。常见的被拒原因:
    • 缺少隐私政策链接
    • App 功能太简单("苹果不接受 Demo 级别的 App")
    • 使用了非 IAP 的支付方式
    • 界面不符合 Human Interface Guidelines

Google Play

  • 开发者账号:一次性 25 美元
  • 审核时间:一般 1-3 天
  • 审核严格程度:比苹果宽松,但也在收紧。注意 Google Play 对 AI 生成内容也有政策要求
  • 新账号限制:新注册的开发者账号,前几个 App 可能会进入"封闭测试",需要一定数量的测试用户才能发布正式版

国内安卓应用市场

国内没有统一的 Google Play,需要分别提交到各个市场:

市场准备材料特殊要求
华为应用市场软著 + 企业资质审核较严格
小米应用商店软著 + 企业资质审核速度还行
OPPO 软件商店软著 + 企业资质
vivo 应用商店软著 + 企业资质
应用宝(腾讯)软著 + 企业资质流量大,建议优先上

软著(软件著作权)是国内安卓上架的必需品。申请周期一般 1-2 个月,可以找代办加快(费用几百到一两千)。建议提前准备。

App Store 提交清单

上架前对照检查:

  • 隐私政策页面(必须有,且必须可访问)
  • App 图标(1024x1024px,无圆角无透明)
  • 截图(各尺寸:6.7寸、6.5寸、5.5寸 iPhone;12.9寸 iPad)
  • App 描述和关键词
  • 分类选择
  • 年龄分级问卷填写
  • 支付配置(如适用,苹果必须走 IAP)
  • 推送通知权限说明(如适用)
  • 数据收集声明(App Privacy 目录)
  • 测试账号(如果 App 需要登录)
  • 版本号和 Build 号正确

成本对比

从零开始,不同方案需要花多少?

方案开发成本年维护成本上线时间适合阶段
Web(Next.js + Vercel)$0(AI 帮你写)$0-20(域名)1-2 天任何阶段
微信小程序(个人)$0$01 周(含审核)验证想法
微信小程序(企业)$0 + 300 认证费300 认证费2 周(含认证)正式运营
Taro / uni-app 跨平台$0$0-3001-2 周多端覆盖
React Native(Expo)$0$99(苹果)+ $25(谷歌)2-4 周有 App 需求
Capacitor 套壳$0$99 + $251-2 周快速上架
原生 iOS + Android$5000+$99 + $251-3 月融资后/高要求

独立开发者的最佳路径:

  1. Week 1-2:用 Next.js + Vercel 做 Web 版本,快速上线
  2. Week 3-4:根据用户反馈迭代,验证产品方向
  3. Month 2:如果需要国内市场,用 Taro/uni-app 做小程序版本
  4. Month 3+:如果用户量够大、有 App 需求,用 React Native 做 App

别跳步。很多独立开发者犯的最大错误就是一开始就想做 App,花了两个月还没上线,Web 版本也没做,最后什么都没验证。

本章小结

  • 90% 的情况,Web 就是最好的选择。 零成本、零门槛、迭代最快
  • 面向国内市场,微信小程序值得做。 但要先注册账号、拿到资质
  • 跨平台方案(Taro/uni-app)适合快速多端覆盖, 但"都能做但都不精"
  • React Native 是做 App 的最佳选择, Expo 让开发体验非常好
  • Web 套壳(Capacitor)是最快的 App 上架方式, 适合内容/工具类应用
  • 上架应用商店有门槛, 提前准备好隐私政策、截图、资质等材料

专注一个平台,做到极致,再考虑扩展。这个原则适用于几乎所有独立开发者。