1.移动端安卓系统打开链接正常,苹果系统打开链接调用接口失败
说明:需要获得点击该链接的用户信息,因此需要使用钉钉跳转协议在钉钉当前页面打开,通过免登码的方式来获取用户信息,直接使用http协议跳转浏览器的方式无法拿到免登码,因此需要对http://standard-action-robot-dt-daily.ingress.dayu.work/call?method=POST&api=/robot/stopIteration¶ms={
“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}
进行包装 -->
“免登”是指用户进入应用后,无需输入钉钉用户名和密码,应用程序可自动获取当前用户身份,进而登录系统的流程。
地址一:dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=http://standard-action-robot-dt-daily.ingress.dayu.work/call?method=POST&api=/robot/stopIteration¶ms={ “projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}
这里对dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=做一下参数说明:
跳转到H5页面
link(侧边栏/容器划出)
参数 | 说明 |
---|---|
url | 页面URL,必须做urlencode。(对url进行转义) |
dd_mode | iOS端使用。 push:iOS从左向右推入一个容器 present:iOS从下向上弹出一个容器 |
pc_slide | pc_slide=true 时,PC 端会在应用内打开这个 URL。 |
钉钉发送的消息链接地址如果直接发送_地址一,是无法正常工作的.当你使用了钉钉统一跳转协议,http://standard-action-robot-dt-daily.ingress.dayu.work/call?method=POST&api=/robot/stopIteration¶ms={
“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}这一部分将作为“钉钉统一跳转协议”地址的入参,所以需要经过urlEncode
于是我们对http地址进行转义后得到:
http%3A%2F%2Fstandard-action-robot-dt-daily.ingress.dayu.work%2Fcall%3Fmethod%3DPOST%26api%3D%2Frobot%2FstopIteration%26params%3D%7B%22projectId%22%3A%2269%22%2C%22iterationId%22%3A%22128%22%2C%22conversationId%22%3A%22cidhipuXrhPi1Ud8CHlt05V4Q%3D%3D%22%2C%22actionItemIds%22%3A%22%22%2C%22flag%22%3A%22Y%22%7D
这个时候完整的地址链接是:dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=http%3A%2F%2Fstandard-action-robot-dt-daily.ingress.dayu.work%2Fcall%3Fmethod%3DPOST%26api%3D%2Frobot%2FstopIteration%26params%3D%7B%22projectId%22%3A%2269%22%2C%22iterationId%22%3A%22128%22%2C%22conversationId%22%3A%22cidhipuXrhPi1Ud8CHlt05V4Q%3D%3D%22%2C%22actionItemIds%22%3A%22%22%2C%22flag%22%3A%22Y%22%7D(地址二)
这个时候我们惊奇地发现PC端点击链接一切正常,移动端安卓系统也正常,但是移动端苹果系统报错了,排查发现,params={
“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}
的参数是空的,也就是说params的参数丢失了,后端接口肯定就报错了.
解决方案:由于不同系统自带的浏览器内核不同,因此需要先对{
“projectId”:“69”,“iterationId”:“128”,“conversationId”:“cidhipuXrhPi1Ud8CHlt05V4Q==”,“actionItemIds”:"",“flag”:“Y”}进行转义,然后再对整个http链接进行转义.
最终地址为_:dingtalk://dingtalkclient/page/link?dd_mode=push&pc_slide=true&url=http%3A%2F%2Fstandard-action-robot-dt-daily.ingress.dayu.work%2Fcall%3Fmethod%3DPOST%26api%3D%2Frobot%2FstopIteration%26params%3D%257B%2522projectId%2522%253A%252269%2522%252C%2522iterationId%2522%253A%2522128%2522%252C%2522conversationId%2522%253A%2522cidhipuXrhPi1Ud8CHlt05V4Q%253D%253D%2522%252C%2522actionItemIds%2522%253A%2522%2522%252C%2522flag%2522%253A%2522Y%2522%257D
2.JSAPI鉴权失败相关问题
对于一些钉钉业务、安全相关的JSAPI的调用,需要先鉴权&#