2024年2月APS维护后IoT扩展模型加载失败及热力图显示异常求助
2024年2月APS维护后IoT扩展模型加载失败及热力图显示异常求助
你遇到的问题核心是2024年2月APS OAuth v1接口正式下线,加上IoT扩展与Viewer、数据的适配问题,我来一步步帮你梳理解决思路:
1. 别再手动改node_modules!用官方新SDK解决Token问题
你之前直接修改node_modules/forge-apis/arc/auth/OAuth2TwoLegged.js里的tokenUrl,这种做法非常不稳定(依赖更新就会覆盖修改),而且完全没必要——APS已经推出了全新的@aps_sdk系列包,你的package.json里已经引入了@aps_sdk/authentication,直接替换旧的token获取逻辑即可:
替换你的aps.js代码为:
const { AuthenticationClient } = require('@aps_sdk/authentication'); const { SdkManagerBuilder } = require('@aps_sdk/autodesk-sdkmanager'); const { APS_CLIENT_ID, APS_CLIENT_SECRET } = require('../config.js'); // 初始化SDK管理器 const sdkManager = SdkManagerBuilder.create().build(); const authClient = new AuthenticationClient(sdkManager); async function getPublicToken() { // 调用v2接口获取两足令牌 const credentials = await authClient.getTwoLeggedToken(APS_CLIENT_ID, APS_CLIENT_SECRET, ['viewables:read']); return { access_token: credentials.access_token, expires_in: credentials.expires_in }; } module.exports = { getPublicToken };
为什么要这么改?
- 旧的
forge-apis包默认使用已下线的OAuth v1接口,新的@aps_sdk包默认调用v2接口,完全适配2024年2月后的APS服务 - 避免手动修改依赖文件,保证项目的可维护性
2. 3D模型不显示的排查要点
当Token问题解决后模型仍不显示,检查这几个关键项:
- 验证模型URN格式:确保
APS_MODEL_URN是完整的带urn:前缀的Base64编码值(比如urn:dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6...),且模型已在APS平台完成翻译(可以通过APS开发者门户的「Model Derivative」服务查看翻译状态) - 前端Token获取链路:确认
viewer.js里的getAccessToken函数能正确调用后端/api/aps/token接口拿到有效令牌,比如补充前端的Token获取逻辑:async function getAccessToken() { const resp = await fetch('/api/aps/token'); if (!resp.ok) throw new Error('Failed to get token'); return await resp.json(); } // 然后在initViewer里传入这个函数 Autodesk.Viewing.Initializer({ env: 'AutodeskProduction2', api: 'streamingV2', getAccessToken }, ...) - 可视图配置:你的
APS_MODEL_VIEW为空,当调用getDefaultGeometry(true)时会加载模型的所有可视图,确保模型本身包含可渲染的3D视图(部分2D图纸或未正确翻译的模型会导致加载失败)
3. 热力图显示异常(白背景灰斜纹)的解决思路
当模型元素能显示但热力图异常,大概率是数据不匹配或扩展配置问题:
- 检查时间范围配置:你的
DEFAULT_TIMERANGE_START和DEFAULT_TIMERANGE_END设置的是2025年1月,但如果你的IoT传感器数据没有这个时间段的记录,扩展会因为没有数据渲染而显示空状态(白背景灰斜纹),建议调整时间范围到有真实数据的区间 - 验证IoT数据与模型的绑定:APS IoT扩展需要模型元素(比如Room)与传感器数据通过属性关联(比如设备ID、传感器ID),确保:
- 模型在翻译时包含了必要的关联属性
- 后端提供的IoT数据接口返回的记录包含与模型属性匹配的标识
- 确认扩展正确加载:在
initViewer的extensions参数中确保包含'Autodesk.IoT',且扩展初始化时传入了正确的数据源配置
最后一步:清理依赖并重启项目
- 删除
node_modules和package-lock.json - 重新执行
npm install - 重启项目,依次验证Token获取、模型加载、热力图渲染
内容来源于stack exchange
相关产品推荐
相关产品推荐

