Teams移动端无法获取activityFeedNotification的subEntityId数据求助
Teams安卓移动端无法获取通知subEntityId的解决方案
问题分析
通过Graph API发送的Teams通知,在桌面端、浏览器端可正常解析subEntityId并跳转指定页面,但安卓移动端无法获取该数据,context?.page?.subPageId返回undefined,仅能打开应用首页。
修复方案
1. 调整Graph API的Topic结构
当前source: 'text'的配置可能不符合标签页应用的通知规范,建议将source改为'entity',并规范value的格式:
const body = { topic: { source: 'entity', // 替换为entity类型 value: `${TEAMS_APP_ID}/index`, // 格式为「应用ID/实体ID」 webUrl: `https://teams.microsoft.com/l/entity/${TEAMS_APP_ID}/index?context=${context}`, }, activityType: 'commonNotification', previewText: { content: notificationSubtitle, }, templateParameters: [ { name: 'title', value: notificationTitle, }, ], };
2. 优化Context参数的编码逻辑
安卓移动端对嵌套对象的解析兼容性较差,尝试将subEntityId的数据序列化为字符串后再传入:
// 先将业务数据序列化为字符串 const subEntityStr = JSON.stringify({ type: "PROGRAM_PROFILE", program_id: "12345", uid: uuidv4(), }); // 再包装到context中编码 const context = encodeURIComponent( JSON.stringify({ subEntityId: subEntityStr }) );
3. 客户端直接从URL参数解析数据
绕开context.page.subPageId的兼容性问题,直接从页面URL中提取并解析参数:
// 客户端代码 const urlParams = new URLSearchParams(window.location.search); const contextParam = urlParams.get('context'); if (contextParam) { const parsedContext = JSON.parse(decodeURIComponent(contextParam)); const subEntityData = JSON.parse(parsedContext.subEntityId); console.log(subEntityData); // 直接获取业务数据 // 执行页面跳转逻辑 }
4. 确保Teams SDK初始化完整
若使用Teams JS SDK v2,需先完成初始化再获取上下文:
// 初始化SDK await microsoftTeams.app.initialize(); // 获取上下文并解析参数 const context = await microsoftTeams.app.getContext(); const url = new URL(context.app.host.url); const contextParam = url.searchParams.get('context'); // 后续解析逻辑同上
5. 检查安卓Teams应用版本
旧版本Teams安卓应用存在context参数解析bug,建议用户更新至最新版本后测试。
内容的提问来源于stack exchange,提问作者Anik Roy
相关产品推荐
相关产品推荐

