Files
mp-xieyingeng/docs/superpowers/specs/2026-04-07-wechat-privacy-userinfo-design.md
2026-04-07 21:40:59 +08:00

97 lines
2.6 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.
# 微信隐私授权与用户信息功能设计
## 概述
接入微信小游戏隐私授权 API实现
1. 进入 PageHome 时检查用户是否已授权隐私,未授权则引导授权
2. PageWriteLevels 点击分享按钮时获取用户头像、昵称并上传服务端
## 功能设计
### 1. 隐私授权检查
**触发时机**: PageHome `onViewLoad`
**实现逻辑**:
```typescript
// 检查用户是否已授权隐私
wx.getPrivacySetting({
success: (res) => {
if (!res.needAuthorization) {
// 已授权,继续正常流程
return;
}
// 未授权,调用引导授权
wx.requirePrivacyAuthorize({
success: () => {
console.log('用户已授权隐私');
},
fail: () => {
console.log('用户拒绝授权');
}
});
}
});
```
### 2. 用户头像昵称获取
**触发时机**: PageWriteLevels 点击分享按钮 (`_onCompleteClick`)
**实现逻辑**:
1. 调用 `wx.getUserProfile` 获取用户头像和昵称
2. 上传到服务端
3. 本地 StorageManager 缓存
```typescript
wx.getUserProfile({
desc: '用于完善用户资料',
success: async (res) => {
const userInfo = res.userInfo;
// 上传服务端
await HttpUtil.post(API_ENDPOINTS.USER_INFO_UPDATE, {
avatarUrl: userInfo.avatarUrl,
nickName: userInfo.nickName
});
// 本地缓存
StorageManager.setUserInfo(userInfo);
},
fail: (err) => {
console.error('获取用户信息失败', err);
}
});
```
### 3. 新增 API 端点
`ApiConfig.ts` 中添加:
| 端点 | 方法 | 用途 |
|------|------|------|
| `/user/info` | POST | 更新用户头像昵称 |
| `/user/info` | GET | 获取用户头像昵称 |
### 4. 数据存储
**本地 StorageManager**:
- `userInfo` - 用户头像昵称缓存
**服务端**:
- 新增用户信息表,存储头像 URL 和昵称
## 文件变更
| 文件 | 变更类型 |
|------|----------|
| `assets/scripts/config/ApiConfig.ts` | 新增端点 |
| `assets/scripts/utils/StorageManager.ts` | 新增用户信息存取方法 |
| `assets/scripts/utils/WxSDK.ts` | 新增隐私授权、用户信息获取方法 |
| `assets/scripts/utils/HttpUtil.ts` | 新增用户信息 API 调用方法 |
| `assets/prefabs/PageHome.ts` | 接入隐私授权检查 |
| `assets/prefabs/PageWriteLevels.ts` | 接入用户信息获取与上传 |
## 错误处理
- 隐私授权失败:提示用户"需要授权隐私才能使用完整功能",但不阻断流程
- 获取用户信息失败:提示用户"获取头像昵称失败",继续原有流程
- 服务端上传失败:本地缓存成功,服务端下次登录时同步