Files
youle_app_android/guides/JavaScript调用原生接口文档/TSGame_JSBridge_用户认证与页面管理.md
2026-02-16 18:18:11 +08:00

495 lines
14 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.
# TSGame JSBridge 接口文档 - 用户认证与页面管理
**版本**: v1.9
**更新时间**: 2025年7月13日
**文档类型**: 接口规范文档 - 第一部分
## 文档说明
本文档是TSGame JSBridge接口规范文档的第一部分专注于用户认证与页面管理相关功能包括登录认证、页面跳转、语音控制等核心接口。
**适用平台**: Android / HarmonyOS
**接口范围**: 用户认证、页面管理、基础控制接口
### 本文档包含的接口
| 接口名称 | 调用方向 | 主要功能 | 使用场景 |
|----------|----------|----------|----------|
| `accreditlogin` | WebView→App | 授权登录 | 微信/QQ登录 |
| `cancellogin` | WebView→App | 取消登录 | 登录过程中取消操作 |
| `OpenurlTitleData` | WebView→App | 打开新WebView页面 | 页面跳转、外链访问 |
| `voicePlaying` | WebView→App | 语音播放开关控制 | 音效/语音开关设置 |
---
## 1. 授权登录接口 (accreditlogin)
### 接口概述
当用户在WebView中触发登录操作时通过此接口调用App的授权登录功能支持微信和QQ登录。App完成登录后会通过 `sharelogin` 接口将用户信息回传给WebView。
### 工作流程
```mermaid
sequenceDiagram
participant User as 用户
participant WebView as WebView
participant App as App
participant WeChat as 微信/QQ
participant Server as 服务器
User->>WebView: 点击登录按钮
WebView->>App: 调用accreditlogin接口
App->>App: 检查登录类型参数
App->>WeChat: 启动授权登录
WeChat->>User: 显示授权页面
User->>WeChat: 确认授权
WeChat->>App: 返回授权码/用户信息
App->>Server: 发送登录请求
Server->>App: 返回登录结果
App->>WebView: 调用sharelogin回传用户信息
WebView->>WebView: 处理登录成功
```
### 参数规范
#### 调用格式
```javascript
WebViewJavascriptBridge.callHandler('accreditlogin', loginType, function(response) {
console.log('登录请求已发送');
});
```
#### 参数说明
| 参数 | 类型 | 必需 | 说明 | 取值 |
|------|------|------|------|------|
| loginType | string | ✓ | 登录类型 | "1"=微信登录, "2"=QQ登录 |
### 接口调用示例
#### 微信登录
```javascript
function loginWithWeChat() {
WebViewJavascriptBridge.callHandler('accreditlogin', '1', function(response) {
console.log('微信登录请求已发送');
// 等待sharelogin回调
});
}
// 注册登录成功回调
WebViewJavascriptBridge.registerHandler('sharelogin', function(userInfo) {
try {
const user = JSON.parse(userInfo);
console.log('登录成功:', user);
handleLoginSuccess(user);
} catch (e) {
console.error('登录信息解析失败:', e);
}
});
```
#### QQ登录
```javascript
function loginWithQQ() {
WebViewJavascriptBridge.callHandler('accreditlogin', '2', function(response) {
console.log('QQ登录请求已发送');
// 等待sharelogin回调
});
}
```
### HarmonyOS实现要点
- **接口名称**: `accreditlogin`
- **调用方向**: WebView → App
- **参数格式**: 字符串类型的登录类型("1"=微信, "2"=QQ
- **权限要求**: 需要微信/QQ SDK集成和相应权限
- **回调机制**: 通过sharelogin接口异步返回用户信息
- **错误处理**: 登录失败时应调用cancellogin或适当的错误处理
---
## 2. 取消登录接口 (cancellogin)
### 接口概述
当用户在登录过程中取消操作或登录失败时通过此接口通知App取消登录流程清理相关状态和资源。
### 工作流程
```mermaid
sequenceDiagram
participant User as 用户
participant WebView as WebView
participant App as App
participant AuthSDK as 授权SDK
User->>WebView: 取消登录或登录失败
WebView->>App: 调用cancellogin接口
App->>AuthSDK: 取消授权流程
App->>App: 清理登录状态
App->>App: 释放相关资源
App->>WebView: 返回取消确认
WebView->>WebView: 更新UI状态
```
### 参数规范
#### 调用格式
```javascript
WebViewJavascriptBridge.callHandler('cancellogin', '', function(response) {
console.log('登录已取消');
});
```
#### 参数说明
| 参数 | 类型 | 必需 | 说明 | 取值 |
|------|------|------|------|------|
| data | string | ✓ | 固定传入空字符串 | "" |
### 接口调用示例
#### 用户主动取消
```javascript
function cancelLogin() {
WebViewJavascriptBridge.callHandler('cancellogin', '', function(response) {
console.log('用户取消登录');
resetLoginUI();
});
}
function resetLoginUI() {
// 重置登录界面状态
document.getElementById('loginBtn').disabled = false;
document.getElementById('loginStatus').textContent = '请选择登录方式';
}
```
#### 登录超时处理
```javascript
function handleLoginTimeout() {
console.log('登录超时,自动取消');
WebViewJavascriptBridge.callHandler('cancellogin', '', function(response) {
showMessage('登录超时,请重试');
resetLoginUI();
});
}
```
### HarmonyOS实现要点
- **接口名称**: `cancellogin`
- **调用方向**: WebView → App
- **参数格式**: 空字符串
- **清理工作**: 取消第三方SDK授权流程清理内存状态
- **UI响应**: 确保用户界面正确反馈取消状态
---
## 3. 打开新页面接口 (OpenurlTitleData)
### 接口概述
当WebView需要打开新的页面或外部链接时通过此接口在App中打开新的WebView实例支持自定义标题和数据传递。
### 工作流程
```mermaid
sequenceDiagram
participant User as 用户
participant WebView as WebView
participant App as App
participant NewWebView as 新WebView
participant Server as 服务器
User->>WebView: 点击链接或按钮
WebView->>App: 调用OpenurlTitleData接口
App->>App: 解析URL和标题参数
App->>App: 创建新WebView实例
App->>NewWebView: 设置标题和初始参数
NewWebView->>Server: 加载目标URL
Server->>NewWebView: 返回页面内容
NewWebView->>User: 显示新页面
```
### 参数规范
#### 调用格式
```javascript
const pageData = {
url: "https://example.com/page",
title: "页面标题",
data: "传递的数据"
};
WebViewJavascriptBridge.callHandler('OpenurlTitleData', JSON.stringify(pageData), function(response) {
console.log('新页面已打开');
});
```
#### 参数说明
| 参数 | 类型 | 必需 | 说明 | 示例值 |
|------|------|------|------|--------|
| url | string | ✓ | 目标页面URL | "https://example.com/game" |
| title | string | ✓ | 页面标题 | "游戏详情" |
| data | string | ✗ | 传递给新页面的数据 | "gameId=123&mode=single" |
### 接口调用示例
#### 打开游戏详情页
```javascript
function openGameDetail(gameId) {
const pageData = {
url: `https://game.example.com/detail/${gameId}`,
title: "游戏详情",
data: `gameId=${gameId}&from=lobby`
};
WebViewJavascriptBridge.callHandler('OpenurlTitleData', JSON.stringify(pageData), function(response) {
console.log('游戏详情页已打开');
});
}
```
#### 打开帮助页面
```javascript
function openHelpPage() {
const pageData = {
url: "https://help.example.com/faq",
title: "帮助中心",
data: "source=app&version=1.0"
};
WebViewJavascriptBridge.callHandler('OpenurlTitleData', JSON.stringify(pageData), function(response) {
console.log('帮助页面已打开');
});
}
```
#### 带返回数据的页面
```javascript
function openSettingsPage() {
const pageData = {
url: "https://settings.example.com/profile",
title: "个人设置",
data: "userId=123&allowCallback=true"
};
WebViewJavascriptBridge.callHandler('OpenurlTitleData', JSON.stringify(pageData), function(response) {
console.log('设置页面已打开');
});
// 注册数据返回回调
WebViewJavascriptBridge.registerHandler('pageDataReturn', function(returnData) {
console.log('收到页面返回数据:', returnData);
handleSettingsUpdate(returnData);
});
}
```
### HarmonyOS实现要点
- **接口名称**: `OpenurlTitleData`
- **调用方向**: WebView → App
- **参数格式**: JSON字符串包含url、title、data字段
- **WebView管理**: 创建新的WebView实例并管理生命周期
- **数据传递**: 支持向新页面传递初始化数据
- **标题设置**: 动态设置新页面的标题栏
---
## 4. 语音播放开关接口 (voicePlaying)
### 接口概述
控制App全局的语音播放开关状态影响所有音频播放功能包括音效、语音消息等。WebView可以查询和设置语音播放状态。
### 工作流程
```mermaid
sequenceDiagram
participant User as 用户
participant WebView as WebView
participant App as App
participant AudioSystem as 音频系统
participant Settings as 设置存储
User->>WebView: 操作音效开关
WebView->>App: 调用voicePlaying接口
App->>App: 解析开关状态参数
alt 设置音效状态
App->>Settings: 保存音效设置
App->>AudioSystem: 更新全局音效状态
App->>WebView: 返回设置结果
else 查询音效状态
App->>Settings: 读取当前音效设置
App->>WebView: 返回当前状态
end
WebView->>WebView: 更新UI显示
```
### 参数规范
#### 调用格式
```javascript
// 设置音效开关
WebViewJavascriptBridge.callHandler('voicePlaying', '1', function(response) {
console.log('音效开关已设置:', response);
});
// 查询音效状态
WebViewJavascriptBridge.callHandler('voicePlaying', '', function(response) {
console.log('当前音效状态:', response);
});
```
#### 参数说明
| 参数 | 类型 | 必需 | 说明 | 取值 |
|------|------|------|------|------|
| state | string | ✓ | 音效开关状态或查询 | "1"=开启, "0"=关闭, ""=查询状态 |
#### 返回值说明
| 返回值 | 含义 |
|--------|------|
| "1" | 音效已开启 |
| "0" | 音效已关闭 |
### 接口调用示例
#### 音效开关控制器
```javascript
const VoiceController = {
currentState: null,
// 初始化时查询当前状态
init() {
this.getVoiceState((state) => {
this.currentState = state;
this.updateUI();
});
},
// 获取音效状态
getVoiceState(callback) {
WebViewJavascriptBridge.callHandler('voicePlaying', '', function(response) {
console.log('音效状态查询结果:', response);
if (callback) callback(response);
});
},
// 设置音效状态
setVoiceState(enabled, callback) {
const state = enabled ? '1' : '0';
WebViewJavascriptBridge.callHandler('voicePlaying', state, (response) => {
console.log('音效状态设置结果:', response);
this.currentState = response;
this.updateUI();
if (callback) callback(response);
});
},
// 切换音效状态
toggleVoice() {
const newState = this.currentState === '1' ? false : true;
this.setVoiceState(newState);
},
// 更新UI显示
updateUI() {
const switchElement = document.getElementById('voiceSwitch');
const statusElement = document.getElementById('voiceStatus');
if (switchElement) {
switchElement.checked = this.currentState === '1';
}
if (statusElement) {
statusElement.textContent = this.currentState === '1' ? '音效已开启' : '音效已关闭';
}
}
};
// 页面加载时初始化
document.addEventListener('DOMContentLoaded', function() {
VoiceController.init();
});
```
#### 音效开关UI组件
```javascript
function createVoiceSwitchUI() {
const container = document.createElement('div');
container.className = 'voice-switch-container';
container.innerHTML = `
<label class="voice-switch">
<input type="checkbox" id="voiceSwitch" onchange="handleVoiceSwitchChange(this)">
<span class="slider"></span>
</label>
<span id="voiceStatus">音效状态检测中...</span>
`;
return container;
}
function handleVoiceSwitchChange(checkbox) {
VoiceController.setVoiceState(checkbox.checked, (result) => {
if (result !== (checkbox.checked ? '1' : '0')) {
// 设置失败,恢复开关状态
checkbox.checked = result === '1';
showMessage('音效设置失败,请重试');
}
});
}
```
#### 游戏中的音效管理
```javascript
const GameAudioManager = {
// 播放音效前检查开关状态
playSound(audioUrl, callback) {
VoiceController.getVoiceState((state) => {
if (state === '1') {
// 音效开启,播放音频
this.executePlaySound(audioUrl, callback);
} else {
console.log('音效已关闭,跳过播放');
if (callback) callback('音效已关闭');
}
});
},
// 实际播放音效
executePlaySound(audioUrl, callback) {
// 调用音频播放接口
const audioData = {
audiourl: audioUrl,
type: "1",
user: "game_sound_" + Date.now()
};
WebViewJavascriptBridge.callHandler('mediaTypeAudio', JSON.stringify(audioData), function(response) {
console.log('音效播放请求已发送');
if (callback) callback(null);
});
}
};
```
### HarmonyOS实现要点
- **接口名称**: `voicePlaying`
- **调用方向**: WebView → App
- **参数格式**: 字符串类型的状态值("1"/"0")或空字符串查询
- **状态持久化**: 需要保存用户的音效偏好设置
- **全局影响**: 影响所有音频播放功能的开关状态
- **即时生效**: 状态改变应立即影响当前播放的音频
---
## 文档关联
本文档是TSGame JSBridge接口规范的第一部分完整文档包括
1. **用户认证与页面管理** (本文档) - 登录、页面跳转、语音控制
2. **系统功能与交互** - 剪贴板、游戏状态、设备检测
3. **位置与媒体服务** - GPS定位、音频播放
---
**文档维护**: TSGame开发团队
**最后更新**: 2025年7月13日
**版本**: v1.9
**联系方式**: 技术支持组