钉钉小程序h5微应用企业内部应用开发

钉钉小程序生态2—区分小程序和H5微应用 小程序主页面H5微应用主页面从左侧菜单可以看出:在基础信息菜单下小程序比H5微应用多一个人员管理;在安全与监控菜单下小程序比H5微应用多一个安全中心。1. 不一样的运行环境H5仅能借助浏览器实现启动,但小程序虽然包含H5技术,但在运行环境方面与H5不同,它基于解析器得以运行,结合自定义的开发语言标准,其性能更是有了长足的进步。简单讲小伙伴们可以利用浏览器打开H5网页,运用微信、钉钉、支付宝平台打开小程序。2. 不一样的成本在开发方面,很多企业借助各类开发软件针对H5开发,定制化出众。 阅读详情

概述

钉钉在企业应用已经是一件很普遍的事情了,我这讲讲钉钉应用小程序中的h5微应用的开发。本文借鉴了lnexin的文章。主要从两个demo来阐述,第一个是通过依照钉钉官网的描述,html+java实现;第二个是使用vue+java实现。

实现逻辑

开发钉钉企业应用,针对企业内部应用。钉钉应用有一个非常好的特性:当我们配置的首页地址是局域网地址,手机连接在局域网,钉钉是能够访问应用的。

  • 1.获得相应企业管理员权限
  • 2.登陆钉钉开发后台,根据钉钉图文创建应用,创建成功后,可以获取到appkey和appSecret,同时在后台首页还可以获取到corpId
    在这里插入图片描述- 3.在创建应用的时候需要填入首页地址,这个首页地址填入我们的页面地址,这个页面中必须包含钉钉的回调函数,用于获取code.

h5微应用-html+java demo

  • 1.首页
    index.html 页面如下,加入了钉钉的回调函数,主要用于获取钉钉传过来的code,然后传递给后台。
<!DOCTYPE html>
<meta charset="UTF-8">
<html>

<head>
    <title>H5微应用开发demo</title>
    <!-- 这个必须引入的啊,钉钉的前端js SDK, 使用框架的请自行参照开发文档 -->
    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.7.13/dingtalk.open.js"></script>
    <!-- 这个jquery 想不想引入自己决定,没什么影响 -->
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>

<body>
<hr>
<h1>H5微应用免登demo</h1>
<p>当前页面的url:</p>
<p id="url"></p>
<br>
<p>解析url,获取的corpID:</p>
<p id="corpId"></p>
<br>
<p>SDK初始化获取的code:</p>
<p id="code"></p>
<br>
<p>请求我们服务端,登录返回的结果:</p>
<p id="result"></p>
</body>
<script type="text/javascript">
    $(function () {
        //钉钉sdk 初始化
        // dd.ready参数为回调函数,在环境准备就绪时触发,jsapi的调用需要保证在该回调函数触发后调用,否则无效。
        dd.ready(function () {
            //获取当前网页的url
            //http://ding-web.lnexin.cn/?corpid=ding46a9582af5b7541b35c2f4657eb6378f
            var currentUrl = document.location.toString()
            $("#url").append(currentUrl)

            // 解析url中包含的corpId
            var corpId = '??';
            // var corpId = currentUrl.split("corpid=")[1];
            $("#corpId").append(corpId)

            //使用SDK 获取免登授权码
            dd.runtime.permission.requestAuthCode({
                corpId: corpId,
                onSuccess: function (result) {
                    var code = result.code;
                    $("#code").append(code)
                    //请求我们服务端的登陆地址
                    $.get("http://10.4.94.250:9000/ding/login?code=" + code + "&corpId=" + corpId, function (response) {
                        // 我们服务器返回的信息
                        // 下面代码主要是将返回结果显示出来,可以根据自己的数据结构随便写
                        for (item in response) {
                            $("#result").append("<li>" + item + ":" + response[item] + "</li>")
                        }
                        if (response.user) {
                            for (item in response.user) {
                                $("#result").append("<li>\t[user 属性] " + item + " : " + response.user[item] + "</li>")
                            }
                        }
                    });
                }
            });
        });
    })

</script>

</html>
  • 2.后台
    后台使用springboot框架,后台关键代码如下:
package com.demo.ading.demo.service.impl;

import com.demo.ading.demo.constant.DingCodeEnum;
import com.demo.ading.demo.constant.DingProperties;
import com.demo.ading.demo.dto.DingAccessTokenDTO;
import com.demo.ading.demo.service.DingAuthService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

@Slf4j
@Service
public class DingAuthServiceImpl implements DingAuthService {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DingProperties dingProperties;

