我们本来是有个app,已经正常上线使用了,框架用的是uniapp。现在想搞到钉钉应用上,一开始想做钉钉小程序,就先简单说一下钉钉小程序基础开发,然后再详细介绍钉钉网页应用。
钉钉小程序基础开发
首先说一下不管是开发钉钉小程序还是网页应用(微应用)都需要在钉钉后台新建应用,因为会用到一些id、Secret之类的。 钉钉新建应用。
然后就是开发工具的下载: 小程序开发工具 。其实直接用支付宝开发工具即可,这也是官网推荐的: 小程序开发工具
然后我们使用HBuilderX打开项目,开发钉钉小程序需要在package.json中添加如下代码:
然后我在manifest.json中也加入了:
然后可以重启一下HBuilderX这样我们点击【运行】,就会出现【钉钉小程序】了:

然后我们可能需要在HBuilderX工具的设置中,手动设置一下对应的小程序工具的位置:

然后点击【运行】就可以调起来,然后手动选择对应的编译好的代码打开即可 ,这个时候我们注意要选择钉钉应用:

然后运行即可,发布的话直接在右上角点击【上传版本】即可 。
然后小程序搞了半天,由于包过大,发现上传不上去,预览也预览不了,而且运行编译的过程是很漫长的,超级慢,体验特别差。大家也都知道,不管是微信小程序、支付宝小程序还是钉钉小程序或者其他的小程序,只要是小程序,要求的屁事就很多,限制这限制那的,所以考虑了一下决定放弃小程序!!!于是开始了钉钉网页应用的研究,钉钉网页应用就是H5,其实跟微信公众号差不多的意思。
钉钉网页应用
同样的我们现在钉钉后台先建网页应用:

因为开发钉钉应用肯定要在钉钉环境中才行,那么怎么调试呢?直接运行到浏览器是肯定不行的。官网也给我们提供了几种调试方式:

我比较喜欢的就是【微应用调试工具-RC版】,点击PC端下载即可,其实也是个钉钉,我们正常登录即可,不一样的是,我们点开应用,可以像浏览器一样【F12】打开控制台!!!当然前提是我们要把刚才建的应用先发布: 版本详情 ,如图:

注意在发布之前,我们要设置一下网页链接为我们本地开发的地址:

保存好之后,再发布哈!
这样我们在钉钉上就能看到我们的应用了,然后我们把前端本地项目启动起来就可以了。
那么接下来就是功能的开发,功能的开发这里分前端和后端,先说后端,再说前端哈,把后端的接口都写好,前端调用就行了。后端用的就是我们最普遍的springboot哈
后端实现:
因为我这里开发的钉钉应用是企业内部应用,所以用到的一些id、密钥之类的东西,我先都写在配置文件中哈:
application.yml
上面的id之类的东西在钉钉后台上都是可以找到的哈,有企业的、有应用的,大家自行替换一下。
然后是映射类,将配置文件的变量映射到类中,方便使用
DingH5Config.java
DingH5Controller.java
service接口就不写了哈,直接是实现类
DingH5ServiceImpl.java
用到了个DingH5TokenVO和DdConfigSign签名工具类,也贴在下方:
DingH5TokenVO.java
这个其实不用也行,看自己吧
DdConfigSign.java
到此,后端接口就写好了,只写了调用钉钉相关的接口哈,没有与业务相关的代码,大家可以自行集成到业务中,比如要登录的话,我们获取到钉钉用户信息、用户详情后,可以跟目前系统的用户进行匹配,返回对应的token和用户信息。
这里需要注意一点:就是获取用户详情这个接口调用,是需要权限的,否则会报错如下:

添加权限可以看下官网这篇: 添加接口调用权限
前端实现:
前端的话,我们要实现免登功能,就是在uniapp中pages.json中的第一个“空”页面
或者叫做“过渡”页面,就是项目启动,先在这个页面中进行判断,判断当前的环境是否是钉钉环境,如果是钉钉环境,我们就正常走自动登录的逻辑,那如果不是的话,就还是我们之前的逻辑,进入登录页面
首先安装:
然后是我们的调用的后端接口(ddLogin/index.js)
pages.json中pages的第一个过渡页面(welcom.vue)
ddUtils.js
这里注意:上面获取网页应用免登授权码的时候,我一开始是严格按照官网上的来写的,也就是用的dd.requestAuthCode 方法来获取的,确实是获取到了,然后获取用户信息的时候总是报错如下:

就不管是在前端调用,还是后端调用,还是postman调用都是这个错误,当时都把网上的类似的错误的问题都翻烂了,网上说的没一个有用的。最后才试了一下旧版的api,也就是dd.runtime.permission.requestAuthCode 这样调用,这样调用我看还少个clientId参数,结果就可以了。看来还是旧版的api好用,这个我是真没想到,我开始以为旧版的api在将来会不会有可能废弃掉,所以一开始就没想考虑旧版的api。
然后还有一点需要注意的:就是如果我们没有进行鉴权(就是dd.config),那我们就不需要使用dd.ready()方法,直接调用对应的方法即可。不鉴权只能调用不需要鉴权的api,钉钉还是有很多api 都是需要鉴权的,虽然我这里实现网页应用免登没用到需要鉴权才能调用的api,但是我也把鉴权给做了,防止后面用到,用到的时候,直接看我这篇就可以了。
这就是钉钉网页应用的鉴权、免登相关的实现了。
之前也写过微信网页应用(微信公众号)相关的微信授权登录,跟钉钉其实也差不多,不过微信公众号第一步的code需要引导用户进行授权来获取,然后微信的大部分api也都是需要鉴权才可以使用。大家感兴趣可以去看看我之前的博客:uniapp实现微信公众号网页(H5)授权登陆获取用户信息(前端+后端)
好了,这篇到这儿就结束了~~~
9435

被折叠的 条评论
为什么被折叠?



