最近有一个需求是从app分享位置到微信,打开微信可以实现导航的功能,查询资料发现没有办法可以直接发送位置到微信,但是微信网页开发可以实现在微信内部用网页打开腾讯内置地图,进而实现导航的功能,所以决定通过分享H5到微信来解决问题。
思路:uniapp分享链接到微信,链接中带有经纬度和位置名称,在微信中打开链接,通过参数打开微信内置地图。

1、写H5页面(微信网页开发)

微信sdk使用说明文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
需要手机微信调试的可以引入vconsole.js,可以显示控制台:https://unpkg.com/vconsole@latest/dist/vconsole.min.js

<script> // VConsole 默认会挂载到 `window.VConsole` 上 var vConsole = new window.VConsole();
</script>
(1)在微信公众平台绑定安全域名,引入微信sdk。

具体步骤不详说,可看文档操作。

(2)通过 config 接口注入权限验证配置。

由于用到的查看位置wx.openLocation需要用到鉴权。同一个地址的网页只需注入一次就行,如果地址有变化,则需要重新注入权限验证配置。

wx.config({debug: true, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。appId: res.data.appId, // 必填,公众号的唯一标识timestamp: res.data.timestamp, // 必填,生成签名的时间戳nonceStr: res.data.nonceStr, // 必填,生成签名的随机串signature: res.data.signature,// 必填,签名jsApiList: ['openLocation'] // 必填,需要使用的 JS 接口列表,这里只用到了openLocation
});

其中appIdtimestampnonceStrsignature 都是通过传入当前网页的地址(window.location.href),调用后端接口的返回值。

(3)调用接口打开内置地图

由于我们是页面一加载就调用wx.openLocation接口,所以需要在wx.ready中调用。

