一、开发者企业类型
企业内部开发
- 不能发布微应用到钉钉微应用商店
- 可后台自建微应用
- 企业IT介入开发, 链接公司OA域名
应用服务商(ISV)
- 可以发布微应用到钉钉微应用商店(发布第三方微应用的最低要求)
- 需要申请应用服务商的资质
- 上架前, 需要缴纳保证金. 免费型微应用最低缴纳5万元, 随用户量上升, 需要补缴对应层次的保证金.
- 需要将要上架的套件部署在阿里云的聚石塔服务上(需购买ECS和RDS)
- 上架前, 应用服务商公司全员需要使用钉钉办公, 并且效率值达到 80 分以上.
- 上架前, 需要完成5家用户共创和50家用户灰度测试(自行寻找5家用户共创)
- 需要提交共创报告, 钉钉小二回访审核
- 上架的微应用需要支持免登服务
- 目前国内上架的微应用数量共65(包含内测和阿里系应用)
集成服务商
- 可以发布微应用到钉钉微应用商店
- 专职为钉钉的企业用户提供定制服务
- 需要参加参加钉钉开放平台考试,含笔试和DEMO实例考试
- 缴纳保证金给钉钉, 可出现在钉钉的服务商推荐列表中
- 其他在 ISV 之上更严格的规范要求
- 目前国内钉钉推送的企业定制商列表有 3 家
二、开发者企业类型选择
提供给企业员工使用, 不准备上架钉钉微应用市场的, 可以在管理后台自建微应用, 企业内部开发.
企业拥有产品或服务, 想开发或移植为微应用并上架钉钉微应用市场的, 可以成为钉钉的应用服务商(ISV), 这样才有在钉钉微应用市场上架的资质.
准备收费提供订制微应用服务的企业, 可以申请成为集成服务商, 享有钉钉的推荐通道, 企业用户如果需要定位服务, 可以直接在钉钉客户端找到集成服务商.
需要上架钉钉应用市场, 成为 ISV 即可.
三、ISV 上架应用整体流程
第一步:成为开发者,认证服务商 ,打开open.dingtalk.com-注册开发者-完成信息填写; 点击查看详情
- 注册钉钉企业用户
- 注册成为钉钉开发者
第二步:商务对接 ,点击加入ISV沟通组 ,通过该组织的 工作页面-审批-提交《合作申请表》
第三步:产品开发 ,通过钉钉提供的开发文档,进行应用的开发。开发文档 点击查看详情
- 预估需使用的服务器资源( 钉钉要求应用服务商的套件应用必须部署到聚石塔上 )
- 购买聚石塔 ECS 和 RDS 并配置 , 官方说明
- 在开发者平台创建套件和微应用
- 创建测试企业账号
- 进行套件的开发
第四步:用户共创 ,将已经开发完成的应用,提交给企业用户进行试用,并通过用户的反馈和使用过程中产生的问题进行迭代优化,达到共创用户满意。点击查看详情
第五步:上架验收 ,产品上架前,钉钉运营人员会对产品的质量、性能、产品的业务逻辑等进行验收;点击查看详情
第六步:缴纳保证金 ,上架到应用市场的所有应用需要缴纳保证金; 点击查看保证金标准 | 点击查看操作流程
第七步:商务验收 ,商务会对你所在企业的相关情况进行商务验收;点击查看详情
第八步:上架应用市场 ,以上流程完成后,可以通过开发者平台提交商品,并有专人审核发布上线;点击查看详情
四、钉钉开发中的参数和名词
- userId 用户的唯一身份标识
- jobnumber 用户在企业中的身份标识, 一个用户可能分属不同企业, 切换企业时看到的工作台也不同
- corpId 企业的唯一身份标识, 可以在开发者后台找到
- CorpSecret 是企业每个应用的凭证密钥, 可以在开发者后台找到
- AccessToken 是企业访问钉钉开放平台接口的全局唯一票据, 调用钉钉开放平台接口时需使用, 由CorpID和CorpSecret换取
- SsoToken ISV开发微应用后台免登中使用, 使用ISV自身企业的corpid和ssosecret来换取
- suite 套件
- suitekey 创建套件时获取
- suitesecret 创建套件时获取
- suiteticket 钉钉服务端每20分钟向创建套件填入的回调地址推送的套件ticket
- tmp_auth_code 企业添加微应用时(测试的时候在开发者后台为套件绑定测试企业进行测试),钉钉服务端会向isv回调接口推送的tmp_auth_code
- suite_access_token 应用套件令牌, 向钉钉服务端请求
- permanent_auth_code 企业的永久授权码
- access_token 服务提供商在取得企业的永久授权码并完成对企业应用的设置之后, 调用企业接口所需, 可使用permanent_auth_code、corpId(通过在页面地址跟?corpId=$CORPID$进行获取)、suite_access_token获取
- jsticket 服务端向钉钉服务端请求, 用于生成签名, 返还给H5页面做鉴权使用, 判断H5页面是否有使用 JSAPI 的权限
- appid 在套件中创建微应用的ID标识, 微应用被添加到企业的工作台, 会生成 agentId
- agentId 微应用ID,普通企业可以通过OA后台的微应用-设置查看agentID,ISV需要通过调用授权成功后的get_auth_info获取授权方的agentid
- timeStamp 生成签名的时间戳
- nonceStr 生成签名的随机串
- signature 签名
- code 由JSAPI获取, 交给服务端用来获取用户身份信息
- onSuccess JSAPI成功后的回调
- onFail JSAPI失败后的回调
五、主动调用钉钉接口的频率限制
为了防止微应用程序错误, 过量请求钉钉开放接口, 钉钉对主动请求的频率做了限制, 所以日常开发中, 要控制请求的频率, 在数据有效期内做好数据缓存.
- 每个企业调用单个接口的频率不可超过1500次/分
- 每个ISV(应用提供商)调用单个接口的频率不可超过2000次/分
- 每个ISV(应用提供商)调用单个企业的单个接口频率不可超过1500次/分
- 每个套件调用单个企业的单个接口频率不可超过1000次/分
钉钉会根据运营情况有所调整, 这是目前官方文档的最新数据.
六、鉴权和免登
鉴权
移动端可以使用钉钉封装的 JSAPI 调用部分手机原生功能, 但涉及到用户隐私行为的 API 就需要鉴权, 来判断你是否有使用这个 API 的权力.
第一步: 引入钉钉封装的js文件
<script src="//g.alicdn.com/dingding/open-develop/1.6.9/dingtalk.js"></script>
第二步: 向服务端请求鉴权所需要的信息
请求的信息包括: agentId、corpId、timeStamp、nonceStr、signature.
这些信息需要服务端请求钉钉的公共接口得到, 下一节会叙述这里.
dd.config({
agentId: '', // 必填,微应用ID
corpId: '',//必填,企业ID
timeStamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '', // 必填,签名
type:0/1, //选填。0表示微应用的jsapi,1表示服务窗的jsapi。不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
jsApiList : [ 'runtime.info', 'biz.contact.choose',
'device.notification.confirm', 'device.notification.alert',
'device.notification.prompt', 'biz.ding.post',
'biz.util.openLink' ] // 必填,需要使用的jsapi列表,注意:不要带dd。
});
PS: 上架到微应用商店, 服务对象是各种企业, corpId 是企业唯一标识, 如果想动态获取 corpId, 我们可以这样配置微应用链接.
https://xccl.cc/index/?corpid=$CORPID$
这样我们可以从 query 中获得 corpId.
鉴权通过, 就可以使用被限制的 JSAPI 了, 但需要在 dd.ready(fn)
中写 JSAPI, 无论是不需鉴权和需要鉴权的, 否则是无效的.
如果鉴权不通过, 我们可以在 dd.error(fn)
中打印错误信息详情.
dd.ready(function() {
dd.device.notification.confirm({
"message":"这个是一个弹窗confirm",
"title":"提示",
"buttonLabels":["知道了","取消"]
});
};
dd.error(function(err) {
alert('dd error: ' + JSON.stringify(err));
});
免登
前端H5可以请求免登 code, 提供给服务端, 服务端再向钉钉公共接口请求用户信息, 将拿到的用户信息与服务器对比, 就可以实现免登.
钉钉要求第三方微应用需要支持免登.
钉钉的免登完整流程图:
推荐一篇博文 钉钉实现企业级微应用免登陆详解, 记录服务端为 Java 的实现过程.
dd.config({
agentId: '', // 必填,微应用ID
corpId: '',//必填,企业ID
timeStamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '', // 必填,签名
type:0/1, //选填。0表示微应用的jsapi,1表示服务窗的jsapi。不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
jsApiList : [ 'runtime.info', 'biz.contact.choose',
'device.notification.confirm', 'device.notification.alert',
'device.notification.prompt', 'biz.ding.post',
'biz.util.openLink' ] // 必填,需要使用的jsapi列表,注意:不要带dd。
});
// JSAPI 需要写在 dd.ready(fn) 中
dd.ready(function() {
dd.runtime.permission.requestAuthCode({
corpId : _config.corpId,
onSuccess : function(info) {
// 将活动到的免登 code 发送给服务端, code 5分钟有效期, 且只能使用一次
$.ajax({
url : 'userinfo?code=' + info.code + '&corpid=' _config.corpId,
type : 'get',
success : function({data, flag, msg}) {
var info = JSON.parse(data);
alert("用户"+info.name+"登录成功");
}
});
},
onFail : function(err) {
alert('fail: ' + JSON.stringify(err));
}
});
});
鉴权成功后, 才可使用免登服务.
七、移动端开发
钉钉的微应用是基于 H5 的, 实际在后台配置的是一个网页链接, 用户在工作台点击后在钉钉的 webview 中打开网页.
鉴权的主要逻辑在服务端, 前端需要取得服务端提供的签名等数据鉴权, 利用 dd.runtime.promission.requestAuthCode() 取得免登 code 提供给服务端. 业务的开发和正常H5页面开发一致, 但在钉钉中, 我们可以使用钉钉提供的 JSAPI 调用一些原生的功能, 例如手机震动、拍照、扫码等.
第一步: 引入钉钉js文件
第二步: 鉴权和免登(如果需要)
第三步: H5业务开发 & JSAPI调用原生功能开发
API参数详情, 点我查看.
八、PC端开发
PC端开发与移动端开发流程一致, 但需要引入的JS文件不同, 需要引入下面的JS文件:
<script src="https://g.alicdn.com/dingding/dingtalk-pc-api/2.7.0/index.js"></script>
移动端钉钉的顶级对象是 dd
, PC端的顶级对象是 DingTalkPC
.
这里需要注意, 创建微应用时, 配置PC和移动端地址时, 必须是同一域名.
例: 首页地址配置为 https://m.xccl.cc/dd/h5
, PC地址可以配置为https://m.xccl.cc/dd/pc
, 但不能配置为https://www.xccl.cc
. 二级域名m.xccl.cc
要保持一致, 否则不通过.
九、调试工具
日常前端开发使用 Chrome 调试很方便, 在微应用开发中, 钉钉给我们提供了各个系统(window,MAC OS,Android,IOS)的开发版本客户端下载.
安卓调试
启用开发者模式后即可使用chrome inspector进行调试。开发版客户端仅供微应用开发调试使用的。
- 进入“我的”
- 选择“设置”
- 选择“通用”
- 选择“开发者选项”
- 打开“微应用调试”
- 利用 Chrome Remote Debug 调试
IOS调试
- OS开发版客户端只能在iOS模拟器上安装使用
- 下载iOS开发版客户端并解压到本地,得到Dingtalk.app文件
- 启动iOS模拟器
- 在terminal中执行 xcrun simctl install booted /path/Dingtalk.app (/path/Dingtalk.app即下载的Dingtalk.app文件的路径) 报错点这里
- 利用 Safari Web inspector 调试
PC调试
下载开发版客户端, 在微应用界面空白处右键菜单可呼出调试工具.
版权属于:行川草庐 - 行川的网络日志
本文链接:http://xing-chuan.com/archives/41.html
本作品由行川采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可