xing-chuan

钉钉微应用开发调研报告
一、开发者企业类型企业内部开发不能发布微应用到钉钉微应用商店可后台自建微应用企业IT介入开发, 链接公司OA域名应...
扫描右侧二维码阅读全文
27
2018/06

钉钉微应用开发调研报告

一、开发者企业类型

企业内部开发

  • 不能发布微应用到钉钉微应用商店
  • 可后台自建微应用
  • 企业IT介入开发, 链接公司OA域名

应用服务商(ISV)

  • 可以发布微应用到钉钉微应用商店(发布第三方微应用的最低要求)
  • 需要申请应用服务商的资质
  • 上架前, 需要缴纳保证金. 免费型微应用最低缴纳5万元, 随用户量上升, 需要补缴对应层次的保证金.
  • 需要将要上架的套件部署在阿里云的聚石塔服务上(需购买ECS和RDS)
  • 上架前, 应用服务商公司全员需要使用钉钉办公, 并且效率值达到 80 分以上.
  • 上架前, 需要完成5家用户共创和50家用户灰度测试(自行寻找5家用户共创)
  • 需要提交共创报告, 钉钉小二回访审核
  • 上架的微应用需要支持免登服务
  • 目前国内上架的微应用数量共65(包含内测和阿里系应用)

集成服务商

  • 可以发布微应用到钉钉微应用商店
  • 专职为钉钉的企业用户提供定制服务
  • 需要参加参加钉钉开放平台考试,含笔试和DEMO实例考试
  • 缴纳保证金给钉钉, 可出现在钉钉的服务商推荐列表中
  • 其他在 ISV 之上更严格的规范要求
  • 目前国内钉钉推送的企业定制商列表有 3 家

image.png

二、开发者企业类型选择

提供给企业员工使用, 不准备上架钉钉微应用市场的, 可以在管理后台自建微应用, 企业内部开发.

企业拥有产品或服务, 想开发或移植为微应用并上架钉钉微应用市场的, 可以成为钉钉的应用服务商(ISV), 这样才有在钉钉微应用市场上架的资质.

准备收费提供订制微应用服务的企业, 可以申请成为集成服务商, 享有钉钉的推荐通道, 企业用户如果需要定位服务, 可以直接在钉钉客户端找到集成服务商.

需要上架钉钉应用市场, 成为 ISV 即可.

三、ISV 上架应用整体流程

第一步:成为开发者,认证服务商 ,打开open.dingtalk.com-注册开发者-完成信息填写; 点击查看详情

  1. 注册钉钉企业用户
  2. 注册成为钉钉开发者

第二步:商务对接 ,点击加入ISV沟通组 ,通过该组织的 工作页面-审批-提交《合作申请表》

第三步:产品开发 ,通过钉钉提供的开发文档,进行应用的开发。开发文档 点击查看详情

  1. 预估需使用的服务器资源( 钉钉要求应用服务商的套件应用必须部署到聚石塔上 )

image.png

  1. 购买聚石塔 ECS 和 RDS 并配置 , 官方说明
  2. 在开发者平台创建套件和微应用
  3. 创建测试企业账号
  4. 进行套件的开发

第四步:用户共创 ,将已经开发完成的应用,提交给企业用户进行试用,并通过用户的反馈和使用过程中产生的问题进行迭代优化,达到共创用户满意。点击查看详情

第五步:上架验收 ,产品上架前,钉钉运营人员会对产品的质量、性能、产品的业务逻辑等进行验收;点击查看详情

第六步:缴纳保证金 ,上架到应用市场的所有应用需要缴纳保证金; 点击查看保证金标准 | 点击查看操作流程

image.png

第七步:商务验收 ,商务会对你所在企业的相关情况进行商务验收;点击查看详情

第八步:上架应用市场 ,以上流程完成后,可以通过开发者平台提交商品,并有专人审核发布上线;点击查看详情

四、钉钉开发中的参数和名词

  • 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, 提供给服务端, 服务端再向钉钉公共接口请求用户信息, 将拿到的用户信息与服务器对比, 就可以实现免登.

钉钉要求第三方微应用需要支持免登.

钉钉的免登完整流程图:

image.png

推荐一篇博文 钉钉实现企业级微应用免登陆详解, 记录服务端为 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 调试

image.png

image.png

IOS调试

  • OS开发版客户端只能在iOS模拟器上安装使用
  • 下载iOS开发版客户端并解压到本地,得到Dingtalk.app文件
  • 启动iOS模拟器

image.png

  • 在terminal中执行 xcrun simctl install booted /path/Dingtalk.app (/path/Dingtalk.app即下载的Dingtalk.app文件的路径) 报错点这里
  • 利用 Safari Web inspector 调试

image.png

PC调试

下载开发版客户端, 在微应用界面空白处右键菜单可呼出调试工具.

image.png

最后修改:2018 年 06 月 27 日 11 : 17 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论