本文档描述了 H5 页面如何与彩图奔跑 App (Flutter) 进行交互。所有的交互方法都封装在 bridge.js 中。
在您的 index.html 或项目入口文件中,引入 bridge.js。
<!-- 引入通信桥梁 -->
<script src="./bridge.js"></script>
注意:本 SDK 内部会自动处理兼容性(优先检测 uni.webView,自动降级适配旧版 App URL 拦截),因此您不需要关心 App 是新版还是旧版,直接调用 API 即可。
在开发阶段(浏览器环境),App 环境不可用。请在 <head> 中引入 mock_flutter.js 来模拟 App 行为。
<head>
<!-- ... 其他标签 ... -->
<!-- 【仅开发环境引入】 模拟 App 通信环境 -->
<script src="./mock_flutter.js"></script>
<script src="./bridge.js"></script>
</head>
⚠️ 重要:在打包交付给 App 端集成前,请务必注释或删除对 mock_flutter.js 的引用。
所有的 API 都挂载在全局对象 window.Bridge 上。
通知 App 用户点击了返回按钮 (相当于浏览器的后退)。
Bridge.back();
强制关闭当前 Webview,返回 App 的原生首页。
Bridge.toHome();
当 API 返回 401 未授权时,调用此方法唤起 App 原生登录页。
Bridge.toLogin();
修改 App 顶部导航栏的标题。
Bridge.setTitle('我的页面标题');
调起 App 原生导航(支持高德、百度、腾讯地图)。
/**
* @param {number} latitude 纬度
* @param {number} longitude 经度
* @param {string} name 地点名称
*/
Bridge.openMap(36.666, 117.123, '济南奥体中心');
跳转到 App 内的原生比赛详情页。
/**
* @param {string|number} id 活动ID (mcId)
* @param {string} type 活动类型 (默认 1)
*/
Bridge.openMatch(101, 1);
跳转到 App 内的原生多地图/活动列表页。
/**
* @param {string|number} id 关联ID (mapId)
* @param {string} mapName 地图名称
*/
Bridge.openActivityList(202, '奥体公园定向');
调起 App 的微信分享面板。
Bridge.shareWx({
title: '快来参加彩图奔跑!',
url: 'https://colormaprun.com/activity/123',
image: 'https://colormaprun.com/logo.png',
scene: 'session' // session: 好友, timeline: 朋友圈
});
Bridge.launchWxMini('gh_bea09156da8d', 'pages/index/index');
将 Base64 格式的图片保存到手机相册。
Bridge.saveImage('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...');
注意: 通常 H5 页面加载时 URL 会携带 Token。此方法主要用于特殊情况下的主动获取。
// 1. 注册回调
Bridge.onToken(function(token) {
console.log('收到 Token:', token);
// 使用 Token 发起 API 请求...
});
// 2. 发起获取请求
Bridge.getToken();
Q: 为什么 Bridge.back() 没有反应?
A: 请检查是否在浏览器环境中。如果在浏览器中,确保引入了 mock_flutter.js。如果在 App 中,请确认 App 的 WebView 能够响应 javascript:history.back() 或 uni.postMessage。
Q: 怎么判断当前是在 App 内?
A: 推荐通过 UserAgent 判断,或者尝试调用 Bridge.getToken() 看是否有回调。但在使用本 SDK 时,建议假设处于 App 环境编写代码,并在本地开启 Mock 进行调试。