You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:40:31