在之前的分销商城项目中,用到了微信分享的功能,在ios设备中出现了二次分享失败的问题。

所谓二次分享,就是A用户在公众号页面中分享一次后,B用户通过分享链接进入网页,再次分享。在安卓设备中,不存在二次分享失败的情况,这种情况目前只发现出现在ios设备中。

为什么安卓设备中不存在这个问题我在这里不进研究了,就ios的问题我做一下总结。

项目框架

本次项目使用的是vue框架,整体结构使用了vue-element-ui,路由模式为history。本次出现的问题可能是由于vue路由到知道,也可能是其他原因,记录下来以供参考。

问题分析

首先微信分享功能在ios设备和安卓设备中本来就存在区别,简单来说安卓设备需要使用当前页面获取签名,而ios设备不能使用当前页面获取签名,而应该是使用进入项目的第一个页面(其实也不全是如此)的地址。基于此情况,如果是ios设备的话,在跳转路由的时候获取了第一个页面的地址作为签名使用的地址。在第一次分享时这样是有效的,但是在分享链接进入项目后继续分享,则不能正常获取签名,造成这个问题的原因就是因为使用了错误的url。

深究原因以及解决方法

那么为什么第一次获取签名的时候没有问题,而第二次的时候就出现问题了呢?我根据项目和微信的特点来分析有两点原因:

1.微信在二次分享的时候,会在自定义的分享链接后加上参数表明此次分享是二次分享。增加的内容是from=groupmessage&isappinstalled=0这两个参数。在签名时这两个参数是不能使用的,所以将这两个参数去掉即可,由于项目中我还传递了其他参数,所以使用了以下方法解决。

        let userAgent = navigator.userAgent;let url = '';//判断是否是ios设备if (userAgent.includes('iPhone') || userAgent.includes('iPad')) {url = window.sessionStorage.getItem('originUrl')//判断是否存在from参数,如果存在,只保留&from之前的链接if(url.includes("&from")){url = url.split("&from")[0]}}else {url = location.href}

2.由于分享链接进入的第一个页面需要跳转到一个鉴权页面,所以在这时候获取签名的地址很有可能是鉴权页面的地址,而非首页面的地址,所以我尝试在二次分享的时候使用这个鉴权页面地址获取签名,结果是可行的。

首页跳转鉴权页面地址:

