325 lines
6.7 KiB
Markdown
325 lines
6.7 KiB
Markdown
# 诊断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有问题。
|
||
|
||
## 常见问题和解决方案
|
||
|
||
### 问题1:ErrorCode 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` 验证配置是否正确!🔍
|