[uni-app]小兔鲜-03多端打包上线

news2024/9/29 23:39:15

小程序打包

打包上线流程

  1. 打包命令: pnpm build:mp-weixin
  2. 效果预览: 把打包后的文件导入微信开发者工具 (dist\build\mp-weixin)
  3. 代码上传: 点击微信开发者工具的上传按钮, 上传代码,
  4. 审核发布: 登录微信公众平台, 提交审核, 审核后发布
  5. 辅助工具: 有些团队会使用开发辅助工具 miniprogran-ci 上传代码

H5打包

条件编译: 让代码按条件编译到不同平台, 保证代码只在可以兼容的平台生效

// #ifdef MP-WEIXIN
// 获取code
let code = ''
onLoad(async () => {
  const res = await wx.login()
  code = res.code
})

// 微信登录
const onGetPhoneNumber: UniHelper.ButtonOnGetphonenumber = async (ev) => {
  const encryptedData = ev.detail!.encryptedData!
  const iv = ev.detail!.iv!
  const res = await postLoginWxMin({
    encryptedData,
    iv,
    code,
  })
}
// #endif
</script>

<template>
  <view class="viewport">
  
    <view class="login">
      <!-- 网页端表单登录 -->
      <!-- #ifdef H5 -->
      <input class="input" type="text" placeholder="请输入用户名/手机号码" />
      <input class="input" type="text" password placeholder="请输入密码" />
      <button class="button phone">登录</button>
      <!-- #endif -->

      <!-- 小程序端授权登录 -->
      <!-- #ifdef MP-WEIXIN -->
      <button class="button phone" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber">
        <text class="icon icon-phone"></text>
        手机号快捷登录
      </button>
      <!-- #endif -->
          
    </view>
  </view>
</template>
  1. 语法: 通过特殊注释, 以 #ifdef 或 #ifndef 加 平台名称 开头,以 #endif 结尾。
  2. 支持vue, js, ts, css, scss,packag.json等文件
  3. 开发中可能有多处代码要进行平台兼容性处理, 可用通过wx. 和 open-type关键词快速搜索

  1. 实现效果: 小程序端使用微信授权登录, h5端使用账号密码登录

配置相对路径: 默认情况下, 打包h5使用的是绝对路径, 很多时候网站并不是部署在服务器的根路径下, 所以一般配置成相对路径, 更加灵活

{
  /* 网页端特有配置 */
  "h5": {
    "router": {
      // 基础路径:./ 为相对路径
      "base": "./"
    }
  } 
}
  1. 预览h5: 使用Live Server插件打开/dist/build/h5 目录下的 index.html 文件
  2. 效果: 默认使用绝对路径加载资源, 配置之后使用相对路径加载资源

安卓打包

真机调试: 本地代码运行到真机预览调试

  1. 导入到HBuilderX, 运行到手机或模拟器, 运行到安卓App基座

  1. 数据线连接手机, 开启开发者模式

  1. 运行测试

  1. 如果出现警告,说明编译器版本和SDK版本不一致

  1. 常见故障排除指南

  1. 数据线(不是充电线)连接手机,部分手机需要安装驱动程序
  2. 开启开发者模式, 不同手机步骤可能不同

云打包: 打包成可以安装使用的软件包

  1. 登录DCloud账号

  1. 获取DCloud AppID, 设置应用名称, 设置App图标

  1. 发行->云打包 -> 打开所在目录 -> 右键->安装到手机

  • Android包名-> uni.net.itheima.orabbit (uni.域名倒写)
  • 云端证书: 详情->DCloud开发者中心->应用管理->我的应用->应用名称->Android云端证书->创建证书
  • 打正式包, 快速安心打包

  • 如果需要上架应用市场, 需要查看各市场上架流程和规则

ios打包

