# 生日提醒小程序 - 云开发部署指南 ## 📋 部署步骤概览 ``` 上传云函数 → 创建数据库集合 → 配置定时触发器 → 测试功能 ``` --- ## 🚀 第一步:上传云函数 ### 1.1 打开云开发控制台 1. 在微信开发者工具中,点击顶部菜单 **"云开发"** 2. 进入云开发控制台 3. 确认环境ID为:`cloudbase-1gk3x0ia3a6b1f80` ### 1.2 上传云函数 需要上传3个云函数: #### 1. 上传 login 云函数 ```bash 右键点击 cloudfunctions/login → 选择 "上传并部署:云端安装依赖" → 等待上传完成(约30秒) ``` #### 2. 上传 syncAnniversary 云函数 ```bash 右键点击 cloudfunctions/syncAnniversary → 选择 "上传并部署:云端安装依赖" → 等待上传完成(约30秒) ``` #### 3. 上传 sendReminder 云函数 ```bash 右键点击 cloudfunctions/sendReminder → 选择 "上传并部署:云端安装依赖" → 等待上传完成(约30秒) ``` ### 1.3 验证上传结果 在云开发控制台 → 云函数,应该看到3个云函数: - ✅ login - ✅ syncAnniversary - ✅ sendReminder --- ## 🗄️ 第二步:创建数据库集合 ### 2.1 进入数据库管理 云开发控制台 → 数据库 ### 2.2 创建集合 需要创建2个集合: #### 1. anniversaries(纪念日数据) ``` 点击 "添加集合" 集合名称:anniversaries 权限设置:仅创建者可读写 ``` **字段说明**: ```javascript { _id: String, // 自动生成 _openid: String, // 自动生成(用户openid) personId: String, // 人员ID personName: String, // 人员姓名 type: String, // 类型:birthday/lunar_birthday/wedding等 customTypeName: String,// 自定义类型名称 isLunar: Boolean, // 是否农历 solarYear: Number, // 公历年份 solarMonth: Number, // 公历月份 solarDay: Number, // 公历日期 importance: String, // 重要程度 remindEnabled: Boolean,// 是否开启提醒 remindDays: Number, // 提前提醒天数 remark: String, // 备注 createTime: Date, // 创建时间 updateTime: Date // 更新时间 } ``` #### 2. remind_logs(提醒日志) ``` 点击 "添加集合" 集合名称:remind_logs 权限设置:仅创建者可读写 ``` **字段说明**: ```javascript { _id: String, // 自动生成 anniversaryId: String, // 纪念日ID personName: String, // 人员姓名 typeName: String, // 类型名称 daysUntil: Number, // 剩余天数 sendDate: Date, // 发送日期 status: String, // 状态:success/failed error: String // 错误信息(如果失败) } ``` --- ## ⏰ 第三步:配置定时触发器 ### 3.1 进入触发器管理 云开发控制台 → 云函数 → sendReminder → 触发器 ### 3.2 创建触发器 **方法1:自动配置(推荐)** 触发器已在 `config.json` 中配置,上传云函数时会自动创建: ```json { "name": "dailyReminder", "type": "timer", "config": "0 0 9 * * * *" } ``` **方法2:手动创建** 如果没有自动创建,手动添加: ``` 点击 "新建触发器" 触发器名称:dailyReminder 触发周期:自定义 Cron表达式:0 0 9 * * * * 说明:每天上午9点执行 ``` ### 3.3 Cron 表达式说明 格式:`秒 分 时 日 月 星期 年` 常用配置: ``` 0 0 9 * * * * - 每天上午9:00 0 0 8,20 * * * * - 每天上午8:00和晚上8:00 0 0 9 * * 1-5 * - 工作日上午9:00 ``` --- ## 🧪 第四步:测试功能 ### 4.1 测试订阅消息授权 1. 在小程序中添加一个纪念日 2. 开启"是否提醒"开关 3. 点击保存 4. 应该弹出订阅消息授权弹窗 5. 点击"允许" ### 4.2 测试云函数 在云开发控制台 → 云函数 → sendReminder: ``` 点击 "测试" 输入参数:{} 点击 "运行测试" ``` 查看返回结果: ```json { "success": true, "total": 1, "successCount": 1, "failCount": 0 } ``` ### 4.3 查看数据库 在云开发控制台 → 数据库: 1. **anniversaries 集合**:应该看到刚才添加的纪念日数据 2. **remind_logs 集合**:如果触发了提醒,应该有日志记录 ### 4.4 测试订阅消息接收 **方法1:手动触发(立即测试)** 在云开发控制台 → 云函数 → sendReminder → 运行测试 **方法2:等待定时触发** 等到第二天上午9:00,自动触发提醒 **方法3:修改定时器(快速测试)** 临时修改 Cron 表达式为:`0 */1 * * * * *`(每分钟执行一次) 测试完成后改回:`0 0 9 * * * *` --- ## ⚙️ 第五步:项目配置 ### 5.1 修改 project.config.json 确认云函数根目录配置: ```json { "cloudfunctionRoot": "cloudfunctions/", "miniprogramRoot": "./", "appid": "你的AppID", "projectname": "生日提醒小程序" } ``` ### 5.2 确认 app.json 无需额外配置,订阅消息权限已自动启用。 --- ## 🎯 功能验证清单 完成以下验证,确保功能正常: - [ ] 云开发初始化成功(控制台无报错) - [ ] 能够获取到用户 openid - [ ] 添加纪念日时弹出订阅授权 - [ ] 纪念日数据同步到云端(查看数据库) - [ ] 手动执行 sendReminder 云函数成功 - [ ] 定时触发器配置成功 - [ ] 能够收到订阅消息推送 --- ## 🐛 常见问题 ### Q1: 云函数上传失败? **A**: 检查网络连接,或手动安装依赖: ```bash cd cloudfunctions/login npm install ``` 然后选择 "上传并部署:不安装依赖" ### Q2: 获取不到 openid? **A**: 1. 确认已上传 login 云函数 2. 在真机上测试(开发者工具可能有限制) 3. 查看控制台日志 ### Q3: 订阅消息没有弹出? **A**: 1. 确认在真机上测试(开发者工具不支持) 2. 检查模板ID是否正确 3. 每个用户需要单独授权 ### Q4: 定时触发器不执行? **A**: 1. 确认 Cron 表达式正确 2. 查看云函数日志 3. 手动测试云函数是否正常 ### Q5: 收不到订阅消息? **A**: 1. 确认用户已授权订阅 2. 检查数据库中有 openid 3. 查看 remind_logs 是否有记录 4. 检查云函数权限配置 --- ## 📊 监控和维护 ### 1. 查看云函数日志 云开发控制台 → 云函数 → 选择函数 → 日志 ### 2. 查看提醒统计 查询 remind_logs 集合: ```javascript // 查看今天的提醒记录 db.collection('remind_logs') .where({ sendDate: _.gte(new Date(new Date().toDateString())) }) .get() ``` ### 3. 数据备份 定期导出数据库数据: 云开发控制台 → 数据库 → 导出 --- ## 💰 费用说明 ### 免费额度(每天) - 云函数调用:10万次 - 数据库读操作:5万次 - 数据库写操作:3万次 - 云存储容量:5GB 对于个人使用,完全免费! --- ## 🎉 部署完成! 现在你的生日提醒小程序已经具备了完整的推送提醒功能: ✅ 用户添加纪念日时自动请求订阅授权 ✅ 数据自动同步到云端 ✅ 每天上午9点自动检查并发送提醒 ✅ 提醒记录自动保存到数据库 **享受你的智能生日提醒吧!** 🎂