Teams可配置标签固定App ID及动态取值生成Deeplink问题
问题解答
一、如何保证App ID固定
你遇到的App ID变化问题,是因为未提前注册固定的应用标识,使用了Teams侧加载时自动生成的临时ID,按以下步骤操作即可固定:
- 先到Azure Active Directory中注册多租户类型的应用,注册完成后会拿到固定的应用程序(客户端) ID,这个就是后续要使用的固定App ID
- 打开Teams项目中的
manifest.json文件,将根节点下的id字段值替换为上述拿到的固定App ID - 重新打包应用,后续不管将这个应用包上传到哪个租户安装,对应的App ID都会保持固定
注意:如果你的应用只需要在单个租户内使用,注册Azure AD应用时选择单租户类型即可。
二、如何在标签内部动态获取App ID和Tab ID
你调用的microsoftTeams.getContext接口返回的上下文对象本身就包含需要的两个参数,不需要硬编码:
- 动态获取App ID:直接读取
context.appId(v1版本SDK)或context.app.appId(v2版本SDK)即可 - 动态获取Tab ID:直接读取
context.entityId即可,这个值就是当前标签的唯一标识
三、修改后的代码示例
microsoftTeams.getContext((context) => { const teamId = context.groupId; const tenantid = context.tid; const channelId = context.channelId; // 动态获取App ID,不需要硬编码 const appId = context.appId || context.app?.appId; // 动态获取Tab ID const tabId = context.entityId; const entityId = "_djb2_msteams_prefix_" + Util.djb2_hash(appId + ":" + tabId.replace(/\+/g, " ")); let ctx ; if (context.subEntityId || context.channelId) { ctx = encodeURIComponent(JSON.stringify({ subEntityId: context.subEntityId, channelId: context.channelId })); }; // 直接用动态拿到的App ID拼链接 linkUrl=`https://teams.microsoft.com/l/entity/${appId}/${entityId}/&context=${ctx}&groupId=${context.groupId}&tenantId=${context.tid}`; });
更推荐直接使用Teams JS SDK内置的
microsoftTeams.generateDeepLink()接口生成链接,不需要手动拼接参数,兼容性更高。
参考示意图
内容的提问来源于stack exchange,提问作者user25879
相关产品推荐
相关产品推荐


