vue-spa微信分享,在ios端,分享不成功的原因及解决办法

首先声明是vue的spa项目h5调用wxjssdk时发生的问题,

我们大多刚开始做微信分享时,就会按照微信官方文档上一步一步做,先从后端拿到微信初始化需要配置的数据,然后调用wx的config方法,wxconfig调用成功后,会一步执行

wx的ready方法,那么我们在自定义分享内容时,就是在ready方法后做的,当然也可以将配置自定义分享的内容写在ready方法外面。这些都是最基本的操作。

需要跟大家提个醒的是,要弄清楚config方法和ready方法的关系,只有正确配置config之后,wx会自动调用ready方法,注意这个是异步的,相当于ready是config的回调函数,只不过,这个ready是微信单独暴露出来的方法。

下面进入正题,我做分享时,在需要做分享的页面,都执行了以下步骤:

1、向后端获取微信需要配置信息(appid、签名什么的),要确保获取的信息正确,然后再配置config时,才不会配置失败。

2、config成功后,会调用ready方法,(可以将自定义分享的一些配置信息,当成一个回调函数传进这个方法内,一些异步的问题需要自己根据实际情况解决)

3、在ready方法执行好之后,将自定义分享的配置信息 让它执行

以上就是最基本的微信分享步骤,在安卓手机上没一点点问题,很正常,

但是到ios手机上,怎么都分享不出来,查了查百度,有一问网友和我遇到的问题分厂一样,看了看它的描述,和我的很类似。

在ios端,vue的spa项目,微信初始化只能在项目入口初始化一次,只能在项目入口初始化微信!,且只能初始化一次!,ios端!

那么,我现在需要将微信的初始化方法需要提到 项目的入口执行(因为只有在ios端有这个问题,所以我只针对了ios端做了调整,其它安卓还让它在页面内初始化微信),

接下来需要,整理一下思路,我在项目入口时,当时ios的微信环境时,让微信初始化一次,那么到页面内,ios端的微信环境就不需要初始化微信环境了(这个要注意),那么页面里面我们也需要做判断,如果是非ios的微信环境,就让微信直接初始化,按正常步骤执行就行。

说了这么多,vue页面的入口到底在哪?这里用到了路由守卫  from.path=='/'是,就认为他是项目入口

看实际代码:

router.beforeEach((to, from, next) => {
  if (tools.isIOS()) {//针对ios端 微信初始化
    if (from.path === '/') {//项目入口
      if(wxSharecfgList.includes(to.name)){//需要使用分享的页面
        let huiyiId=to.query.huiyiId;
        if(tools.isWeiXin()&&!tools.isPC()){//不是pc端并且是微信环境
          WXAPI.getWxConfig(function(){//config方法是写在一个单独的js文件里的,这是暴露出来的方法,具体的自己看情况编写就行
            store.commit("setWxReadyOk",false);
            store.commit("setWxReadyOk",true);//告诉页面其它地方 微信初始化完成
          },huiyiId);
        }
      } 
    }
  }
}

页面内也给出一个参考代码:

                   self.shareToWxFriend(self.personInfo.huiyiCn,self.personInfo.realName);//安卓环境下,先执行config再在ready方法中 自定义配置分享信息
                    self.pageInfoOk=true;//标记页面信息已经拿到
                    if(tools.isIOS()){//如果是ios端 设置微信分享配置信息   注意这里的微信config是在入口初始化的,下面只需要判断微信环境初始化成功再自定义分享内容就行了
                        if(self.pageInfoOk&&self.wxReadyOk){//页面数据拿到并且wx环境初始化成功
                            self.wxShareCfg(self.personInfo.huiyiCn,self.personInfo.realName)
                        }
                    }  

上面就是解决微信在ios端,分享失效的方法以及思路,当然 认真的朋友也注意到,我解决微信初始化和页面数据加载异步的解决方法,就是用两个变量,一个代表微信初始化成功,一个代表页面数据加载成功,这个判断需要在获取页面数据的异步方法中调用,也需要在微信初始化成功的异步方法中调用,因为我们不能保证那个先完成。

下面再来看一下,我是如何在页面监听 微信初始化成功的:

watch: {
        wxReadyOk:{
            handler(newVal){
                if(this.pageInfoOk&&newVal){//页面数据拿到并且wx环境初始化成功
                    this.wxShareCfg(this.personInfo.huiyiCn,this.personInfo.realName);
                }
            },
            immediate:true,
        }
    },
    computed: {
        wxReadyOk(){
            return this.$store.getters.getWxReadyOk;
        }
    },

好了,问题已解决,文章写的比较粗糙,但是如果真正遇到这个问题的人看到,肯定会有帮助。

原文地址:https://www.cnblogs.com/fqh123/p/12588973.html