在鉴权页面获取地址存到缓存以备获取签名时使用。因为已经获取到首页面了,所以在这个鉴权页面判断已经保存的缓存中的首地址是否是是jump-index页面(本项目中这个页面只有二次分享时会使用到,所以用作标识)。

      let userAgent = navigator.userAgent;let winStorage = window.sessionStorage;if (userAgent.includes('iPhone') || userAgent.includes('iPad')) {//如果首页面是jump-index页面,那么将本页面保存到缓存中,替换首页面if(winStorage.originUrl.includes("jump-index")){sessionStorage.setItem('originUrl', location.href )  // 用于ios分享}}

总结

以上两个方面都是造成ios二次分享失败的原因,这两个部分都需要着重注意。造成问题得原因除了二次分享一定会出现的额外参数外,window.href方法重定向地址也是关键原因,应该是因为重定向了地址,所以导致需要使用重定向后的地址获取签名。

ios设备微信公众号网页二次分享问题总结相关推荐

  1. 微信公众号网页 H5 video 标签自动播放

    目录 微信公众号网页 H5 video 标签自动播放 问题描述 解决方案 微信公众号网页 H5 video 标签自动播放 环境:微信公众号网页 需求:H5 video 标签自动播放视频 video 标 ...

  2. uniapp开发微信公众号网页-微信JSSDK使用

    uniapp开发微信公众号网页-微信JSSDK使用 一. 安装jweixin-module 二. 新建js文件,把jssdk的接口简单封装,然后挂载到vue实例 1. 在js公共文件夹下创建wecha ...

  3. vue3+vant开发微信公众号网页爬坑不完全指北

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 前言 8月底的时候接到了一个微信公众号网页开发的任务, 在此之前我从没开发过微信公众号网页的项目, 心想这回又能学到新东西了, 然后又是移 ...

  4. 微信公众号无需二次登录_您无需两次解决问题-您需要一个设计系统

    微信公众号无需二次登录 重点 (Top highlight) The design system concept can be differently defined according to eac ...

  5. 微信公众号网页授权--前端获取code及用户信息(vue)

    前段时间开发微信公众号网页授权,虽然网上已经有很多关于这方面的博客或者教程,但是第一次开发还是遇到挺多坑的,以下分享一下我的踩坑填坑之路. 一.测试号相关配置 首先在你公司申请的测试号上配置好相关信息 ...

  6. 微信公众号网页授权--前端获取code及用户信息(vue)【简单详细版】

    嗨喽大家好,前段时间开发微信公众号网页授权,虽然网上已经有很多关于这方面的博客或者教程,但是第一次开发还是遇到挺多坑的,以下分享一下我的遇到的一些问题的见解,希望对你们有帮助. 一.测试号相关配置 首 ...

  7. 前端对接微信公众号网页开发流程,前期配置

    微信公众号网页开发,其实就是我们开发的h5网页需要放到微信浏览器环境中使用,但是需要对接公众号授权,授权之后可以获取到用户的个人信息,以及可以使用公众号提供的一些API,如:图片上传.图片预览.获取位 ...

  8. 前端对接微信公众号网页开发流程,授权对接

    前面讲到 前端对接微信公众号网页开发流程,前期配置,本篇文章主要详细介绍关于公众号的授权对接. 一.引入微信js-sdk 在需要调用 JS 接口的页面引入如下 JS 文件 http://res.wx. ...

  9. 微信公众号网页授权思路解析及具体代码

    微信公众号网页授权思路解析及具体代码 微信开发文档 实现方式也是两种: 1.静默授权登录 授权登录以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静 ...

最新文章

  1. 循环链表(约瑟夫环)的建立及C语言实现
  2. ORA-01722: invalid number
  3. java压缩zip文件中文乱码问题
  4. 【Python】Python实战从入门到精通之四 -- 教你使用Python中字典
  5. 【elasticsearch】 elasticsearch 写一致性
  6. dnf上海2服务器维护,DNF上海2出现大面积盗号并迅速蔓延请注意
  7. 凯尔卡C68全球版汽车电脑诊断仪
  8. 从ARM裸机看驱动之按键中断方式控制LED(二)
  9. 消息队列技术终结者(一)—通俗深刻地认识JMS(即Java Message Service)
  10. 用计算机计算勾股定理,勾股定理公式计算器(勾股定理计算工具)V2018.1.0 官方版...
  11. 【转载】蚁群算法原理及实现
  12. springboot中Excel文件导出
  13. canal同步mysql从库_canal.adapter 实现mysql数据库同步
  14. 云服务器系统一键安装,一键安装服务器系统
  15. 公司起名工具,有了它你就是半仙了
  16. java单词匹配算法_前端学数据结构与算法(八): 单词前缀匹配神器-Trie树的实现及其应用...
  17. 定时器配置及输出PWM原理
  18. ACM训练方法_该我自己检讨了_By LCY
  19. 2013最新申请百度贴吧吧主的方法和规则
  20. 枚举 互斥 和标签

热门文章

  1. vuepress文档服务器,VuePress超详细简单教程
  2. vi文本编辑器中复制,剪切,黏贴与删除及字符的查找与替换
  3. 卷积神经网络之优化参数(人马分类)
  4. 使用css3实现翻书效果(一)
  5. TG Pro for Mac(硬度温度检测工具)
  6. set-valued function called in context that cannot accept a set
  7. Linux Android生成和应用Patch文件
  8. 第二届腾讯Light·公益创新挑战赛启动,三大赛题聚焦可持续发展社会价值
  9. VulKan视频编解码: NVIDIA
  10. 三星Samsung CLX-6260ND 驱动