Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2020-11-03]: 钉钉微应用前端开发总结 #18

Open
Lemonreds opened this issue Nov 3, 2020 · 0 comments
Open

[2020-11-03]: 钉钉微应用前端开发总结 #18

Lemonreds opened this issue Nov 3, 2020 · 0 comments

Comments

@Lemonreds
Copy link
Owner

什么是微应用

本质上我们是开发一组H5移动端web应用,当使用钉钉App(android,iOS)打开时,前端可以通过官方提供的js库dingtalk-jsapi来调用钉钉App的能力,例如,可以使用钉钉的通讯录选人功能、可以使用钉钉的发钉功能、可以修改钉钉打开我们应用的webview导航栏,以及一些手机的基础能力等,这个js库是通过与桥接的方式来和钉钉App通信的,我们不用关心其内部实现逻辑,直接调用所需的api,来满足我们的业务开发即可。

代码示例

例如修改钉钉打开我们应用的webview导航栏:

import * as dd from 'dingtalk-jsapi'; // 引入该库 像其他的库一样
dd.biz.navigation.setTitle({
    title : 'hello world.',
    onSuccess : function(result) {},
    onFail : function(err) {}
});

通过onSuccess,onFail的回调约定来判断调用状态,dingtalk-jsapi 实际上是支持promise回调的(参见npm包地址中的readme),即

dd.biz.navigation.setTitle(params).then(
   result=>{},
   err=>{},
)

使用哪种回调风格看个人喜欢,调用部分能力需要鉴权,例如涉及到钉钉业务、组织相关的能力,都需要先鉴权后使用,鉴权部分需要后端配合完成。

相关资源

调试相关

首先建议,优先使用PC端来调试我们的应用,不得已或者是用到钉钉能力的时候,才用钉钉app来调试 。同时,如果一些功能能单独实现,不一定非要通过钉钉能力的话,就单独实现,避免过多使用钉钉能力,钉钉能力调试起来会比较麻烦,问题也比较难处理,能规避就规避。比如显示一个loading,就完全没必要调用钉钉的能力。
在PC端调试的时候,如果有代码使用到了dingtalk-jsapi的库,控制台会报错的,因为当前的运行环境不是钉钉webview,可以通过以下代码规避这种类型的错误,快乐地调试pc页面:

import * as dd from 'dingtalk-jsapi';
if(dd.env.platform != 'notInDingTalk'){
	dd.ready(()=>{
		// dd.xxxxx 调用能力的部分
	})
}

其次,手机webview没有像pc端控制台那么好用的工具了,如果需要在手机上使用类似的控制台调试功能,可以使用以下的两个工具:
https://github.com/Tencent/vConsole
https://github.com/liriliri/eruda

以下是手机钉钉app来调试我们应用的方法,一般在调试钉钉能力的时候可以用:

方式1,使用内网穿透工具:

我们开发的时候,应用会运行在本地任一端口,例如:localhost:8080,因为网络不同的原因,手机钉钉app不能直接访问到本地开发的地址。可以通过内网穿透工具,拿到一个公网的域名,映射到我们本地的开发地址。钉钉提供了一个这样的工具(基于ngrock),我们可以直接使用
https://ding-doc.dingtalk.com/doc#/kn6zg7/hb7000

按照文档正确启动后,手机钉钉打开地址
http://xxxxx.vaiwan.com/ 会直接映射到我们本地的localhost:8080,如果是开发其他的h5应用,需要用真机浏览器打开的话,也可以用这个工具....

方式2,电脑连接安卓手机,真机调试:
手机上需用安装钉钉提供的apk包,通过chrome来支持,使用方式参见文档:
https://ding-doc.dingtalk.com/doc#/kn6zg7/qg4y64/dPXtB
电脑模拟器也是可以的,如夜神模拟器、网易mumu模拟器或者genymotion;

开发相关

antd-mobile这个库是没有类似antd的Form实现的,开发中如果涉及到了表单的,可以尝试用以下的解决办法:
实际上不管是移动端还是pc端,表单的业务逻辑是一致的。我们可以直接使用antd4的表单依赖库rc-field-form,它帮助我们处理数据绑定、校验等逻辑。实际开发中,我们可以通过对rc-fileld-form再包装一层,来统一设计稿表单字段、表单域、表单校验提示等样式。

rc-field-form:
https://www.npmjs.com/package/rc-field-form

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant