目录

uni-app如何适配钉钉小程序

uni-app如何适配钉钉小程序

项目配置

在package.json中添加自定钉钉环境变量

"uni-app": {  
    "scripts": {  
        "mp-dingtalk": {   
            "title":"钉钉小程序",   
            "env": {   
                "UNI_PLATFORM": "mp-alipay"   
            },  
            "define": {   
                "MP-DINGTALK": true   
            }  
        }  
    }  
}

脚本节点添加运行和打包命令(cli项目创建专用)

{
	"dev:mp-dingtalk": "uni -p mp-dingtalk",
	"build:mp-dingtalk":"uni build -p mp-dingtalk"
}

调试运行钉钉小程序

Hbuilder开发

使用Hbuilder开发可参考文档

cli形式运行

运行启动命令

npm run dev:mp-dingtalk

编译完成后打开开发者工具,点击打开项目定位到工程 dist>dev>mp-alipay 文件夹

https://i-blog.csdnimg.cn/direct/6974b51ba91e43128276a09644e1f7cf.png

选择企业内部应用( 开发者工具中企业内部应用才能真机调试

https://i-blog.csdnimg.cn/direct/880776d587b2499ebd08a5272986b84e.png

开发注意事项

禁止使用span等html标签

span等html标签在微信小程序中可以被编译成功,但是在钉钉中不能被识别到,应使用view、text组件代替

错误写法

<span> 错误写法 </span>

正确写法

<view> 正确写法 </view>

不可以在uni-ui、自定义组件中直接写style和calss

在uni-ui组件和自定义组件中直接使用style和class,编译到钉钉小程序平台会出现样式丢失,建议在组件的外层在套一层view组件

错误写法

<comA style="color:red"> 错误写法 </comA>

正确写法

<view style="color:red"> <comA > 正确写法 </comA> </view>

使用条件编译(仅钉钉小程序运行)

// #ifdef MP-DINGTALK
dd.getLocation()
// #endif

不可使用透传插槽

使用透传插槽编译到钉钉平台,会导致页面内容出不来,甚至小程序崩溃

ref使用注意

在vue开发中经常用ref来定位到节点,而vue3的uniapp中在template里面使用在uni-form加ref需在script中也定义相对应的字段,不然在钉钉中就会报错:form is undefined

<template>
	<uni-forms ref="form">
      ....
    </uni-forms>
</template>
<script setup>

const form = ref(null)
</script>

使用自定义导航栏注意

在钉钉小程序中要使用自定义导航栏的话需要在 pages.json 中页面配置节点添加如下配置

"style": {
  "navigationBarTitleText": "",
  "navigationStyle": "custom",
  "transparentTitle":"always"
}

其中 transparentTitle 配置是为了让原生导航栏变得透明, navigationBarTitleText 属性设置为空是为了不出现原生导航栏的字样,,如果不加就会出现如下效果

https://i-blog.csdnimg.cn/direct/d339220cb60c4074b476c8d0e4c93d9d.png

在加完如上配置之后,就会发现加了自定义导航栏的在首页没有什么问题,而在跳转到另外一个配置自定义导航栏页面时会出现返回按钮重叠的情况,如下图所示

https://i-blog.csdnimg.cn/direct/1551bff701a142bd853736b6d891ec46.png

出现这种问题估计还是uni-app在编译到钉钉小程序时候的bug,这种问题解决方法是在跳转时要避免使用 uni.navigateTo Api,转而使用 uni.redirectTo Api

在内网环境中 dd is undefined

有些时候要在内网环境下开发,在使用 dd.getLocation 等Api时出现报错 dd is undefined ,这其实是正常现象,钉钉的Api需要在联网环境下使用,使用uni去调的Api编译后并不是直接通过dd的Api的

例子

编译前

https://i-blog.csdnimg.cn/direct/e29345062569406391db1f61e541792b.png

编译后

https://i-blog.csdnimg.cn/direct/1bb99c3e7f0647b1b049802571dbbefc.png


  1. 这里使用的是 ,新版的钉钉开发者工具无法在没有登录的情况下进行调试运行,无法在内网环境下运行