Files
zyt/DIAGNOSE_INIT_FAIL.md
T
2026-03-04 15:32:30 +08:00

325 lines
6.7 KiB
Markdown
Raw 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.
# 诊断TUICallKit初始化失败问题
## 当前错误
```
ERROR_INIT_FAIL: -1201
API<getDeviceList>: init or login is not complete
TUICallEngine 初始化登录未完成,需要在 init 或 login 完成后使用此 API
```
## 可能的原因
### 1. UserSig无效(最可能)⭐
**症状**
- init方法调用成功,但实际登录失败
- 等待再久也没用
- 控制台可能有IM登录失败的错误
**原因**
- SDKAppID不正确(使用了TRTC的而非IM的)
- SecretKey不正确
- UserSig生成算法有误
- IM服务未开通
**解决方案**:运行测试脚本验证
```bash
cd server
php test_usersig.php
```
### 2. SDKAppID类型错误
**症状**
- 报错提示SDKAppID必须是Number
**原因**
- 传递的是字符串而非数字
**解决方案**:已修复,使用 `Number(res.sdkAppId)`
### 3. 网络连接问题
**症状**
- 长时间无响应
- 控制台有网络错误
**原因**
- 无法连接到腾讯云服务器
- 防火墙阻止连接
- HTTPS证书问题
**解决方案**
- 检查网络连接
- 使用HTTPS或localhost
- 检查浏览器控制台的网络错误
### 4. 等待时间不够
**症状**
- 偶尔成功,偶尔失败
**原因**
- 初始化需要时间,等待不够
**解决方案**:已修复,等待4秒
## 诊断步骤
### 步骤1:验证配置是否正确
运行测试脚本:
```bash
cd server
php test_usersig.php
```
**预期输出**
```
=== 腾讯云IM UserSig测试 ===
SDKAppID: 1600127710
SecretKey长度: 64
SecretKey前10位: 8a6b3ce533...
✅ UserSig生成成功!
✅ UserSig验证成功!
✅ IM账号导入成功!
```
**如果失败**
- 检查 `server/.env` 中的配置
- 确认SDKAppID是IM应用的,不是TRTC应用的
- 确认SecretKey正确
### 步骤2:检查浏览器控制台
打开浏览器开发者工具(F12),查看:
#### Console标签
查找以下错误:
```javascript
// ❌ UserSig错误
Error: login failed, error code: 70003
Error: UserSig is invalid
// ❌ SDKAppID错误
Error: SDKAppID must be Number
// ❌ 网络错误
Error: Failed to fetch
Error: Network error
```
#### Network标签
查找请求到 `tim.qq.com``trtc.io` 的请求:
- 如果没有请求:网络被阻止
- 如果请求失败:检查错误信息
- 如果请求成功但返回错误:检查响应内容
### 步骤3:检查IM登录状态
在浏览器控制台执行:
```javascript
// 检查TUICallKit状态
console.log('TUICallKit:', TUICallKitServer)
// 尝试获取登录状态(如果有这个API)
// 注意:这可能会报错,但能帮助诊断
try {
const status = await TUICallKitServer.getLoginStatus()
console.log('登录状态:', status)
} catch (e) {
console.error('获取状态失败:', e)
}
```
### 步骤4:使用腾讯云官方工具验证
访问:https://console.cloud.tencent.com/im/tool-usersig
1. 输入SDKAppID
2. 输入SecretKey
3. 输入UserID(如:doctor_1
4. 点击"生成UserSig"
**如果生成失败**
- SDKAppID或SecretKey错误
- 需要在腾讯云控制台确认正确的值
**如果生成成功**
- 复制生成的UserSig
- 在浏览器控制台手动测试:
```javascript
await TUICallKitServer.init({
userID: 'doctor_1',
userSig: '从官方工具复制的UserSig',
SDKAppID: 1600127710
})
```
如果这样能成功,说明后端生成的UserSig有问题。
## 常见问题和解决方案
### 问题1ErrorCode 70003 - UserSig非法
**原因**
- SDKAppID是TRTC的,不是IM的
- SecretKey不匹配
**解决**
1. 登录腾讯云控制台
2. 进入:即时通信IM > 应用列表
3. 确认SDKAppID(不是TRTC的)
4. 进入应用详情 > 密钥管理
5. 复制正确的SecretKey
6. 更新 `server/.env`
```ini
[TRTC]
SDK_APP_ID = "正确的IM应用SDKAppID"
SECRET_KEY = "正确的SecretKey"
ENABLE = "true"
```
### 问题2:一直等待,没有任何错误
**原因**
- 网络连接问题
- 防火墙阻止
**解决**
1. 检查是否使用HTTPS或localhost
2. 检查浏览器控制台的Network标签
3. 尝试禁用防火墙/代理
### 问题3:偶尔成功,偶尔失败
**原因**
- 等待时间不够
- 网络不稳定
**解决**
1. 增加等待时间到6秒
2. 检查网络稳定性
### 问题4:前端报错但后端测试成功
**原因**
- 前端传递的参数有误
- 类型转换问题
**解决**
1. 检查前端传递的参数:
```javascript
console.log('传递给init的参数:', {
userID: res.userId,
userSig: res.userSig,
SDKAppID: Number(res.sdkAppId),
types: {
userID: typeof res.userId,
userSig: typeof res.userSig,
SDKAppID: typeof Number(res.sdkAppId)
}
})
```
2. 确保所有参数正确:
- userID: 字符串,如 "doctor_1"
- userSig: 字符串,长度约200-300
- SDKAppID: 数字,如 1600127710
## 临时解决方案
如果无法立即解决,可以尝试:
### 方案A:增加等待时间
```typescript
// 增加到6秒或更长
await new Promise(resolve => setTimeout(resolve, 6000))
```
### 方案B:添加重试机制
```typescript
async function initWithRetry(maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
await TUICallKitServer.init({ ... })
await new Promise(resolve => setTimeout(resolve, 4000))
// 尝试调用一个API验证是否初始化成功
await TUICallKitServer.call({ ... })
return true
} catch (e) {
console.log(`第${i + 1}次尝试失败:`, e)
if (i === maxRetries - 1) throw e
await new Promise(resolve => setTimeout(resolve, 2000))
}
}
}
```
### 方案C:使用官方示例代码
参考腾讯云官方文档的示例代码,确保实现方式正确。
## 下一步行动
### 立即执行
1. ✅ 运行 `php server/test_usersig.php`
2. ✅ 检查浏览器控制台错误
3. ✅ 使用腾讯云官方工具验证UserSig
### 如果测试脚本失败
说明配置有问题,需要:
1. 确认SDKAppID和SecretKey
2. 更新 `server/.env`
3. 重新测试
### 如果测试脚本成功但前端失败
说明前端传递参数有问题,需要:
1. 检查前端传递的参数
2. 添加详细的日志
3. 对比后端生成的UserSig和前端收到的UserSig
### 如果都成功但仍然失败
可能是网络或浏览器问题,需要:
1. 尝试不同的浏览器
2. 检查网络连接
3. 尝试使用HTTPS
## 联系支持
如果以上方法都无法解决,可以:
1. 查看腾讯云IM控制台的日志
2. 联系腾讯云技术支持
3. 在腾讯云开发者社区提问
提供以下信息:
- SDKAppID
- 错误信息截图
- 浏览器控制台日志
- 测试脚本输出
---
**关键要点**:先运行 `php server/test_usersig.php` 验证配置是否正确!🔍