wx.ready(function(){// config信息验证后会执行 ready 方法,所有接口调用都必须在 config 接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在 ready 函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在 ready 函数中。openLocation();
});wx.error(function(res){// config信息验证失败会执行 error 函数,如签名过期导致验证失败,具体错误信息可以打开 config 的debug模式查看,也可以在返回的 res 参数中查看,对于 SPA 可以在这里更新签名。
});
// 打开地图方法
function openLocation() {var latitude =  getQueryString("latitude");var longitude = getQueryString("longitude");var name = getQueryString("name");wx.openLocation({latitude: latitude, // 纬度,浮点数,范围为90 ~ -90longitude: longitude, // 经度,浮点数,范围为180 ~ -180name: name, // 位置名address: '', // 地址详情说明scale: 14, // 地图缩放级别,整型值,范围从1~28。默认为最大infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转});
}
// 截取地址参数
function getQueryString(name) {let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");let r = window.location.search.substr(1).match(reg);if (r != null) {return unescape(decodeURI(r[2]));return null;}
}
(4)查看功能大致完成,引入spin.js实现loading加载

接口返回慢的话,用户可能会看到比较长时间的白页,所以需要一个加载的loading。

@keyframes spinner-line-fade-more {0%, 100% { opacity: 0; /* minimum opacity */ }1% { opacity: 1; }
}@keyframes spinner-line-fade-quick {0%, 39%, 100% { opacity: 0.25; /* minimum opacity */ }40% { opacity: 1; }
}@keyframes spinner-line-fade-default {0%, 100% { opacity: 0.22; /* minimum opacity */ }1% { opacity: 1; }
}@keyframes spinner-line-shrink {0%, 25%, 100% {/* minimum scale and opacity */transform: scale(0.5);opacity: 0.25;}26% {transform: scale(1);opacity: 1;}
}
// 引入了spin.js
var opts = {           lines: 12, // 花瓣数目length: 8, // 花瓣长度width: 4, // 花瓣宽度radius: 8, // 花瓣距中心半径corners: 1, // 花瓣圆滑度 (0-1)rotate: 0, // 花瓣旋转角度direction: 1, // 花瓣旋转方向 1: 顺时针, -1: 逆时针color: '#666666', // 花瓣颜色speed: 1, // 花瓣旋转速度trail: 60, // 花瓣旋转时的拖影(百分比)shadow: false, // 花瓣是否显示阴影hwaccel: false, //spinner 是否启用硬件加速及高速旋转            className: 'spinner', // spinner css 样式名称zIndex: 2e9, // spinner的z轴 (默认是2000000000)top: '30%', // spinner 相对父容器Top定位 单位 pxleft: '50%', // spinner 相对父容器Left定位 单位 pxposition: 'fixed', // element positionprogress: true,      // show progress trackerprogressTop: 0,       // offset top for progress trackerprogressLeft: 0       // offset left for progress tracker
};
var target = document.getElementById('wrapper'); // loading的承载盒子,设置了宽100vw,高100传的div
var spinner = new Spin.Spinner(opts).spin(target); //创建loading,loading显示
// 关闭loading,在打开地图(openLocation)前调用
spinner.spin();
(5)待解决:地图返回后还是我们写的那个html空白页,用户需要再次返回才能回到微信,体验感不好。
2、uniapp分享
const weburl = baseUrl+'/wxLocation/index.html?latitude='+latitudes+"&longitude="+longitudes+"&name="+name
uni.share({provider: "weixin",scene: "WXSceneSession",type: 0,href: weburl, // 分享链接title: name, // 分享标题summary: "快去查看"+ name +"的位置吧!", //分享文字imageUrl: imageUrl,  //分享图标success: function (res) {console.log("success:" + JSON.stringify(res));},fail: function (err) {console.log("fail:" + JSON.stringify(err));}
});

uniapp分享位置到微信相关推荐

  1. uni-app分享小程序页面给微信好友;小程序分享无效原因;小程序分享失败原因;

    我的只是在html代码部分 使用 <button open-type="share" >发送</button> 点击按钮就可以将当前页面分享到微信好友 且打 ...

  2. uni-app分享小程序卡片给微信好友

    一.前言 最近有这样一个需求,使用APP将一个小程序的页面分享给微信好友,起初一脸问号,APP分享小程序的页面,两个不相干的东西怎么关联分享?于是乎抱着实现不了的心态在网上看帖子,最后终于在uni-a ...

  3. uniapp分享到微信流程

    1.首先配置manifest.json文件 appid: 是从微信开放平台申请的 ios平台通用链接(不开发ios可不填) 最好 最好 最好!!!! 自动生成 ,教程在此 2.直接上代码 (1)App ...

  4. uniapp分享到微信好友和朋友圈

    uniapp分享到微信好友和朋友圈 首先目前的微信小程序只支持页面中右上角三个点触发分享功能,页面按钮只能触发分享至微信好友的功能 <template><view class=&qu ...

  5. 微信分享位置原理的思考

    最近闲着无聊,一直在思考微信分享位置这个功能是怎么做的.网上搜索了很多也是没有结果. 然后在光论坛的时候,看楼主给了个例子,传送阵是http://www.devstore.cn/code/info/4 ...

  6. uniapp、uniCloud实现微信公众号自动查询淘宝京东优惠券制作过程

    uniapp.uniCloud实现微信公众号自动查询淘宝京东优惠券制作过程 微信公众号自动查询淘宝京东优惠券机器人制作教程.服务器通过uniapp提供的uniCloud云服务搭建,建议使用阿里云,不要 ...

  7. 文件在计算机系统储存具体位置,电脑微信的文件储存位置怎么打开

    电脑微信的文件储存位置怎么打开 腾讯视频/爱奇艺/优酷/外卖 充值4折起 微信是我们现在经常使用的社交软件之一,在电脑上也可以使用微信软件,接下来小编就教大家怎样打开微信软件的文件储存位置. 具体如下 ...

  8. uniapp 分享功能(app , 小程序)

    一.APP分享 1.APP分享内容到微信聊天页面 uni.share({provider:'weixin',//分享服务提供商(即weixin|qq|sinaweibo)scene:"WXS ...

  9. uniapp小程序唤醒微信支付

    uniapp小程序唤醒微信支付 示例如下 wxpay(e) {uni.getProvider({//获取支付类型service: "payment",//oauth 授权登录sha ...

  10. 【论文分享】基于微信小程序的快递取寄系统设计与实现

    [论文分享]基于微信小程序的快递取寄系统设计与实现 免责声明:本文章已收录至<电脑知识与技术>,仅供参考学习,切勿抄袭或他用,搬运请注明来源,谢谢各位小伙伴的配合. 文章编号:1009-3 ...

最新文章

  1. Jzoj4747 被粉碎的线段树
  2. Mysql隐藏命令_mysql常用命令整理
  3. Nacos源码系列——第三章(全网最经典的Nacos集群源码主线剖析)
  4. 填写各类表格时有时在多个选择前有小方框 在其中打勾
  5. Win7中开启Telnet命令
  6. IBM的大数据就是返朴归真
  7. VS2005 ATL WINDOWS服务感想
  8. linux用户不能su: This account is currently not available
  9. java中的後綴表達式_求Java堆栈,将中缀算术表达式转换成后缀表达式。
  10. javascript中打印对象显示[object object]_扒一扒JavaScript中不常见的一些object
  11. 教育统计与测量【1】
  12. 树莓派 ubuntu gpio_玩转GPIO之点亮三色信号灯(非树莓派)
  13. Intellij idea注册激活码(2017年2月15日亲测可用于最新版)
  14. 用阿里云商标注册流程步骤,以及有哪些商标延伸服务
  15. PowerDesigner工具栏消失恢复
  16. 贵州支教之第二天(11月8日)
  17. 常用数据库及默认端口
  18. 海光服务器型号,中科海光CPU的首次评测:基于AMD架构,覆盖桌面服务器端
  19. 粗糙集,邻域粗糙集与实域粗糙集概述
  20. Java API VIII

热门文章

  1. 用python算股票月涨幅_健谈5月价值投资精选和健谈10指数(附Python代码)
  2. open cv 不同大小图片,小图片替换到大图片中具体位置
  3. 改变命运从改变语言开始
  4. 出现这几个征兆,可能是主动脉堵塞的表现
  5. 产经新闻:公交WiFi这次能扛多久
  6. EMC | 静电第1部分基本概念
  7. PyCharm连接远程服务器配置过程
  8. 不忘初心,守护美好——中韩人寿开展“我为群众办实事”实践活动
  9. CAdUiPaletteSet创建后乱码 2023/10/17 下午11:25:07
  10. SELinux基本使用