H5接入浙里办导航功能适配三端实现方式

浙里办接入的H5应用,导航功能是实际场景当中经常会用到的,具体是通过唤起本机地图app去实现,比如高德地图,笔者现将适配浙里办三端容器环境的实现方式

【浙里办app】

浙里办app导航可使用ZWJSBridge.openLink去实现,具体实现伪代码如下:

const openUrl = `zwfw://openThirdMaplongitude=${dataObj.longitude}&latitude=${dataObj.latitude}&locationName=${dataObj.regAddr}`;
ZWJSBridge.openLink({
  url: openUrl,
}).then((result) => {
  console.log(result);
}).catch((error) => {
  console.log(error);
});

【浙里办支付宝小程序】

支付宝容器环境下想实现导航功能,需要支付宝H5 JSSDK的支持,可引入alipayjsapi.js,引入方式如下:

<!--Alipay JSAPI接入-->
<script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"></script>

/* 引入后需要初始化一下*/
<script type="text/javascript">
  function ready(callback) {
    // 如果jsbridge已经注入则直接调用
    if (window.AlipayJSBridge) {
      callback && callback();
    } else {
      // 如果没有注入则监听注入的事件
      document.addEventListener('AlipayJSBridgeReady', callback, false);
    }
  }
  ready(function () {
    console.log('AlipayBridge ready, 请在支付宝打开');
  });
</script>

具体功能实现伪代码如下:

/*ap对象是alipayjsapi.js里挂载到window上的,也可解构出来*/
const { ZWJSBridge, ap } = window;
const openLocation = () => {
    window.ap.openLocation({
      longitude: dataObj.longitude,
      latitude: dataObj.latitude,
      name: dataObj.entName,
      address: dataObj.regAddr,
    });
  };

【浙里办微信小程序】

支付宝没什么说的,微信导航对接需要后端配合根据appId,密钥生成signature,需要后端写接口,拿到数据塞进wx.config
另外,如果window.wx找不到可以用window.Jweixin去调微信的方法
微信容器环境下实现导航需要使用微信 JSSDK,可引入jweixin.js,引入方式可有两种,cdn或者 AMD/CMD 标准模块加载,建议采用第二种方式。

<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
或者
npm install weixin-js-sdk
import wx from 'weixin-js-sdk';
const wx = require('weixin-js-sdk')

具体功能实现伪代码如下:

/* excuteWxBridge方法在功能页面加载的时候就执行*/
const excuteWxBridge = () => {
    wx.config({
      debug: false,
      appId: '项目appId',
      timestamp: new Date().getTime(),
      nonceStr: uuid().toString().replace(/-/g, ''),
      signature: '项目的appKey代替签名参数',
      jsApiList: ['openLocation'],
    });
  };
  const wxOpenLocation = () => {
    wx.ready(function() {
      wx.openLocation({
        longitude: parseFloat(dataObj.longitude),
        latitude: parseFloat(dataObj.latitude),
        name: dataObj.entName,
        address: dataObj.regAddr,
      });
    });
  };

【导航入口适配以上三端】

可判断容器环境执行不同的导航事件即可,具体功能实现伪代码如下:

const bIsWeixinMini = window.navigator.userAgent.toLowerCase().includes('miniprogram/wx') || window.__wxjs_environment === 'miniprogram'

const navigationEvent = () => {
    const sUserAgent = window.navigator.userAgent.toLowerCase();
    const bIsDtDreamApp = sUserAgent.indexOf('dtdreamweb') > -1; 
    if (bIsDtDreamApp) {
      if(dataObj.longitude && dataObj.latitude){
        const openUrl = `zwfw://openThirdMap?longitude=${dataObj.longitude}&latitude=${dataObj.latitude}&locationName=${dataObj.regAddr}`;
        ZWJSBridge.openLink({ // 浙里办APP
          url: openUrl,
        }).then((result) => {
          console.log(result);
        }).catch((error) => {
          console.log(error);
        });
      }else{
        Toast.show({
          content: '获取当前位置失败,请重试',
        });
      }
    } else if(bIsWeixinMini){
      wxOpenLocation();  // 浙里办微信小程序
    } else{
      openLocation(); // 浙里办支付宝小程序
    }
  };

文章作者: xkloveme
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xkloveme !
评论
 上一篇
冥想入门指南 冥想入门指南
什么是冥想冥想是一种通过专注和调整呼吸来培养内心平静和注意力的实践。下面是一个简单的冥想入门级教程,包括气息吐纳的练习: 1.找一个安静舒适的地方:找一个安静的房间或户外环境,确保你不会被干扰。坐在一个舒适的姿势上,可以是躺下、盘腿坐或坐在
2023-06-07 xkloveme
下一篇 
移动、联通、电信光猫超级管理员账号密码.d 移动、联通、电信光猫超级管理员账号密码.d
所谓“超级管理员账号密码”,顾名思义就是适合超级管理场景使用的账号密码,它不会限制光猫的设置,能够获取光猫超级管理员的权限,是不少极客和数码小白追求的内容,下面就给大家分享移动、联通、电信三大运营商的光猫超级管理员账号密码。账号密码中国移动
2023-03-23 xkloveme
  目录