一般性问题

由于小程序都有代码包大小限制,聊一聊都用过哪些方法,优化代码包的大小?

  1. 静态文件CDN托管
  2. 条件编译区分不同平台的资源和代码,防止出现冗余代码和资源文件。
  3. 使用代码分析工具,优化js库大小
  4. 规范开发,抽离常用的js库
  5. 开启代码压缩,H5端开启摇树优化。
  6. 提前根据项目功能模块预估,提前模块分包。

    分别说出uniapp常用的应用生命周期、页面生命周期和对应的使用场景。

  7. 应用生命周期:【应用生命周期仅可在App.vue中监听,在其它页面监听无效。】

    1. onLaunch:uni-app 初始化完成时触发(全局只触发一次)
    2. onShow:uni-app 启动,或从后台进入前台显示
    3. onHide:uni-app 从前台进入后台
  8. 页面生命周期:

    1. onLoad:监听页面加载,其参数为上个页面传递的数据,参数类型为 Object
    2. onShow:监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
    3. onReady:监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
    4. onHide:监听页面隐藏
    5. onUnload:监听页面卸载
    6. onPullDownRefresh:监听用户下拉动作,一般用于下拉刷新
    7. onReachBottom:页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据
    8. onPageScroll:监听页面滚动
    9. onShareAppMessage:用户点击右上角分享

      如何判断当前运行平台,运行在哪一端?

  9. 编译阶段,使用条件编译

  10. 运行阶段,使用uni.getSystemInfoSync().platform

    uniapp语法和传统的vue的web开发,有什么区别?

    image.png

    微信小程序登录流程是什么样的?

    uniapp面试题 - 图2

    1. 调用wx.login(),获取code,传给后端,让后端换取openId作为唯一标识,或者用来和手机号等绑定。
    2. 后端可以用openId配合appSecret,调用微信的auth.code2Session换取unionid和存储登录状态,和前端约定自定义的登录失效和鉴权方式。
    3. 前端通过自定义的token,请求后端接口,后端拿到自定义token,去查询已存储的session_key,去和微信服务器交互,在返回给前端。

      微信小程序支付流程是什么样的?

      1. uniapp面试题 - 图3
      2. 前端:查看是否登录。
      3. 后端:确认已登录状态,拿到openId,换取session_key
      4. 后端:处理下单参数,解析统一下单返回的数据,得到前端小程序需要的参数实体,返回给前端参数对象。
      5. 前端:拿到参数对象,调用wx.requestPayment,拉取支付组件弹窗。
      6. 后端:收到支付结果,修改订单状态。

        uniapp通用

        样式相关问题

        rpx和设计稿像素的换算方式是什么样的?

    4. image.png

    5. 即,先看设计稿,比如设计稿宽度为375px,择按照基准宽度750rpx来算,100px的设计稿图标,在css中就要写为:100*(750/375),即200rpx。
    6. 当然,如果使用蓝湖,则可以直接调整设计稿宽度为,750px,就免得计算了。image.png

      css中background-image有什么注意事项?

    7. 图片只能使用网络路径

      支付宝小程序中使用图片做图标,写样式有什么注意事项?

    8. 需要在图片的css中设置background-size: 100% 100%;,支付宝小程序中,所有图片都是转化成背景图的形式渲染的,不设置该属性,容易出现图片错位的情况。

      静态文件可以实现,只在指定的端编译进代码包吗?

    9. 可以。uniapp的static目录自带条件编译功能,需要按照指定名称建目录。比如:以下目录中的a.png只会在微信小程序平台会被编译。而 b.png会被全平台编译

      1. ┌─static
      2. ├─mp-weixin
      3. └─a.png
      4. └─b.png
      5. ├─main.js
      6. ├─App.vue
      7. ├─manifest.json
      8. └─pages.json

      API相关问题

      uni.redirectTo()uni.reLaunch()的区别

    10. redirectTo:关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面

    11. reLaunch:关闭所有页面,打开到应用内的某个页面。

      如何监听一个全局的自定义事件?

    12. 使用[uni.$on(eventName,callback)](https://uniapp.dcloud.io/api/window/communication?id=on),监听全局的自定义事件,事件由uni.$emit()触发,回调函数会接收事件触发函数的传入参数。触发的事件都是 App 全局级别的,跨任意组件,页面。注意及时销毁掉无用的事件监听。

      说出几种uniapp的页面生命周期?

      image.png
      常用的有:onLoad、onShow、onHide、onPullDownRefresh、onReachBottom、onShareAppMessage、onPageScroll。

其他问题

页面之间传参的方式:

  1. 10. 跳转路径后面拼接参数,接受页面,通过`onLoad`传入参数接收。

自定义tabbar实现方式:

  1. 11. 自定义一个tabbar组件,将tabbar对应的几个页面都当成组件,放置在同一个页面中,以切换组件显示隐藏的方式,实现切换tabbar对应“页面”。

下拉刷新功能如何实现:

  1. 12. `page.json`页面里面,添加当前页面的属性:`enablePullDownRefresh: true`
  2. 12. ` js `中定义 `onPullDownRefresh `处理函数(和onLoad等生命周期函数同级),监听该页面用户下拉刷新事件。在下拉刷新时执行。
  3. 12. 在下拉函数执行时发起数据请求,请求返回后,调用`uni.stopPullDownRefresh`停止下拉刷新的状态.

如何设计一个悬浮的返回顶部按钮?

  1. 15. 可以监听页面滚动,使用页面的`onPageScroll (e) {}`监听方法(和onLoad等生命周期函数同级),在页面滚动时,实时获取页面位置,当符合标准时,显示组件。
  2. 15. 点击组件,配合页面滚动API使用`uni.pageScrollTo({ scrollTop:0, duration:300});`可以滚动至页面指定位置。
  3. 15. 记得做好点击的防抖。

web-view中内嵌的网页跳转uniapp页面,如何实现?

  1. 18. `web-view`内嵌网页中,引入uniapp官网js库,`uni.webview.js`
  2. 18. 在初始化成功后,可以直接调用 uni 相关的 API,就可以实现页面切换及发送消息。
  1. document.addEventListener('UniAppJSBridgeReady', function() {
  2. uni.navigateTo({
  3. url: 'test?id=1&name=uniapp'
  4. });
  5. });
  6. });