    public DingAccessTokenDTO accessToken(){
        long starTime = System.nanoTime();
        DingAccessTokenDTO dingAccessToken = null;
        String url = dingProperties.getDingAccessToken();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        Map map = new HashMap();
        map.put("appkey", dingProperties.getAppKey());
        map.put("appsecret", dingProperties.getAppSecret());
        ResponseEntity<DingAccessTokenDTO> response = restTemplate.getForEntity(url, DingAccessTokenDTO.class,map);
        if(response.getStatusCode().is2xxSuccessful()){
            if(response.getBody()!=null && response.getBody().getErrcode().equals(DingCodeEnum.success.getCode())){
                dingAccessToken = response.getBody();
            }
        }
        if(dingAccessToken == null){
            log.warn("[1.1.1]获取钉钉token失败,地址:{},参数:{}",url,map);
        }

        log.info("[1.1.2]获取钉钉token结束,耗时:{}ms",(System.nanoTime()-starTime)/1000);
        return dingAccessToken;

    }

}

package com.demo.ading.demo.service.impl;

import com.demo.ading.demo.constant.DingCodeEnum;
import com.demo.ading.demo.constant.DingProperties;
import com.demo.ading.demo.dto.DingUserDTO;
import com.demo.ading.demo.dto.DingUserIdDTO;
import com.demo.ading.demo.service.DingUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

@Service
@Slf4j
public class DingUserServiceImpl implements DingUserService {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private DingProperties dingProperties;

    public DingUserIdDTO getUserId(String access_token, String code){
        long starTime = System.nanoTime();
        DingUserIdDTO res = null;
        String url = dingProperties.getDingGetUserId();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        Map map = new HashMap();
        map.put("access_token", access_token);
        map.put("code", code);
        ResponseEntity<DingUserIdDTO> response = restTemplate.getForEntity(url, DingUserIdDTO.class,map);
        if(response.getStatusCode().is2xxSuccessful()){
            if(response.getBody()!=null && response.getBody().getErrcode().equals(DingCodeEnum.success.getCode())){
                res = response.getBody();
            }
        }
        if(res == null){
            log.warn("[2.1.1]获取钉钉userid失败,地址:{},参数:{}",url,map);
        }

        log.info("[2.1.2]获取钉钉userid结束,耗时:{}ms",(System.nanoTime()-starTime)/1000);
        return res;

    }

    public DingUserDTO getUserInfo(String access_token, String userid){
        long starTime = System.nanoTime();
        DingUserDTO res = null;
        String url = dingProperties.getDingGetUser();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        Map map = new HashMap();
        map.put("access_token", access_token);
        map.put("userid", userid);
        ResponseEntity<DingUserDTO> response = restTemplate.getForEntity(url, DingUserDTO.class,map);
        if(response.getStatusCode().is2xxSuccessful()){
            if(response.getBody()!=null && response.getBody().getErrcode().equals(DingCodeEnum.success.getCode())){
                res = response.getBody();
            }
        }
        if(res == null){
            log.warn("[2.2.1]获取钉钉user失败,地址:{},参数:{}",url,map);
        }

        log.info("[2.2.2]获取钉钉user结束,耗时:{}ms",(System.nanoTime()-starTime)/1000);
        return res;

    }
}

package com.demo.ading.demo.controller;

import com.demo.ading.demo.dto.DingAccessTokenDTO;
import com.demo.ading.demo.dto.DingUserDTO;
import com.demo.ading.demo.dto.DingUserIdDTO;
import com.demo.ading.demo.service.DingAuthService;
import com.demo.ading.demo.service.DingUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.LinkedHashMap;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping(value = "/ding")
public class UserController {

    @Autowired
    private DingAuthService dingAuthService;

    @Autowired
    private DingUserService dingUserService;

    /**
     * 根据前台初始化后获取的免登授权码获取用户信息
     *
     * @param code   免登授权码
     * @param corpId 企业应用corpId
     * @return
     */
    @GetMapping("/login")
    public Map<String,Object> authCodeLogin(@RequestParam("code") String code,
                                            @RequestParam("corpId") String corpId) {
        DingAccessTokenDTO accessTokenDTO = dingAuthService.accessToken();
        DingUserIdDTO userIdDTO = dingUserService.getUserId(accessTokenDTO.getAccess_token(), code);
        DingUserDTO userInfo = dingUserService.getUserInfo(accessTokenDTO.getAccess_token(), userIdDTO.getUserid());


        Map<String, Object> result = new LinkedHashMap<>();
        result.put("code", code);
        result.put("token", accessTokenDTO.getAccess_token());

        result.put("user", userInfo);
        result.put("corpId", corpId);

        log.debug("[钉钉] 用户免登, 根据免登授权码code, corpId获取用户信息, code: {}, corpId:{}, result:{}", code, corpId, result);

        return result;
    }
}

