美食偏好推荐器 - 商业级开发方案
项目概述
| 项目 |
详情 |
| 产品名称 |
美食偏好推荐器 |
| 目标平台 |
iOS App Store + Android Google Play + 微信小程序 |
| 商业模式 |
付费下载 + 应用内购买 |
| 核心功能 |
多维度美食偏好筛选与智能推荐 |
一、技术架构选型
1.1 跨平台方案对比
| 方案 |
开发成本 |
性能 |
上架难度 |
推荐度 |
| Flutter |
低 |
接近原生 |
中等 |
⭐⭐⭐⭐⭐ |
| React Native |
低 |
良好 |
中等 |
⭐⭐⭐⭐ |
| 原生开发 |
高 |
最佳 |
低 |
⭐⭐⭐ |
推荐:Flutter
- Google官方支持,长期维护有保障
- 一套代码同时生成iOS、Android、Web(小程序可复用逻辑)
- UI渲染性能接近原生
- 热重载开发效率高
1.2 系统架构图
┌─────────────────────────────────────────────────────────────┐
│ 客户端层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ iOS App │ │AndroidApp│ │ 小程序 │ │ 管理后台 │ │
│ │ (Flutter)│ │ (Flutter)│ │(Taro/uni)│ │ (Web) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼─────────────┼─────────────┼─────────────┼──────────┘
│ │ │ │
└─────────────┴─────────────┴─────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ API 网关层 │
│ (Nginx + Kong / AWS API Gateway) │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ 业务服务层 │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌──────────┐ │
│ │ 用户服务 │ │ 推荐服务 │ │ 商品服务 │ │ 支付服务 │ │
│ │ (Node.js) │ │ (Python) │ │ (Node.js) │ │ (Stripe) │ │
│ └────────────┘ └────────────┘ └────────────┘ └──────────┘ │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ 数据存储层 │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌──────────┐ │
│ │ PostgreSQL │ │ Redis │ │ Elasticsearch│ │ CDN │ │
│ │ (主数据库) │ │ (缓存) │ │ (搜索) │ │(静态资源)│ │
│ └────────────┘ └────────────┘ └────────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
二、核心功能设计
2.1 多维度筛选体系
┌─────────────────────────────────────────────────────────┐
│ 筛选维度架构 │
├─────────────────────────────────────────────────────────┤
│ 基础维度 │
│ ├── 口味偏好 (甜/咸/酸/辣/鲜) │
│ ├── 口感偏好 (软糯/酥脆/嫩滑/Q弹) │
│ └── 温度偏好 (热食/常温/冷食/冰品) │
├─────────────────────────────────────────────────────────┤
│ 健康维度 │
│ ├── 热量控制 (低卡/适中/高热量) │
│ ├── 营养成分 (高蛋白/低脂/低碳水/高纤维) │
│ ├── 特殊需求 (素食/清真/无麸质/低钠) │
│ └── 过敏原 (无坚果/无海鲜/无乳制品) │
├─────────────────────────────────────────────────────────┤
│ 场景维度 │
│ ├── 用餐场景 (早餐/午餐/晚餐/下午茶/夜宵) │
│ ├── 社交场景 (独自用餐/约会/聚会/商务) │
│ ├── 时间约束 (15分钟内/30分钟内/不限时) │
│ └── 预算范围 (经济型/适中/高端) │
├─────────────────────────────────────────────────────────┤
│ 个性化维度 │
│ ├── 历史偏好 (基于用户选择记录学习) │
│ ├── 地理位置 (附近餐厅/全城推荐) │
│ └── 季节时令 (当季推荐/全年可选) │
└─────────────────────────────────────────────────────────┘
2.2 推荐算法设计
# 推荐算法核心逻辑
class FoodRecommender:
def calculate_match_score(self, item, user_prefs):
"""
计算美食与偏好的匹配分数
"""
score = 0
weights = {
'taste': 0.25, # 口味权重
'health': 0.25, # 健康权重
'scene': 0.20, # 场景权重
'personal': 0.30 # 个性化权重
}
# 1. 口味匹配 (25%)
taste_score = self.match_taste(item, user_prefs.taste)
# 2. 健康匹配 (25%)
health_score = self.match_health(item, user_prefs.health)
# 3. 场景匹配 (20%)
scene_score = self.match_scene(item, user_prefs.scene)
# 4. 个性化匹配 (30%)
personal_score = self.match_personal(item, user_prefs.history)
# 加权总分
final_score = (
taste_score * weights['taste'] +
health_score * weights['health'] +
scene_score * weights['scene'] +
personal_score * weights['personal']
)
return final_score
2.3 功能模块清单
| 模块 |
功能点 |
优先级 |
预估工时 |
| 用户系统 |
注册/登录/找回密码 |
P0 |
3天 |
|
个人资料管理 |
P0 |
2天 |
|
偏好设置保存 |
P0 |
2天 |
| 核心推荐 |
多维度筛选器 |
P0 |
5天 |
|
智能推荐算法 |
P0 |
5天 |
|
推荐结果展示 |
P0 |
3天 |
|
历史记录 |
P1 |
2天 |
| 内容管理 |
美食数据库 |
P0 |
4天 |
|
图片资源管理 |
P0 |
2天 |
|
分类标签系统 |
P1 |
2天 |
| 商业化 |
应用内购买 |
P0 |
3天 |
|
订阅管理 |
P1 |
3天 |
|
支付集成(Apple/Google/微信) |
P0 |
4天 |
| 小程序 |
小程序适配 |
P1 |
5天 |
|
分享功能 |
P1 |
2天 |
| 其他 |
数据分析 |
P2 |
3天 |
|
推送通知 |
P2 |
2天 |
| 合计 |
|
|
52天 |
三、数据库设计
3.1 核心表结构
-- 用户表
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
phone VARCHAR(20),
nickname VARCHAR(50),
avatar_url TEXT,
subscription_type VARCHAR(20) DEFAULT 'free', -- free/premium/annual
subscription_expires_at TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- 用户偏好表
CREATE TABLE user_preferences (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
taste_sweet INT CHECK (taste_sweet BETWEEN 0 AND 5),
taste_salty INT CHECK (taste_salty BETWEEN 0 AND 5),
taste_sour INT CHECK (taste_sour BETWEEN 0 AND 5),
taste_spicy INT CHECK (taste_spicy BETWEEN 0 AND 5),
taste_umami INT CHECK (taste_umami BETWEEN 0 AND 5),
health_calorie_preference VARCHAR(20), -- low/medium/high
health_dietary_restrictions JSONB, -- ["vegetarian", "halal"]
health_allergens JSONB, -- ["nuts", "seafood"]
scene_meal_time VARCHAR(20), -- breakfast/lunch/dinner
scene_budget VARCHAR(20), -- budget/moderate/premium
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- 美食项目表
CREATE TABLE food_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(100) NOT NULL,
name_en VARCHAR(100),
category VARCHAR(50) NOT NULL, -- burger/milktea/coffee/etc
emoji VARCHAR(10),
description TEXT,
image_urls JSONB,
-- 口味属性
taste_sweet INT CHECK (taste_sweet BETWEEN 0 AND 5),
taste_salty INT CHECK (taste_salty BETWEEN 0 AND 5),
taste_sour INT CHECK (taste_sour BETWEEN 0 AND 5),
taste_spicy INT CHECK (taste_spicy BETWEEN 0 AND 5),
taste_umami INT CHECK (taste_umami BETWEEN 0 AND 5),
-- 健康属性
calories INT,
protein DECIMAL(5,2),
fat DECIMAL(5,2),
carbs DECIMAL(5,2),
is_vegetarian BOOLEAN DEFAULT FALSE,
is_halal BOOLEAN DEFAULT FALSE,
is_gluten_free BOOLEAN DEFAULT FALSE,
allergens JSONB, -- ["milk", "eggs", "nuts"]
-- 场景属性
suitable_meal_times JSONB, -- ["breakfast", "lunch"]
price_range VARCHAR(20), -- budget/moderate/premium
prep_time_minutes INT,
-- 元数据
popularity_score DECIMAL(3,2) DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW()
);
-- 用户选择历史表
CREATE TABLE user_selection_history (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
food_item_id UUID REFERENCES food_items(id),
selected_at TIMESTAMP DEFAULT NOW(),
rating INT CHECK (rating BETWEEN 1 AND 5),
feedback TEXT
);
-- 应用内购买记录表
CREATE TABLE purchase_records (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
product_id VARCHAR(100) NOT NULL, -- premium_monthly/premium_annual
platform VARCHAR(20) NOT NULL, -- ios/android/wechat
transaction_id VARCHAR(255) UNIQUE NOT NULL,
amount DECIMAL(10,2) NOT NULL,
currency VARCHAR(3) DEFAULT 'CNY',
status VARCHAR(20) DEFAULT 'completed', -- pending/completed/failed/refunded
purchased_at TIMESTAMP DEFAULT NOW(),
expires_at TIMESTAMP
);
四、商业化方案
4.1 定价策略
| 项目 |
iOS |
Android |
小程序 |
| 下载价格 |
¥12 / $1.99 |
免费下载 |
免费 |
| 高级版订阅 |
¥18/月 或 ¥128/年 |
¥15/月 或 ¥98/年 |
¥12/月 |
| 永久解锁 |
¥198 |
¥168 |
¥128 |
4.2 功能分层
┌─────────────────────────────────────────────────────────────┐
│ 免费版功能 │
│ ├── 基础筛选 (口味、温度) │
│ ├── 5个品类 (汉堡、奶茶、咖啡、披萨、火锅) │
│ ├── 每日3次推荐 │
│ └── 基础美食数据库 (100+ 条目) │
├─────────────────────────────────────────────────────────────┤
│ 高级版功能 │
│ ├── 全部筛选维度 (健康、场景、个性化) │
│ ├── 全部9个品类 │
│ ├── 无限次推荐 │
│ ├── 完整美食数据库 (500+ 条目) │
│ ├── 历史记录与偏好学习 │
│ ├── 附近餐厅推荐 (LBS) │
│ └── 无广告 │
└─────────────────────────────────────────────────────────────┘
五、开发计划
5.1 里程碑规划
M1: 基础版本 (4周)
├── Week 1-2: 项目搭建 + 用户系统 + 基础UI
├── Week 3: 核心推荐功能 + 5个品类数据
└── Week 4: 测试优化 + iOS/Android打包
M2: 商业化版本 (3周)
├── Week 5: 支付系统 + 订阅管理
├── Week 6: 完整筛选维度 + 全部品类
└── Week 7: 测试 + 应用商店准备
M3: 小程序 + 优化 (3周)
├── Week 8-9: 小程序开发
├── Week 10: 数据分析 + 推荐算法优化
└── 上线发布
5.2 成本估算
| 项目 |
费用 |
说明 |
| 开发成本 |
¥80,000-120,000 |
外包或自建团队2-3人,2-3个月 |
| 服务器 |
¥500-2000/月 |
初期配置,随用户增长扩容 |
| 应用商店 |
$99/年 + $25一次性 |
Apple开发者 + Google Play |
| 支付手续费 |
15-30% |
Apple/Google 抽成 |
| 设计资源 |
¥10,000-20,000 |
UI设计、图标、插画 |
| 推广预算 |
¥20,000-50,000 |
初期ASO、广告投放 |
| 合计首年 |
¥15-25万 |
|
六、上架准备清单
6.1 iOS App Store
- [ ] Apple Developer账号 ($99/年)
- [ ] 应用截图 (6.5寸、5.5寸、iPad各3-5张)
- [ ] 应用预览视频 (可选但推荐)
- [ ] 应用描述 (关键词优化)
- [ ] 隐私政策页面
- [ ] 用户协议
- [ ] 应用分级问卷
- [ ] 沙盒测试账号
6.2 Android Google Play
- [ ] Google Play开发者账号 ($25一次性)
- [ ] 应用截图 (手机、平板、折叠屏)
- [ ] 应用描述 (多语言)
- [ ] 隐私政策
- [ ] 内容分级问卷
- [ ] 64位架构支持
6.3 微信小程序
- [ ] 企业主体小程序账号
- [ ] ICP备案 (如含支付)
- [ ] 微信认证 (¥300/年)
- [ ] 隐私保护指引
- [ ] 用户授权说明
七、技术栈总结
| 层级 |
技术选型 |
| 前端 |
Flutter 3.x (iOS/Android) + Taro (小程序) |
| 后端 |
Node.js + Express / NestJS |
| 推荐引擎 |
Python + scikit-learn |
| 数据库 |
PostgreSQL + Redis |
| 搜索 |
Elasticsearch |
| 文件存储 |
AWS S3 / 阿里云OSS |
| 支付 |
Apple IAP + Google Billing + 微信支付 |
| 分析 |
Firebase Analytics + 神策数据 |
| CI/CD |
GitHub Actions + Fastlane |
八、下一步行动
- 确认技术方案 - 是否采用Flutter方案?
- 准备设计稿 - 需要UI/UX设计资源
- 申请开发者账号 - Apple/Google/微信
- 组建开发团队 - 确定外包或自建
- 制定详细排期 - 确认各里程碑交付时间
文档版本: v1.0
创建日期: 2025-05-19
更新日期: 2025-05-19