真机预览: ios端的真机预览和打包需要使用mac电脑

  1. 导入到HBuilderX
  2. 运行到IOS App基座
  • 运行到真机需要证书支持
  • ios IDP/IEP证书
  • iOS证书(.p12)和描述文件(.mobileprovision)申请 - DCloud问答
  • 打包ios应用所需的证书和证书profile文件的创建方法 - DCloud问答
  • ios证书必须有苹果开发者账号, 一年收费几百块
  1. 运行到IOS模拟器 App基座
  • 下载Xcode模拟器

ios打包

  1. ios打包和安卓打包流程上一样
  2. 只是证书的申请上有区别

跨端兼容

每个端都有自己的特征, uniapp尽可能的磨平这些差异,但是不可能完全磨平, 需要我们自己处理

  1. 更多兼容性问题参考官
  2. uniapp跨端注意
  3. uniappCss支持
  4. uniapp条件编译

选择器兼容: 小程序端和APP端不支持 * 选择器, 运行时会报错

  1. 跨端项目中不使用 * 选择器 , 使用并集选择器选择标签

页面适口差异: 适口就是可视区域, 专业称为webview, 不同端对适口的计算规则不一样

  1. 小程序端和app端的适口计算是一致的:
  • tabbar页面的适口不包含上下导航部分
  • 普通页面的适口不包含顶部导航部分
  1. h5端的适口就是全部可视区域, 上下导航部分包含在适口内
  2. 不同的适口计算规则, 会导致代码跨端编译后, 各端的表现出现差异

问题1: 购物车的猜你喜欢在H5端不能正确的下拉触底加载更多数据

问题原因: 没有给page页面设置高度, page的高度就等于整个页面的高度, 即便内容滑动触底也无法触发加载更多

解决方案: 让page页面继承父容器的高度, 父容器的高度uniapp已经处理好了, 减去了上下导航的高度

page{
 hright:100%
}

问题2: 定位错位的问题

  1. 问题原因: 适口计算规则不同, 导致h5页面的定位原点靠下, 内容会被tabber遮挡住
  2. 解决方案: 使用uni提供的css变量, uniapp官网->教程->css语法->css变量

.toolbar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: var(--window-bottom);
}

h5端是单页面应用, 默认开启 scoped 样式隔离, App端由webview渲染, 组件样式也会默认隔离

  1. 问题: 骨架屏样式在小程序端正常, H5和App变形了

  1. 原因: 小程序端不存在样式隔离, 骨架屏组件可以继承一些全局的样式, 所以是正常的, 但是在h5和app中, 由于样式隔离,继承不到全局样式, 造成变形
  2. 解决: 把骨架屏需要的其他样式,全部抽离出来, 按条件编译, 引入到骨架屏组件

结构差异: app端渲染结构和小程序端渲染结果存在差异的, 我们给page设置的属性在app端不会生效, 因为app端不会渲染page这一层, 所以要做一些兼容性处理

  1. app端调试: 运行到手机或模拟器->显示Webview调试控制台

组件兼容: uniapp内置的组件借鉴的是小程序组件, 不同平台具有差异性, 所以要按需处理

  1. 客服功能只能在小程序环境支持, h5端和app端不支持, 所以要通过条件编译语法进行处理

JS API兼容: 非h5端, 不支持window, document等JS API, uni-app扩展了uni对象, 封装了大量支持跨端的JS API, 如果使用了各端专有的API, 如微信支付等, 需要添加条件编译

// #ifdef H5 || APP-PLUS
  uni.chooseImage({
    count: 1,
    success: (res) => {
      // 文件路径
      const tempFilePaths = res.tempFilePaths
      // 上传
      uploadFile(tempFilePaths[0])
    },
  })
  // #endif


 // #ifdef MP-WEIXIN
  uni.chooseMedia({
    // 文件个数
    count: 1,
    // 文件类型
    mediaType: ['image'],
    success: (res) => {
      // 本地路径
      const { tempFilePath } = res.tempFiles[0]
      // 上传
      uploadFile(tempFilePath)
    },
  })
  // #endif
  1. uni.chooseMedia()方法不支持App和H5环境,
  2. 所以在H5和App环境中, 使用uni.chooseImage() 方法进行文件上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis缓存技术 基础第一篇(快速入门与安装部署)