vue+java demo

  • 1.vue可以直接引用jsapi或者通过npm安装jsapi,本例子中遵循vue最佳时间,使用npm install dingtalk-jsapi --save 安装依赖库。
  • 2.创建dingding.js,主要是用获取钉钉回调过来的code,存入session中或者直接传递给后台。
import * as dd from 'dingtalk-jsapi';
dd.ready(function () {
    
    var corpId = '??';
    //使用SDK 获取免登授权码
    dd.runtime.permission.requestAuthCode({
        corpId: corpId,
        onSuccess: function (result) {
            var code = result.code;
            sessionStorage.setItem('code',code)
            alert(code);
        }
    });
});

export default {
    dd
}
    1. main.js中增加引入代码
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import dd from '@/components/util/dingding.js'
Vue.use(ElementUI);
Vue.config.productionTip = false
Vue.prototype.dd = dd

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

  • 4.后台使用第一个例子中的后台,vue完成demo地址:

https://github.com/Dylandelon/dingding-demo-vue.git

钉钉开放平台创建企业内部H5微应用或者小程序 阅读详情

相关推荐

钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用

为了方便理解,我来举个例子🌰:我是一家不到50人小公司(没有懂IT的员工)的老板,为了方便管理员工,让大家都用起了钉钉。为了统计大家每天上下班的时间,让他们使用钉钉自带的打卡小程序。后来公司发展到了几百人,也有了技术部,这时我想看一下公司的经营情况,让技术部在钉钉上做了一个生意参谋小程序,这样我打开钉钉就可以查看了,非常方便。由于技术部做的这个生意参谋小程序非常好用,我的一些合作伙伴(其他公司)也想用,我就让技术部把这个生意参谋小程序。

summon的博客 4993

关于vue 所开发的钉钉 H5 微应用中, dd.ready() 不执行的解决方案

最近在做钉钉的免登,npm 安装好 dingtalk-jsapi 后,执行 dd.ready()怎么都不生效。但是判断当前环境是不是 ‘notInDingTalk’ 时又是有效的。花了很长时间,一直找不到原因。后来无意中发现别人的代码似乎跟我有一点差异,于是抱着死马当活马医的心态试试,结果真的有效。 废话不多说,原因在于从官网复制的代码里 的匿名函数function(){},在vue开发里是无效的...

qq_42988836的博客 6024

钉钉小程序生态7—企业机器人加互动卡片,改善用户体验的开始!

企业机器人,具备完整的接收消息和发送消息的能力。它与Webhoook 机器人不同,Webhoook 机器人只能出现在群里面,而企业机器人不仅可以在群里出现,还可以以单聊的形式出现,企业机器人很多时候都是以"xx小蜜"或"xx助手"命名。企业机器人属于功能版块- 点进去是机器人推送给你的信息钉钉互动卡片是一种新型的消息类型,它具有动态性、可交互性、多端统一等特点。它能够极大地丰富消息类型,并且促进用户的沟通互动。互动卡片具有以下特点。

summon的博客 2458

钉钉dd.ready中不能调用方法解决,钉钉微应用遇到的坑

