Outlook加载项Roaming settings在App端无法正常使用问题咨询
排查方向&解决建议
操作疏漏排查点
- 校验异步操作逻辑:确认调用
saveAsync方法时没有省略回调校验,Outlook桌面端对异步操作的完成状态校验远严格于网页版,很多场景下网页版省略回调也能正常读写,但是桌面端必须等asyncResult.status == Office.AsyncResultStatus.Succeeded返回后再执行后续读取操作,否则会出现写入后读不到的问题 - 核对存储内容大小:Roaming Settings单邮箱总存储上限为32KB,如果你存储的OAuth令牌加其他关联信息接近或超过该阈值,网页版可能存在溢出兼容逻辑,桌面端会直接静默拦截写入操作
- 确认账号运行环境:确认桌面端登录账号与网页版完全一致,且没有开启离线模式,Roaming Settings需要同步到Exchange服务器生效,离线状态下桌面端的写入操作会暂存但不会落地,部分旧版Outlook离线状态下读取的也是历史缓存数据
- 核对加载项权限配置:确认加载项清单的
Permissions节点配置了ReadWriteMailbox权限,低于该权限时桌面端会限制Roaming Settings的写入操作,网页版对权限校验的宽松度更高 - 确认Outlook桌面端版本:2019及更早的批量许可版Outlook、部分半年度更新通道的Office 365版本存在Roaming Settings已知bug,会出现写入后重启客户端就丢失的问题
可行修复方案
- 调整异步读写逻辑,所有操作都新增回调校验,参考代码如下:
// 写入逻辑 Office.context.roamingSettings.set("oauthToken", yourTokenValue); Office.context.roamingSettings.saveAsync(function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { // 确认写入成功后再执行后续操作 } else { // 新增错误捕获逻辑,桌面端可输出具体错误信息定位问题 console.log(asyncResult.error.message); } }); // 读取逻辑必须放在加载项初始化完成的回调之后执行 Office.onReady().then(() => { const token = Office.context.roamingSettings.get("oauthToken"); });
- 拆分大体积存储内容,若总存储内容超过20KB,建议把非核心信息存储到自研服务端,Roaming Settings仅保留用户唯一标识、刷新令牌这类小体积核心内容
- 如需兼容旧版Outlook桌面端,可以用
Office.context.roamingSettings加本地localStorage做双重备份,读取时优先读取Roaming Settings,读不到时读取本地存储,写入时两边同时写入,规避旧版本同步bug的影响 - 若存在OAuth令牌存储安全顾虑,可改用Office SSO机制直接获取令牌,无需自行存储敏感信息,从根源规避存储失效问题
内容的提问来源于stack exchange,提问作者Enab
相关产品推荐
相关产品推荐