文章目录 一、安装部署二、Redis 基础数据类型三、Redis通用命令四、String类型五、key的结构六、Hash类型七、List类型八、Set类型九、SortedSet类型 Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0…

校园美食地图:Spring Boot实现的探索与分享平台

第1章 绪 论 1.1课题背景 2021年处于信息高速发展的大背景之下。在今天&#xff0c;缺少手机和电脑几乎已经成为不可能的事情&#xff0c;人们生活中已经难以离开手机和电脑。针对增加的成本管理和操作,商家非常有必要建立自己的网上校园周边美食探索及分享平台&#xff0c;这既…

ECMAScript 与 JavaScript区别与联系

&#x1f916; 作者简介&#xff1a;水煮白菜王 &#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 我的主页 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧✍。 感谢支持&#x1f495;&#x1f495;&#x1f495; E…

PDF转换器哪个好?这5款PDF工具值得推荐

PDF转换器哪个好&#xff1f;选择一款优质的PDF转换器&#xff0c;能够极大地提升我们的工作效率与灵活性。它不仅能轻松实现PDF文件与Word、Excel、PPT等多种格式间的互转&#xff0c;还支持图片、TXT等多种格式的转换&#xff0c;满足多样化的办公与学习需求。此外&#xff0…

AI生成头像表情包,月入过万,简单操作

今天给大家带来的项目是AI生成表情包和头像&#xff0c;这个项目对于我们做ip来说是真心不错&#xff0c;就比如我这个头像。 为什么说每天只需要10分钟呢&#xff0c;那么我们继续往下看。 01、"项目介绍 ** ** 这个项目的核心其实就是使用AI生成表情包或者说生成头像…

同城搭子线下陪玩游戏系统线下陪玩靠谱的APP小程序公众号开发

同城搭子线下陪玩游戏系统、线下陪玩靠谱的APP、小程序、公众号开发&#xff0c;是当前社交娱乐领域的一个热门话题。这类系统的开发旨在为用户提供一个便捷、安全、有趣的线下陪玩平台&#xff0c;满足用户多样化的社交和娱乐需求。以下是对这一话题的详细解析&#xff1a; 一…

[数据库实验四]存储过程及函数

目录 一、实验目的与要求&#xff1a; 二、实验内容&#xff1a; 三、实验小结 实验中涉及到的数据及内容&#xff1a;数据库MySQL实验_Fxrain的博客-CSDN博客 一、实验目的与要求&#xff1a; 1、掌握存储过程的工作原理、定义及操作方法 2、掌握函数的工作原理、定义及…

数据结构——二叉搜索树、Map和Set

对于不同的数据结构&#xff0c;他们的使用场景是不一样的&#xff0c;map和set这两种数据结构主要用在搜索相关的场景中。学习这些之前我们先来了解一下二叉搜索树&#xff0c; 一、搜索树 1.1概念 二叉搜索树 又称 二叉排序树 &#xff0c;它或者是一棵空树&#xff0c;或者…

宝塔面板,awk读取网站日志,筛选请求耗时排名前100的记录

背景 近期发现项目的访问量稳步上升 渐渐注意到一些接口响应时间过长&#xff0c;在此需设计读取接口耗时较长的日志&#xff08;nginx 的 access.log日志&#xff09; 在此将实现步骤记录如下&#xff0c;方便道友参考 . 环境配置 宝塔面板 Nginx 1.20.2 PHP-7.2.33实现步…

认知战认知作战:认知战目标对手分析,你需要知道的目标对手分析SOP

认知战认知作战&#xff1a;认知战目标对手分析&#xff0c;你需要知道的目标对手分析SOP 认知战认知作战&#xff1a;认知战目标对手分析你需要知道的目标对手分析SOP 关键词&#xff1a;认知战, 目标对手分析, 数据情报搜集, 自我审视, 洞悉对手, 精准攻击策略, 行动规划, …

