基于IOS端微信分享失效的踩坑及解决方法

 更新时间:2018年01月09日 10:16:14   作者:kormondor  
下面小编就为大家分享一篇基于IOS端微信分享失效的踩坑及解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近的一个公众号是基于vue的spa应用,在接入微信分享和微信语音的时候出现了:在Android上一切正常,但是在ios端调用wx.config的时候总是失败,去翻了官方文档也并没有找到解决方案,最后在测试中发现是因为初始化的时候传入的URL的问题。具体过程如下:

微信config接口配置,官方文档如下:

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

官方明确给出SPA在每次url变化时进行调用,于是我们的最初代码如下:

// 此处在main.js中,在vue-router每次改变路由的时候去调用wx.config
router.beforeEach((to, from, next) => {
 let url =`www.example.com`;
 let getConfig = async function(url) {
  // res为后端接口中返回的config
  const res = await get_config(url);
  wx.config(res);
  console.log(res);
 };
})
 // 此部分为微信分享
 var config = {
  title: 'title', // 分享标题
  desc: 'desc', // 分享描述
  link: 'link', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  imgUrl: `image',
  success: function() {
   console.log(success)
  },
  cancel: function() {
    console.log(failf)
  }
 };
 wx.ready(() => {
  wx.onMenuShareAppMessage(config);
  wx.onMenuShareTimeline(config);
 });

上边的代码在安卓端运行时一切正常。

但是我们测试的时候在IOS端分享等功能全部失效,后来我们仔细排查,发现是在初始化config的问题,

我们发现在IOS端只需要在==网站根目录中初始化一次即可==,所以我们对代码进行了修改,如下:

1、先判断当前环境

//通过userAgent判断IOS环境
 let isIOS = function() {
  var isIphone = navigator.userAgent.includes('iPhone');
  var isIpad = navigator.userAgent.includes('iPad');
  return isIphone || isIpad;
 };

// 如果是IOS系统,则只在根路径初始化config
 if (isIOS()) {
  if (to.path === '/') {
   getConfig(url);
   next();
  } else {
   next();
  }
 } else {
  getConfig(url);
  next();
 }

最终我们的代码如下:

router.beforeEach((to, from, next) => {
 let url = `*****`;
 let getConfig = async function(url) {
  const res = await get_config(url);
  wx.config(res);
  console.log(res);
 };
 let isIOS = function() {
  var isIphone = navigator
   .userAgent
   .includes('iPhone');
  var isIpad = navigator
   .userAgent
   .includes('iPad');
  return isIphone || isIpad;
 };
 var config = {
  title: '*****', // 分享标题
  desc: '******', // 分享描述
  link: '***************', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  imgUrl: `*****`,
  type: 'link',
  dataUrl: '',
  success: function() {},
  cancel: function() {}
 };
 wx.ready(() => {
  wx.onMenuShareAppMessage(config);
  wx.onMenuShareTimeline(config);
 });
 if (isIOS()) {
  if (to.path === '/') {
   getConfig(url);
   next();
  } else {
   next();
  }
 } else {
  getConfig(url);
  next();
 }
});

“*”部分为开发者自定义内容

最坑爹的是微信文档并没有提及关于IOS初始化的问题(或者是我没有找到)。囧

通过如上修改以后,我们的公众号在IOS和android端的分享功能都可以正常的跑起来啦。

以上这篇基于IOS端微信分享失效的踩坑及解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • iOS 禁止按钮在一定时间内连续点击

    iOS 禁止按钮在一定时间内连续点击

    本文主要介绍了iOS中禁止按钮在一定时间内连续点击的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 简单讲解Objective-C的基本特性及其内存管理方式

    简单讲解Objective-C的基本特性及其内存管理方式

    这篇文章主要介绍了简单讲解Objective-C的基本特性及其内存管理方式,虽然Swift语言出现后iOS和Mac OS应用开发方面Objective-C正在成为过去时,但现有诸多项目仍然在使用,需要的朋友可以参考下
    2016-01-01
  • ios触屏事件指南

    ios触屏事件指南

    这篇文章主要给大家总结介绍了2种实现ios触屏事件的方法,简单实用,有需要的小伙伴可以参考下。
    2015-05-05
  • Objective-C实现身份证验证的方法示例

    Objective-C实现身份证验证的方法示例

    这篇文章主要给大家分享了Objective-C实现身份证验证的方法,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 如何使用IOS实现WIFI传输

    如何使用IOS实现WIFI传输

    这篇文章主要介绍了如何使用IOS实现WIFI传输,对局域网传输和HTTP感兴趣的同学,可以参考下
    2021-04-04
  • Observing KVO Key-Value基本使用原理示例详解

    Observing KVO Key-Value基本使用原理示例详解

    这篇文章主要为大家介绍了Observing KVO Key-Value基本使用原理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • IOS实现圆形图片效果的两种方法

    IOS实现圆形图片效果的两种方法

    这篇文章介绍在IOS中如何实现圆形图片,实现后的效果很赞,有需要的可以参考借鉴。
    2016-08-08
  • IO实现计算器功能

    IO实现计算器功能

    这篇文章主要为大家详细介绍了IOS基础之计算器的编写,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • iOS 实现多代理的方法及实例代码

    iOS 实现多代理的方法及实例代码

    这篇文章主要介绍了iOS 实现多代理的方法及实例代码的相关资料,需要的朋友可以参考下
    2016-10-10
  • iOS多线程实现多图下载功能

    iOS多线程实现多图下载功能

    这篇文章主要为大家详细介绍了iOS多线程实现多图下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03

最新评论