快应用开发总结

651 阅读2分钟

最近几个月公司添加了快应用功能开发。这里把快应用遇到的一些开发上的技巧和大家分享一下。 分别从 文件路径样式组件api运行测试发布 这几个来说

文件路径

根路径为 /src/....

样式

  1. px 快应用优先使用px 尽量不要使用百分比,不然会有怪异情况出现。不同机型问题,百分比有的机器不支持。官方已经对px做了适配 750px 对等 100vw;屏幕100%;所以优先使用px单位;
  2. position 定位并不能通过z-index 调整 所以解决层级问题的方法是调整html结构位置,受定位影响的结构是不能被父级show直接控制,需要单独给show控制显示隐藏,或者父级给if
    层级问题
    <div></div>
    <div></div> 两个div都有定位的情况下这个div显示在上面div上面
    
    <div show="{{false}}" >  //父级控制隐藏
     // 子元素并不会隐藏 ,解决方案有给父级if控制或者给字元素一个show和父级一样
         <div sytle='position:fixed;left:100px;top:100px' > 
            
        </div>
    </div>
    
  3. border-radius 圆角 父子边缘都需要设置 所以推荐给每一个角设置,由于快应用overflow:hidden 并不能用父级盖住子元素,所以在多层结构里面,父级给了圆角子元素没给的情况下,圆角并不能生效,需要给子元素再设置
  4. overflow:hidden 很多机型并不能兼容。所以不推荐使用该属性
  5. background 背景 除渐变 不支持缩写,官方也说明了。颜色需要单独使用background-color img 等也是单独使用。
  6. 盒模型 不支持切换盒模型 默认使用flex 每一个div 都是flex盒模型。
  7. box-sizing 默认border-box 不支持其它容器计算方式。
  8. 动画使用方式如下
@keyframes scl {
 0% {
   transform: scale(0.8);
 }
 50% {
   transform: scale(1);
 }
 100% {
   transform: scale(0.8);
 }
}
div{
   animation-name: scl;
   animation-duration: 2s;
   animation-iteration-count: infinite;
}

组件

  • 组件基本参考小程序写法 在顶部引入 在结构内部使用 不需要单独注册
  • 组件父子传参建议全小写 小驼峰必须变成 a-b 方式才能接收。
  • 使用组件方法 优先推荐 this.$child('组件id').组件方法() 使用

官方API

  • 微信充值 如果只想实现其中的一种,请勿配置另外一种支付方式的参数。同时配置两种参数,并且设备都支持的情况下,默认会选择 app 支付。
  • push 推送 regid 建议每次应用就获取,短时间获取不会变动,过久了需要跟换
  • ad 广告 巨巨巨巨坑点。vivo推荐使用模板广告,vivo有单独的广告组件 apex的ad组件支持 小米 oppo 华为
    • 需要单独看的广告文档 vivo 华为
    • 华为需要广告审核,onShow生命周期需要重新上报广告。推荐onHide时广告组件用if关闭,然后onShow重新显示。华为需要单独提交广告审核。
    • 视频广告开屏广告的话需要加入二次拉取。第一次拉取失败再拉取一次。厂商不允许拉取太频繁。所有视频广告
    • 所有广告都不允许拉取太频繁。不过官方推荐了一预拉取。建议在tabbar 每一个项都预拉取所有广告。退出有广告的页面也预拉取一次。不然可能出现广告无法出现问题。
  • 桌面图标 强烈推荐使用官方添加桌面组件。不推荐使用api。api可能丢失添加的用户。

运行测试

  • 测试特殊机型 vivo 华为 vivo部分机型不支持推送
  • 华为样式兼容最差。不能使用太骚的样式写法
  • 华为测试需要下载快应用加载器,需要在加载器里面测试。快应用加载器可以非华为手机安装。详情
  • 广告测试快应用预览版需要切换到快应用才能使用

打包上架

  • 快应用上架可以自己去各大厂商单独提交也可以使用开发工具提交 ,工具提交的话会有延迟。需要快应用联盟审核一次然后再给厂商审核。急某个厂商可以单独去改厂商单独提交。
  • 发布版本推荐使用1100+ 不然不能使用$nextTick 有一些异步情况不能不好处理。setTimeout 并不能代替nexttick