gratitude.durian.xpcool.com/WECHAT_DEPLOYMENT_GUIDE.md
2026-08-14 18:01:45 +08:00

535 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 微信小游戏测试与部署指南
## 📋 测试前准备
### 1. 环境检查清单
#### 开发环境
- [ ] Cocos Creator 3.8 已安装
- [ ] 微信开发者工具已安装(最新版本)
- [ ] Node.js 14+ 已安装
- [ ] 项目 AppID: `wxb2b7651c561f9d53`
#### 代码准备
- [ ] 所有 TypeScript 编译通过,无错误
- [ ] 广告位 ID 已替换为真实值
- [ ] 移除或注释掉所有 `console.log`(生产环境)
- [ ] 版本号已更新package.json / version.json
#### 资源准备
- [ ] 所有图片已压缩(推荐使用 TinyPNG
- [ ] 音频文件已优化MP3 格式,适当比特率)
- [ ] 图标已准备200x200 PNG用于微信后台
- [ ] 截图已准备5张 1280x720 PNG
---
## 🧪 本地测试流程
### 步骤1: 构建微信小游戏包
```bash
# 方法1: 使用提供的构建脚本(推荐)
.\build-wechat.ps1 -Version "1.0.0"
# 方法2: 使用 Cocos Creator GUI
# 1. 打开项目
# 2. 菜单栏: 项目 → 构建发布
# 3. 选择平台: WeChat Game
# 4. 点击「构建」
```
### 步骤2: 用微信开发者工具打开
1. 启动微信开发者工具
2. 点击「+」→「导入项目」
3. 选择目录: `build/wechatgame`
4. AppID: `wxb2b7651c561f9d53`
5. 点击「导入」
### 步骤3: 模拟器测试
在微信开发者工具中测试以下内容:
#### 基础功能
- [ ] 游戏能正常启动3秒内
- [ ] 主界面显示正常
- [ ] 点击「开始游戏」进入关卡
- [ ] 水果掉落和合成逻辑正常
- [ ] Boss 饱食度系统工作
- [ ] 通关/失败判定正确
#### UI 交互
- [ ] 按钮点击有反馈
- [ ] 面板打开/关闭动画流畅
- [ ] 分数实时更新
- [ ] 道具使用正常
#### 音频系统
- [ ] BGM 正常播放
- [ ] 音效触发正常
- [ ] 音量控制有效
- [ ] 静音功能正常
#### 存档系统
- [ ] 游戏进度自动保存
- [ ] 重新进入游戏能加载存档
- [ ] 最高分记录正确
- [ ] 图鉴解锁状态保持
### 步骤4: 真机测试(必须)
**重要**: 广告在模拟器中无法显示,必须真机测试!
#### 生成预览二维码
1. 微信开发者工具顶部点击「预览」
2. 等待构建完成
3. 扫描二维码
#### 真机测试清单
##### iOS 设备iPhone 8 或以上)
- [ ] 游戏启动时间 < 3秒
- [ ] 帧率稳定 60 FPS
- [ ] 内存占用 < 200 MB
- [ ] 触摸响应灵敏
- [ ] 音频播放正常
- [ ] 广告能正常展示激励视频 + 插屏
##### Android 设备(中高端机型)
- [ ] 游戏启动时间 < 3秒
- [ ] 帧率稳定 60 FPS
- [ ] 内存占用 < 300 MB
- [ ] 触摸响应灵敏
- [ ] 音频播放正常
- [ ] 广告能正常展示
##### 低端机测试(可选但推荐)
- [ ] 降级到 30 FPS 后流畅运行
- [ ] 减少水果数量后不卡顿
- [ ] 内存占用可控不崩溃
---
## 🐛 常见问题排查
### 问题1: 游戏启动黑屏
**可能原因**:
- 资源路径错误
- TypeScript 编译失败
- 微信环境兼容性问题
**排查步骤**:
```javascript
// 1. 在 game.js 添加日志
console.log('[Game] 开始加载...');
// 2. 在 main.js 添加日志
class Main {
constructor() {
console.log('[Main] 构造函数调用');
this.initWXEnvironment();
console.log('[Main] 微信环境初始化完成');
}
}
```
**解决方案**:
- 检查 `project.config.json` 中的 `appid` 是否正确
- 确认所有资源文件在 `res` 目录下
- 查看控制台错误信息
### 问题2: 广告不显示
**可能原因**:
- 广告位 ID 未替换
- 模拟器测试广告只在真机显示
- 网络问题
- 广告未预加载
**排查步骤**:
```typescript
// AdManager.ts 中添加详细日志
static showReviveAd(onReward?: () => void, onClose?: () => void): void {
console.log('[AdManager] 尝试展示复活广告');
console.log('[AdManager] 广告实例:', this._reviveAd);
if (!this._reviveAd) {
console.error('[AdManager] 广告实例为空,可能未初始化');
return;
}
// ... 其余代码
}
```
**解决方案**:
1. 确认已替换广告位 ID:
```typescript
// AdManager.ts
private static readonly AD_UNIT_ID_REVIVE = 'adunit-xxxxxxxxxxxx'; // 替换为真实ID
```
2. 真机测试不要依赖模拟器
3. 检查网络连接WiFi/4G
4. 提前预加载广告:
```typescript
// 在游戏启动3秒后预加载
setTimeout(() => {
AdManager.preloadAds();
}, 3000);
```
### 问题3: 内存泄漏
**症状**:
- 长时间游戏后卡顿
- 切换场景后内存不下降
- 最终导致崩溃
**排查工具**:
```typescript
// 添加内存监控
class MemoryMonitor {
static start() {
setInterval(() => {
if (wx.getSystemInfoSync) {
const info = wx.getSystemInfoSync();
const memoryMB = info.memoryUsage / 1024 / 1024;
console.log(`[Memory] 当前内存: ${memoryMB.toFixed(1)} MB`);
if (memoryMB > 180) {
console.warn('[Memory] ⚠️ 内存警告!');
}
}
}, 10000);
}
}
```
**解决方案**:
```typescript
// 1. 场景切换时清理资源
onDestroy() {
// 停止所有定时器
this.unscheduleAllCallbacks();
// 移除所有子节点
this.node.removeAllChildren();
// 释放资源
resources.releaseAll();
// 触发 GC
if (wx.triggerGC) {
setTimeout(() => wx.triggerGC(), 500);
}
}
// 2. 对象池管理
class ObjectPool {
clear() {
this.pool.forEach(obj => {
if (obj.destroy) {
obj.destroy();
}
});
this.pool = [];
}
}
```
### 问题4: 音频中断后不恢复
**症状**:
- 来电后 BGM 不继续播放
- 切换到其他应用再返回无声
**解决方案**:
已在 `AudioManager.ts` 中实现确保以下代码存在:
```typescript
private _initWeChatAudio(): void {
// 监听音频中断开始
if (wx.onAudioInterruptionBegin) {
wx.onAudioInterruptionBegin(() => {
this._onAudioInterruptBegin();
});
}
// 监听音频中断结束
if (wx.onAudioInterruptionEnd) {
wx.onAudioInterruptionEnd(() => {
this._onAudioInterruptEnd();
});
}
}
private _onAudioInterruptEnd(): void {
// 恢复 BGM
if (this._bgmWasPlaying && !this._muted) {
this._bgmSource?.resume();
}
}
```
---
## 📤 上传到微信后台
### 步骤1: 准备提审材料
#### 游戏截图5张
要求
- 尺寸1280x720 或更高
- 格式PNG JPG
- 内容真实 gameplay 截图包含
1. 主界面
2. 游戏进行中
3. 金色传说特效
4. Boss 投喂界面
5. 结算面板
#### 游戏简介
```
《报恩榴莲》是一款创新的三三合成益智小游戏。
玩法特色:
🎮 三个相同水果碰在一起自动合成更高级水果
🍉 9级水果链终极形态是拟人化报恩榴莲
👾 20个可爱 Boss投喂它们通关
✨ 合成终极水果触发「金色传说」史诗特效
💎 收集图鉴,解锁所有水果形态
轻松休闲,适合碎片时间游玩~
```
#### 分类选择
- 一级分类游戏
- 二级分类休闲 益智
### 步骤2: 上传版本
#### 方法1: 微信开发者工具上传
1. 点击顶部上传按钮
2. 填写版本号`1.0.0`
3. 填写版本备注
```
v1.0.0 首次提交
- 核心三三合成玩法
- 20个关卡
- 广告系统接入
- 存档系统
```
4. 点击上传
5. 等待上传完成约1-5分钟
#### 方法2: 命令行上传(自动化)
```bash
# 需要安装 miniprogram-ci
npm install -g miniprogram-ci
# 上传
miniprogram-ci upload \
--pp ./build/wechatgame \
--pkp private.key \
--appid wxb2b7651c561f9d53 \
--version 1.0.0 \
--desc "v1.0.0 首次提交"
```
### 步骤3: 提交审核
1. 登录 [微信公众平台](https://mp.weixin.qq.com/)
2. 左侧菜单管理 版本管理
3. 找到刚上传的版本点击提交审核
4. 填写审核信息
- **功能页面**列出所有可访问的页面路径
- **测试账号**无需提供单机游戏
- **补充说明**
```
纯单机益智游戏无需特殊权限
广告位已配置可在真机测试中查看
```
5. 上传截图5张
6. 确认分类正确
7. 点击提交
### 审核时间
- **通常**1-3个工作日
- **加急**联系客服需理由
---
## ✅ 审核通过后的操作
### 步骤1: 发布版本
1. 收到审核通过通知
2. 登录微信公众平台
3. 版本管理 找到通过的版本
4. 点击全量发布
### 步骤2: 灰度发布(推荐)
首次发布建议先灰度测试
1. 点击灰度发布
2. 设置比例10%
3. 观察数据 24-48 小时
4. 无问题后全量发布
### 步骤3: 数据监控
发布后关注以下指标
#### 关键指标(微信公众平台查看)
- **新增用户**日新增周新增
- **活跃用户**DAUWAU
- **留存率**次日留存7日留存
- **使用时长**平均单次时长
- **广告收入**eCPM总收入
#### 性能指标(通过 wx.reportAnalytics 上报)
```typescript
// 示例:上报性能数据
wx.reportAnalytics('perf_data', {
fps: 60,
memory_mb: 150,
level: 5,
play_time_sec: 300
});
```
---
## 🔧 运营与维护
### 日常维护
#### 每周任务
- [ ] 查看用户反馈公众号留言客服消息
- [ ] 分析留存率数据
- [ ] 监控广告 eCPM
- [ ] 检查崩溃率目标 < 1%
#### 每月任务
- [ ] 规划新版本内容
- [ ] A/B 测试广告频控
- [ ] 优化低留存关卡
- [ ] 更新排行榜数据
### 版本迭代策略
#### v1.1.0 建议内容
- 新增 10 个关卡21-30
- 新增 3 种道具
- 优化新手引导
- 修复已知 bug
#### v1.2.0 建议内容
- 每日挑战模式
- 好友排行榜
- 成就系统
- 季节性活动
### 用户获取
#### 免费渠道
1. **微信搜索优化**
- 游戏名称包含关键词:「合成」「榴莲」「休闲
- 简介优化 SEO
2. **社交分享**
- 设计分享诱因:「我合成了报恩榴莲你也来试试!」
- 分享奖励金币或道具
3. **微信群传播**
- 制作有趣的游戏片段 GIF
- 在相关群分享
#### 付费渠道(后期)
1. 微信朋友圈广告
2. 小程序互推
3. KOL 合作
---
## 📊 数据分析模板
### 关键事件埋点
```typescript
// 游戏启动
wx.reportAnalytics('game_start', {
level: currentLevel,
timestamp: Date.now()
});
// 关卡完成
wx.reportAnalytics('level_complete', {
level: levelNumber,
score: finalScore,
time_used: gameTime,
continues_used: continueCount
});
// 广告展示
wx.reportAnalytics('ad_shown', {
ad_type: 'rewarded_video',
placement: 'game_over'
});
// 广告完成
wx.reportAnalytics('ad_completed', {
ad_type: 'rewarded_video',
reward_given: true
});
// 道具使用
wx.reportAnalytics('item_used', {
item_id: itemId,
level: currentLevel
});
```
### 数据看板建议
| 指标 | 目标值 | 监控频率 |
|------|--------|----------|
| 次日留存 | > 30% | 每日 |
| 7日留存 | > 10% | 每周 |
| 平均时长 | > 5分钟 | 每日 |
| 广告完成率 | > 60% | 每日 |
| eCPM | > ¥50 | 每周 |
| 崩溃率 | < 1% | 每日 |
---
## 🎯 总结
### 上线前最后检查
- [ ] 所有功能在真机测试通过
- [ ] 广告能正常展示和完成
- [ ] 存档系统稳定
- [ ] 包体大小符合规范主包 20MB
- [ ] 启动时间 < 3秒
- [ ] 帧率稳定 60 FPS
- [ ] 内存占用合理
- [ ] 提审材料准备齐全
### 成功要素
1. **核心玩法**三三合成差异化有记忆点
2. **情感连接**报恩榴莲 IP建立共鸣
3. **传播性**金色传说名场面适合短视频
4. **商业化**广告频控合理不影响体验
5. **持续运营**数据驱动迭代快速试错
---
**祝《报恩榴莲》上线顺利,大获成功!** 🎉🍈✨