feat: 接入微信隐私授权API和用户信息获取
- WxSDK 新增隐私授权检查和用户信息获取方法 - StorageManager 新增用户信息本地缓存方法 - PageHome 进入时检查隐私授权状态 - PageWriteLevels 分享时获取用户头像昵称并上传服务端 - ApiConfig 新增用户信息 API 端点 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { _decorator, Node, Button } from 'cc';
|
||||
import { BaseView } from 'db://assets/scripts/core/BaseView';
|
||||
import { ViewManager } from 'db://assets/scripts/core/ViewManager';
|
||||
import { WxSDK } from 'db://assets/scripts/utils/WxSDK';
|
||||
import { WxSDK, checkPrivacySetting, requirePrivacyAuthorize } from 'db://assets/scripts/utils/WxSDK';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
@@ -23,6 +23,8 @@ export class PageHome extends BaseView {
|
||||
console.log('[PageHome] onViewLoad');
|
||||
this._initButtons();
|
||||
this._initWxShare();
|
||||
// 检查隐私授权
|
||||
this._checkPrivacyAuthorization();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,6 +38,28 @@ export class PageHome extends BaseView {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查隐私授权状态
|
||||
*/
|
||||
private async _checkPrivacyAuthorization(): Promise<void> {
|
||||
if (!WxSDK.isWechat()) {
|
||||
console.log('[PageHome] 非微信环境,跳过隐私授权检查');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const { needAuthorization } = await checkPrivacySetting();
|
||||
if (needAuthorization) {
|
||||
console.log('[PageHome] 用户未授权隐私,引导授权');
|
||||
await requirePrivacyAuthorize();
|
||||
} else {
|
||||
console.log('[PageHome] 用户已授权隐私');
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn('[PageHome] 隐私授权检查异常:', err);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化按钮事件
|
||||
*/
|
||||
|
||||
@@ -4,6 +4,10 @@ import { ViewManager } from 'db://assets/scripts/core/ViewManager';
|
||||
import { LevelDataManager } from 'db://assets/scripts/utils/LevelDataManager';
|
||||
import { ToastManager } from 'db://assets/scripts/utils/ToastManager';
|
||||
import { ShareManager } from 'db://assets/scripts/utils/ShareManager';
|
||||
import { StorageManager } from 'db://assets/scripts/utils/StorageManager';
|
||||
import { WxSDK, getUserProfile } from 'db://assets/scripts/utils/WxSDK';
|
||||
import { API_ENDPOINTS, API_TIMEOUT } from 'db://assets/scripts/config/ApiConfig';
|
||||
import { HttpUtil } from 'db://assets/scripts/utils/HttpUtil';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
@@ -525,6 +529,10 @@ export class PageWriteLevels extends BaseView {
|
||||
}
|
||||
|
||||
console.log('[PageWriteLevels] 创建分享成功, code:', shareCode);
|
||||
|
||||
// 获取用户头像昵称并上传
|
||||
await this._uploadUserInfo();
|
||||
|
||||
ShareManager.instance.triggerWxShare(shareTitle, shareCode);
|
||||
ToastManager.instance.show('分享创建成功!');
|
||||
} catch (err) {
|
||||
@@ -550,6 +558,49 @@ export class PageWriteLevels extends BaseView {
|
||||
return ids;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户头像昵称并上传到服务端
|
||||
*/
|
||||
private async _uploadUserInfo(): Promise<void> {
|
||||
// 先检查本地缓存
|
||||
const cachedUserInfo = StorageManager.getUserInfo();
|
||||
if (cachedUserInfo) {
|
||||
console.log('[PageWriteLevels] 使用缓存的用户信息');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!WxSDK.isWechat()) {
|
||||
console.log('[PageWriteLevels] 非微信环境,跳过获取用户信息');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const userInfo = await getUserProfile();
|
||||
|
||||
// 本地缓存
|
||||
StorageManager.setUserInfo(userInfo);
|
||||
|
||||
// 上传到服务端
|
||||
const response = await HttpUtil.post(
|
||||
API_ENDPOINTS.USER_INFO,
|
||||
{
|
||||
avatarUrl: userInfo.avatarUrl,
|
||||
nickName: userInfo.nickName
|
||||
},
|
||||
API_TIMEOUT.DEFAULT
|
||||
);
|
||||
|
||||
if (response.success) {
|
||||
console.log('[PageWriteLevels] 用户信息上传成功');
|
||||
} else {
|
||||
console.warn('[PageWriteLevels] 用户信息上传失败:', response.message);
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn('[PageWriteLevels] 获取用户信息失败:', err);
|
||||
// 不阻断主流程
|
||||
}
|
||||
}
|
||||
|
||||
onViewHide(): void {
|
||||
console.log('[PageWriteLevels] onViewHide');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user