# 力软框架移动端 · 运行平台差异介绍文档 力软框架移动端支持运行到6个平台,包括 H5、安卓 App、iOS App、微信小程序、支付宝小程序、钉钉小程序。 这些平台各自存在不同的 API 差异、组件差异、页面渲染差异,甚至存在不同的 bug,需要开发者特别注意。 ## 平台差异简介 **App 平台:** - 需要云打包,提交应用商店上架审核(安卓 App 可以直接发布 .apk 让使用者安装); - 更新版本需要用户重新安装,也可以用 uni-app 提供的 [wgt 热更新](https://ask.dcloud.net.cn/article/35667); - 可以使用 uni-app 插件市场的原生组件,实现例如文件选择、文档预览、直播推流等功能; - App 平台功能强大,支持本地文件操作,定位/联系人/蓝牙/扫码/推送等功能均可使用,与手机系统的交互能力最强。 **H5 平台:** - 手机网页版,发布到服务器,用户用手机访问网站即可使用; - 发布新版,只需要更新服务器上的网站即可; - 更新发布最简单,性能优秀,几乎无兼容性问题,还可以使用浏览器独有的 WebAPI 操作 DOM 和 BOM; - 受浏览器上的功能限制,例如受浏览器跨域请求限制、无法扫码、无法使用蓝牙连接等。 **小程序平台:** - 需到小程序平台申请 AppID,调试需要使用小程序专用工具,发布需审核; - 用户端自动推送新版本,更新较方便; - 可以通讯的域名需要提前配置,小程序中打开网页使用的是平台内置的浏览器; - 可以深度结合平台自身的功能,例如微信支付、微信卡券、微信运动、支付宝支付、支付宝人脸识别、小程序账号登录等; - 小程序平台还可以预览 pdf、docx 等文档(钉钉小程序不支持); - 小程序支持消息分享,分享给自己的联系人,联系人点击进入可以直接跳转到指定页面; - 微信小程序功能最强,堪比 App 平台,支付宝小程序较差(缺少很多组件和 API),钉钉小程序最差(缺少大量组件和 API,部分功能完全不支持)。 ## 条件编译 不同平台存在差异,代码无法直接通用。例如:H5 平台不能扫码,其他平台可以;H5 平台涉及到跨域通讯限制,其他平台无此问题等。 uni-app 允许使用条件编译来为每一种平台单独编写一部分代码:[uni-app 条件编译官方文档](https://uniapp.dcloud.io/platform?id=%E6%9D%A1%E4%BB%B6%E7%BC%96%E8%AF%91)。 **注意:**钉钉小程序的条件编译是 `MP-DINGTALK`,文档里没有写; **注意:**如果写成 `MP-ALIPAY`,那么这一块的代码支付宝小程序、钉钉小程序都会编译进去; 只编译到支付宝小程序而不想编译到钉钉小程序,则需要写成嵌套形式。 ``` javascript // #ifdef MP-ALIPAY // 【注意】这里面的代码,支付宝小程序和钉钉小程序都会编译进来 // #endif // #ifdef MP-DINGTALK // 这里面的代码,只有钉钉小程序会编译进来 dd.httpRequest() // #endif // #ifdef MP-ALIPAY // #ifndef MP-DINGTALK // 这里面的代码,只有支付宝小程序会编译进来 my.request() // #endif // #endif // #ifdef MP-WEIXIN // 这里面的代码,只有微信小程序会编译进来 wx.getWeRunData() // #endif // #ifdef MP // 这里面的代码只会编译到所有小程序平台 uni.scanCode() // #endif // #ifdef H5 // 这里面的代码只会编译到 H5 平台 window.document.getElementById() // #endif // #ifdef APP-VUE // 这里面的代码只会编译到 App 平台 uni.preloadPage() plus.io.requestFileSystem() // #endif ``` ## 二次开发须知 通用注意点: - 【通用】`` 组件在不同端的 API 不同,因此需要使用条件编译来进行处理(可以参考 /pages/nworkflow/myflow/sign.vue 中的做法); - 【通用】文件上传,H5、小程序一般只能上传图片和视频,App 虽然能上传其他文件,但是 uni-app 原生不支持,需要安装第三方插件,且 iOS 和安卓需要的插件不一样;文化下载,小程序一般看 - 【通用】Vue 生命周期和常规网页不同,存在「页面生命周期」、「应用生命周期」两个概念,请阅读[uni-app 生命周期文档](https://uniapp.dcloud.io/api/lifecycle)了解。 微信小程序的注意点: - 【微信小程序】中,部分标签属于原生组件,例如 `