# UniApp + H5混合开发微信小程序 技术实施方案(UniApp端) 你希望通过UniApp开发微信小程序,以web-view嵌套H5承载核心业务展示,同时由UniApp原生层负责登录、退出、支付等核心能力,以下是UniApp端的详细技术实施方案,明确需要开发的核心模块、功能和关键逻辑。 ## 一、整体架构与职责边界 ### 核心分工 | 模块/能力 | UniApp(小程序端)负责 | H5端负责 | |----------------|---------------------------------------------|--------------------------------| | 用户身份 | 微信登录、token管理、用户信息存储、退出登录逻辑 | 接收并使用用户信息,触发退出登录指令 | | 支付 | 调起微信支付、支付结果处理、支付状态同步 | 发起支付请求、展示支付结果 | | 页面容器 | 提供tabBar框架、web-view容器、页面跳转控制 | 承载table栏、业务内容展示、内部页面跳转 | | 通信 | 接收H5消息、主动向H5推送数据、处理通信异常 | 向UniApp发送指令、接收UniApp数据、展示状态反馈 | ## 二、UniApp端核心开发内容 ### 1. 项目基础配置 #### (1)全局配置(pages.json) 配置tabBar、页面路由、web-view权限等核心配置: ```json { "pages": [ // 登录页 "pages/login/login", // tabBar主页面(嵌套web-view) "pages/index/index", // 其他tabBar页面(如需) "pages/my/my" ], "tabBar": { "color": "#666666", "selectedColor": "#007AFF", "backgroundColor": "#ffffff", "borderStyle": "black", "list": [ { "pagePath": "pages/index/index", "text": "首页", "iconPath": "static/tabbar/home.png", "selectedIconPath": "static/tabbar/home-active.png" }, { "pagePath": "pages/my/my", "text": "我的", "iconPath": "static/tabbar/my.png", "selectedIconPath": "static/tabbar/my-active.png" } ] }, "permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序定位" } }, "webview": { "webviewParameter": { "allowUniversalAccessFromFileURLs": true, "allowFileAccess": true } } } ``` #### (2)微信小程序配置(manifest.json) 开启微信小程序相关权限,配置AppID等: ```json { "mp-weixin": { "appid": "你的微信小程序AppID", "setting": { "urlCheck": false, // 允许访问非域名白名单的H5(开发阶段,正式需配置白名单) "es6": true, "postcss": true }, "usingComponents": true, "permission": { "scope.userInfo": { "desc": "获取你的用户信息用于登录" } } } } ``` ### 2. 核心页面开发 #### (1)登录页(pages/login/login.vue) 负责微信授权登录、获取用户信息、token存储: ```vue ``` #### (2)tabBar首页(pages/index/index.vue) 核心容器页,嵌套web-view、处理与H5的通信: ```vue ``` #### (3)“我的”页面(pages/my/my.vue) 可选,如需原生展示用户信息、退出按钮等: ```vue ``` ### 3. 全局工具类(可选) 封装通信、登录校验等通用方法,便于复用: ```js // common/utils.js /** * 向H5发送消息 * @param {String} webViewId web-view的ID * @param {Object} msg 消息内容 */ export const sendMsgToH5 = (webViewId, msg) => { const webViewCtx = uni.createWebViewContext(webViewId); webViewCtx.postMessage({ data: msg }); }; /** * 校验登录态 * @returns {Boolean} 是否已登录 */ export const checkLogin = () => { const token = uni.getStorageSync('wx_token'); if (!token) { uni.redirectTo({ url: '/pages/login/login' }); return false; } return true; }; ``` ### 4. 关键注意事项 1. **域名白名单配置**:微信小程序后台需配置H5域名、后端接口域名的白名单,否则无法访问; 2. **通信格式统一**:UniApp与H5的通信消息需约定固定格式(如`{type: 'xxx', data: 'xxx'}`),避免解析异常; 3. **支付权限**:确保小程序已开通微信支付权限,后端支付接口需正确对接微信支付商户平台; 4. **登录态同步**:H5页面刷新时,需重新从UniApp获取登录态(可通过URL参数或postMessage); 5. **兼容性**:web-view组件在微信小程序中部分JS API有限制,需避免在H5中调用小程序专属API(如支付、登录)。 ## 总结 UniApp端核心开发内容可归纳为3个关键点: 1. **基础层**:配置tabBar、页面路由、微信小程序权限,搭建整体框架; 2. **核心能力层**:开发登录页实现微信授权登录,在web-view容器页处理与H5的通信,封装支付、退出登录等核心逻辑; 3. **保障层**:统一通信格式、配置域名白名单、处理登录态同步,确保混合开发模式稳定运行。