钉钉dd.ready中不能调用方法解决 获取微应用免登授权码 官方代码: dd.ready(function() { dd.runtime.permission.requestAuthCode({ corpId: _config.corpId, // 企业id onSuccess: function (info) { code = info.code // 通过该免登授权码可以获取用户身份 }}); });.

卓怡工作室的博客 6253

5、钉钉平台

文章目录 文章目录应用管理运行环境应用类型编程模式风神工作台基础应用信息接口权限应用发布钉钉集成参数设置钉钉接口地址常量钉钉集成登录钉钉事件回调接口注册通讯录事件回调群会话事件回调签到事件回调审批事件回调日志管理签到事件回调审批事件回调日志管理 应用管理 钉钉端开发小程序/微应用,实现钉钉与LCP平台的深度集成 运行环境 当前存在两套钉钉环境 环境名称 适用范围 描述 备注 风神测...

小伙伴的博客 3763

有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案

最近在做钉钉的免登,npm 安装好 dingtalk-jsapi 后,执行 dd.ready()怎么都不生效。但是判断当前环境是不是 ‘notInDingTalk’ 时又是有效的。花了很长时间,一直找不到原因。后来无意中发现别人的代码似乎跟我有一点差异,于是抱着死马当活马医的心态试试,结果真的有效。 废话不多说,原因在于从官网复制的代码里 的匿名函数function(){},在vue开发里是无效的,需要改成 箭头函数 () =>{} 修改之前的: 这个 ‘this.userCode’ 是临时修改成用于测试有没有进入 dd.ready() 的,不要在意这些细节。 如果正常的话,this.use

钉钉开放平台-小程序开发实战(钉钉小程序客户端)

钉钉(Ding Talk)是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。 钉钉开放平台具有强大丰富的原生能力,目前已经开放超过2000个API接口,同时为开发者和服务商提供专业的技术培训体系,分享最新功能和开放能力,提供全面的服务支持。...

西京刀客 2万+

有关vue 开发的钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案

主要介绍了有关vue 开发的钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一,钉钉开放文档阅读笔记

部署方式一共有三种:定向分发、线下拓客和上架到应用市场。着重看一下第三种,上架到应用市场的部署要求是:1,聚石塔 + 通讯录加密2,阿里云 +计算巢+ 通讯录加密3,阿里云 +计算巢+数据安全中心。

zhangleilskli的博客 641

C++中为什么要引入引用变量?

C++引用机制的设计哲学在于平衡性能与安全性。它解决了指针的三个痛点:语法噪音、空指针风险和语义模糊,同时保持了指针的效率优势。引用必须绑定有效对象且不可重绑定的特性增强了安全性,其值语义语法更直观。尤其在运算符重载和const引用场景中,引用展现了不可替代的优势。本质上,引用是编译器优化的指针实现,体现了C++"零开销抽象"的核心思想——既保持底层性能,又提供高级抽象。这种设计允许开发者根据场景灵活选择指针或引用,反映了C++多范式共存的语言智慧。

教学 & 技术专栏 175

DNF单机版搭建全攻略:从零开始到局域网联机(含常见问题解决)

本文提供详细的DNF单机版搭建指南,从环境配置到局域网联机设置,涵盖服务端安装、数据库配置及常见问题解决方案。适合新手和有经验的玩家,帮助快速搭建专属游戏服务器,重温经典游戏体验。

weixin_30832143的博客 847

DingTalk「开发者说」第8期 钉钉微应用开发实战

DingTalk「开发者说」是钉钉开发者最新上线的开发者栏目,联合阿里云ACE团队,分享钉应用开发解决方案、技术更新、实战技巧,致力于成为钉钉与开发者的桥梁与纽带,让更多的钉钉开发者传播技术、提升技能、分享观点。在数字化变革的时代,“云钉一体”“钉钉全面开放”战略之后,希望钉钉技术可以持续激发开发者的创造力,为组织数字化赋能。 本篇介绍了钉钉H5微应用的概念、原理及开发实战。

钉钉开发者社区 5912

软件工程导论实践:从需求到架构的机票预订系统全流程解析

本文深入解析机票预订系统从需求分析到架构设计的全流程实践,涵盖业务流程、功能建模、模块化设计、性能优化等关键环节。通过实际项目经验,分享软件工程导论在复杂系统开发中的应用技巧,包括数据流图绘制、E-R图设计、微服务架构及高并发处理等实战策略,助力开发者构建高效可靠的机票预订系统。

weixin_29202213的博客 413

钉钉H5微应用开发指南

我们在这一片文章https://www.cnblogs.com/zhenjingcool/p/16896198.html中对钉钉开放平台进行了简略介绍,钉钉开放平台为我们提供了5种开放能力,即应用开发、工作台开放、群开放、连接平台、智能硬件接入。 这里我们详细介绍这5部分中的其中之一:应用开发。而且是应用开发中的H5微应用。 1 总概 在使用钉钉开放平台的能力开发应用前,请注意: 调用钉钉服...

zhenjingcool的博客 2575

【大模型+知识图谱】哈工大版chinese-roberta-wwm-ext模型介绍、下载部署和GPU显卡配置

RoBERTa模型的一个重要改进版本,由阿里云的研究团队提出。而Chinese RoBERTa-wwm-ext则是针对中文文本的预训练模型,它在哈工大的研究团队手中进一步优化,特别适用于中文自然语言处理任务。

知识靠谱的博客 2773

Eclipse邂逅Deepseek:本地化部署全攻略

通过前面一系列的步骤,我们成功地在 Eclipse 中完成了 Deepseek 的本地化部署,并且对部署后的功能进行了测试和优化,还解决了可能遇到的一些常见问题。这一过程不仅让我们体验到了将强大的大语言模型与高效的开发环境相结合的魅力,也为我们在软件开发过程中带来了诸多便利。本地化部署 Deepseek 到 Eclipse,使得我们在代码编写过程中能够获得智能的代码补全和精准的问答支持,大大提高了开发效率。同时,本地化部署保障了数据的安全性和隐私性,避免了数据在传输过程中可能面临的风险。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4516

钉钉企业内部H5微应用或小程序之钉消息推送

因为卡片消息支持整体跳转ActionCard样式和独立跳转ActionCard样式以及可以展示图片和添加多个按钮 样式和可玩性比较高。调用钉钉之前都是需要用到access_token,接着调用用户电话获得钉钉的userId(某个人在企业里的唯一ID)1.根据自己应用的appKey和appSecret来获取accessToken。钉钉专门的API调用工具可以自己试试。没有创建的话去看我另一篇文章有说明。2. 工作通知-异步发送工作通知。这里的配置信息是你的应用信息。这里需要注意的是你选择的。

qq_60782107的博客 3210

【实战】CANOE实现UDS安全访问过程的CAPL脚本

首先我已经有了包含安全访问算法的dll文件,并通过Diagnostics/ISO TP Configuration中加载了此dll文件,如下。在on start部分,要将“ECU qualifier“作为参数,执行diagSetTarget函数。这个函数是用于设置tester从现在开始与之通信的目标ECU,并配置/建立与该ECU的通信通道。我最近在做密钥学习上位机时,遇到一些问题:如何用CAPL脚本实现安全访问过程?ECU Qualifier可以通过加载cdd文件后,在如下位置找到。CAPL脚本如何编写。

weixin_46481662的博客 4939

【钉钉免登录】使用dingtalk-jsapi将H5/小程序集成到钉钉,实现单点登录,H5/小程序免登

【钉钉免登录】使用dingtalk-jsapi将H5/小程序集成到钉钉,实现单点登录,H5/小程序免登

weixin_51054408的博客 7763

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1743

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

网页 H5 微应用接入钉钉自动登录

钉钉免登是一种便捷的登录机制,用户通过钉钉客户端访问企业自建H5微应用时,系统自动完成身份验证,无需重复登录。

集成显卡的开源主页 https://github.com/0604hx 2108

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

钉钉小程序 和 钉钉微应用区别

前沿:钉钉小程序、支付宝小程序、高德小程序,这些阿里系的小程序本质上是一套代码和机制, 可以一键分发到多个渠道。 钉钉小程序和钉钉H5微应用区别 小程序 H5微应用 加载性能 首次使用略慢,后续加载快 受到很多因素影响,优化不够好,容易慢 使用体验 非常顺滑,接近 Native 容易卡顿 ...

dazer的专栏 3588

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

钉钉小程序学习笔记

钉钉的产品自述:http://www.nudiao.com/fangan-info-id-192.html 一、钉钉E应用与微信小程序 二、应用类型 E应用 E应用是一种全新的开发模式,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、等多端部署 H5微应用 微应用是指用H5方式开发的应用 三、应用开发场景 企业内部开发 企业内部开发的应用无...

weixin_37502658的博客 1万+

钉钉微应用怎么进入_钉钉微应用开发免登流程

公司将办公协同基本上都搬到钉钉线上来了,偶有部门个性的功能,钉钉没有合适的应用可以解决,所以只能自己开发系统解决。钉钉企业内部应用分E应用和微应用,E应用说白了就是小程序,微应用是H5页面。如果公司内部系统全接口开发的,并且微信小程序有开发经验,E应用首选。内部系统是传统模式那就微应用吧。我们公司没有成体系的OA系统,所以就针对部分特殊需求单开吧,微应用更快。一、申请企业内部应用。先进钉钉开放平台...

weixin_36152359的博客 2795

如何在钉钉上开发自己的应用_快速上手——钉钉H5微应用开发接入

创建钉钉H5应用顾名思义,钉钉H5应用,和微信WEB应用一样,本质都是一个有前端有后端的网站,由平台本身对网站基础功能进行扩充,提供专用接口满足开发者各式各样的和平台相关的需求。开发者平台:https://open-dev.dingtalk.com/先决条件:公司管理员和子管理员权限创建应用的流程很简单,开发者平台里新建一个应用,再为应用配置域名、IP白名单、接口权限等信息即可。关于免登...

weixin_39601056的博客 7890
上一篇: kafka性能非常的不错
下一篇: 开源BI报表项目调研
dylanstudy
博客等级 码龄14年 19粉丝 19原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dylanstudy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值