【国家博物馆应对黄牛办法解析】

一 国家博物馆预约流程及独家预约问题 微信公众号的预约引导页&#xff0c;有微信小程序和PC端预约两种方式&#xff1a; PC端预约和微信小程序明明是两中方式&#xff0c;现在却变成一种了&#xff0c; 为何不能在支付宝小程序预约&#xff1f; 独家的背后往往有故事&#x…

从零开学C++:二叉搜索树

引言&#xff1a;在本篇博客当中&#xff0c;我们会将关于二叉树的进阶结构——二叉搜索树&#xff0c;强大的搜索效率让它在数据结构当中变得十分重要&#xff0c;让我们一起来进行学习吧&#xff01; 更多有关C的知识详解可前往个人主页&#xff1a;计信猫 一&#xff0c;二叉…

Android开发版本更新和强制更新效果

Android开发版本更新和强制更新效果 版本更新基本每个app都有&#xff0c;这里加多个强制更新效果 一、思路&#xff1a; 用okhttp下载接口返回的apk下载地址&#xff0c;这样有进度条 二、效果图&#xff1a; Android开发教程实战案例源码分享-版本更新和强制更新效果 三、…

建筑师设计师必备的14个AI工具

从制作复杂的设计到可视化突破性的建筑创新&#xff0c;建筑领域一直与技术紧密交织。随着我们深入数字时代&#xff0c;建筑师和设计师利用尖端人工智能 (AI) 工具的力量来革新他们的工艺也就不足为奇了。但是&#xff0c;随着市场上 AI 工具的大量出现&#xff0c;哪些工具真…

Pymsql 插入数据时报错 Unkown column xxxx in field list

如图 从文字来看&#xff0c;它是说我们表里没有“247dxxxxxxx”这个字段&#xff0c;但问题是我建表的时候本来就没建这个字段&#xff0c;这一串字符是我要插入到“id”这个字段里的内容&#xff0c;它怎么就把它当成字段了呢&#xff1f; 后来发现是在传入参数的时候&#…

Java 发布jar包到maven中央仓库(2024年9月保姆级教程)

文章目录 前言一、账号准备1. 注册登录账号2. 新建命名空间3. 验证命名空间4. 生成令牌5. 为 maven 设置令牌二、GPG准备1. 下载GPG2. 发布证书2.1 新建证书2.2 发布证书到服务器2.3 验证发布三、发布jar包到中央仓库1. 编辑项目pom文件2. 打包上传3. 发布jar包4. 搜索我们的ja…

分片上传和断点续传

今天介绍两个概念&#xff1a; 1、分片上传 分片上传&#xff0c;就是将所要上传的文件&#xff0c;按照一定的大小&#xff0c;将整个文件分隔成多个数据块来进行分别上传&#xff0c;上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。 2、断点续传 断点续…

C语言课程设计题目三:图书管理系统设计

题目三&#xff1a;图书管理系统设计 图书管理信息包括&#xff1a;图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。 主要功能&#xff1a; 新进图书基本信息的输入。图书基本信息的查询。对撤销图书信息的删除。为借书人办理注册。办理借书手续。办理…

数据流处理技术与Flink框架

一数据流 数据流定义&#xff1a; 数据流&#xff08;Data Stream&#xff09;是指数据以连续不断的方式到达和处理的序列。在现实世界中&#xff0c;许多数据来源都是以流的形式存在&#xff0c;比如&#xff1a; 1. 用户行为&#xff1a;用户在网站上的点击流、移动应用中…

微软 Win11 RP 226x1.4247(KB5043145)预览版发布!

系统之家于9月25日发出最新报道&#xff0c;微软面向Release Preview频道的用户发布了Win11的KB5043145更新。系统更新后版本号提升为22621.4247和22631.4247。此次更新新增多项功能&#xff0c;例如用户播放媒体时&#xff0c;媒体控件会显示在锁屏中央的下部。以下跟随小编看…