支付宝小程序登录流程是什么样的?【流程同微信相似】

微信小程序支付和支付宝小程序支付流程是什么样的?

  1. 20. 微信小程序支付:
  2. 1. ![](https://cdn.nlark.com/yuque/0/2021/png/353882/1631083846344-eb9c1b58-2df6-411b-bf70-6af95115b1af.png#clientId=ub8c333bd-81e5-4&from=paste&id=u83c993c4&margin=%5Bobject%20Object%5D&originHeight=572&originWidth=686&originalType=url&ratio=1&status=done&style=shadow&taskId=u25906cfc-457b-4412-b874-1ba7838b6e0)
  3. 1. 前端:查看是否登录。
  4. 1. 后端:确认已登录状态,拿到openId,换取`session_key`
  5. 1. 后端:处理下单参数,解析统一下单返回的数据,得到前端小程序需要的参数实体,返回给前端参数对象。
  6. 1. 前端:拿到参数对象,调用`wx.requestPayment`,拉取支付组件弹窗。
  7. 1. 后端:收到支付结果,修改订单状态。
  8. 21. 支付宝小程序支付:
  9. 1. ![](https://gw.alipayobjects.com/zos/skylark-tools/public/files/0e3fc255e4af921d2c099a31548d3d48.png#from=url&id=t7eZc&margin=%5Bobject%20Object%5D&originHeight=750&originWidth=1500&originalType=binary&ratio=1&status=done&style=shadow)
  10. 1. 前端:判断登录状态,调用后端接口,创建订单。
  11. 1. 后端:调用`[alipay.trade.create](https://docs.open.alipay.com/api_1/alipay.trade.create/)(统一收单交易创建)`接口,获得支付宝交易号`tradeNO`,返回前端需要的参数对象。
  12. 1. 前端:得到参数对象,使用` [my.tradePay](https://docs.alipay.com/mini/api/openapi-pay) `唤起支付宝支付组件弹窗
  13. 1. 后端:收到结果,修改订单。后续,也可以使用,`[alipay.trade.query](https://opendocs.alipay.com/apis/api_1/alipay.trade.query)`进行订单支付情况的查询。
  14. 1. 其他:花呗分期等需要开通后,创建订单时,传入对应参数。

钉钉小程序如何获取企业的全部员工信息【问题比较偏】?

  1. 22. 钉钉小程序不支持直接接口获取,需要先调用`获取部门列表`,然后通过遍历使用`获取每个部门用户列表`

APP编译打包问题

如果我想调试消息推送,地图,原生插件等,使用默认的官方基座,可以满足要求吗?

  1. 23. 不能,需要制作自定义基座,只有自定义基座可以调试第三方能力。

发布上线相关问题

App

各家应用市场,都有什么特殊的要求和注意事项?

  1. 1. 华为应用市场需要证书签名和密钥
  2. 1. 应用宝需要特殊行业资质和软著
  3. 1. 微信小程序需要软著

大致描述AppStore发布流程,有哪些需要注意的地方?

  1. 4. 生成发布证书【区别于开发证书】
  2. 4. 生成ipa安装包
  3. 4. 上传安装包,等待安装包机审,通过后,在`构建版本`中可以看到
  4. 4. 准备应用截图【6.5英寸和5.5英寸,屏幕截图各两套】
  5. 4. App隐私填写【隐私政策网址、收集的数据类型说明】

AppStore上架了新版本的APP,但是应用市场没有搜索到,怎么解决?

  1. 9. 由于要分发到不同国家和地区,会有一段时间的延迟,可以通过,切换销售地区【中国大陆】和销售价格来解决。

微信小程序:

本地开发者工具调试接口没有问题,但是真机调试,或者发布体验版之后,接口请求不通,可能是为什么?

  1. 10. 小程序后台添加域名的白名单。

钉钉小程序:

开发者后台也添加了域名白名单,但是应用接口请求还是不通,为什么?

  1. 11. 钉钉小程序需要先添加域名白名单,再发布新版本。修改后只对新版本生效。

不同端特别注意:

App

微信小程序

支付宝小程序

钉钉小程序

H5