不自重者,取辱。不自长者,取祸。不自满者,受益。不自足者,博闻。
【再公告】受影响的WeixinApi用户请更新 进入全屏
line

一、Api升级背景

接上一个公告,还不了解背景的,最好先去看看,别问我太多问题,Thx。 当然,也可以去看看zxlie/WeixinApi上大家的讨论,虽然看起来都很慌乱,但是也都看看吧,反正本次微信官方整这事儿略微粗暴了点儿!


既然如此,咱也不能一直等着官方恢复,何况人家是否会恢复咱也不知道,为了解决点儿大家的难题,我还是花点儿时间,尽我所能帮大家升级一下吧!

二、哪些用户不用更新?

先把升级条件告诉大家:如果你的微信公众号分享本身没有受到本次微信调整的影响,请忽略本次WeixinApi的升级!

三、本次WeixinApi的升级解决了什么问题?

优先解决微信Android客户端中的分享问题,包括:分享给好友、分享到朋友圈;这两个主要的分享,升级后可自定义分享内容、正常处理分享回调!


但是以前的async:true模式暂时不可用,先知道这个状况!

四、如何升级?

  • 1、到WeixinApi首页下载最新代码,包括本次新增的wxjs.6.02.js
  • 2、在代码中正确引用这两个js文件
  • 3、在原来的分享代码WeixinApi.ready最后加入这样一句钩子代码:
WeixinApi.ready(function(){
    // 以前的代码保存不变,保留着就行

    // 激活WeixinApi的hook功能
    Api.hook.enable(wxData,wxCallbacks);

    // iOS简单处理一下
    Api.hook.forIOS(wxData);
});
  • 4、发布你的代码,Android中应该已经可以用了,iOS也基本可以用了

关于iOS平台下的支持,请移步至 https://github.com/zxlie/WeixinApi#3%E5%AF%B9ios%E7%89%88%E6%9C%AC%E8%BF%9B%E8%A1%8C%E7%AE%80%E5%8D%95%E6%94%AF%E6%8C%81

五、我是如何对WeixinApi如何升级的

简单两句说一下吧:

  • 下载最新版的微信Android客户端 apk文件
  • 反编译apk,获取asserts/jsapi/wxjs.js
  • 在WeixinApi中对应增加WeixinApi.hook,包含三个方法:
    • WeixinApi.hook.enable() // 启用hook,并绑定分享内容和回调
    • WeixinApi.hook.message() // 提供给wxjs的钩子
    • WeixinApi.hook.callbacks() // 提供给wxjs的钩子
  • 调整wxjs,删除冗余代码_WXJS的定义
  • 在两个地方增加两个钩子:
    • 点击分享按钮执行分享的sendMessage方法中
    • 在魔术方法_call中注入分享回调的钩子
  • 在WeixinApi.ready中手动激活钩子:Api.hook.enable
  • 针对iOS平台,直接修改document.title实现分享的描述信息;在body第一个节点处插入待分享的图片;被二次打开时直接location到wxData.link实现链接被分享
  • 更新代码到最新版,It works!

六、写在最后

也许这篇文章以及新版的WeixinApi过不了多久就会被微信官方看到,也许又。。。没办法,还是上一篇文章中说到的,Hack始终是Hack,最终决定权还是在官方!TX发展牛逼了,它自己才是上帝,用户不是!

趣店(原趣分期)技术学院
重点关注技术架构、服务化、优秀工具、自动化平台、开发全流程一体化解决方案、新人培养、工程师进阶之道等方面
这里环境优雅、氛围年轻、主要是福利还多,还等什么?我们敞开技术的大门,欢迎各种工程师加入!

评论区域

line
  • pn-深圳 2015-03-20 11:06:52 回复
    “1、到WeixinApi首页下载最新代码,包括本次新增的wxjs.6.02.js”
    
    怎么下载没有这个js文件 wxjs.6.02.js
  • 嘻嘻 2015-01-08 11:56:22 回复
    回复 bluebug : 你好能否请教一下你的方法
    bluebug said:
    回复 Alien :
    ios下面的另外一种解决方案:
    用window.history.pushState或者replaceState将需要跳转的链接写到history,微信分享时就会使用这个链接
    限制:链接地址必须...
  • zx 2015-01-08 10:21:13 回复
    回复 tom : 微信部分的js必须放到加载页中是什么意思
    tom said:
    回复 madonglingyan : 同问
  • 请叫我蛋蛋哥 2015-01-07 17:12:42 回复
    公众号也不行的
  • js小白 2015-01-07 16:56:43 回复
    问了微信--还要等一段时间:目前进展是,最快这周,最晚下周跟所有合作伙伴见面。
  • xiaochong 2015-01-07 16:23:08 回复
    回复 tom : 我就是认证的服务号,怎么没有?昨天晚上发出来的是数据分析接口,不是分享接口!
    tom said:
    刚刚试验了一下,可以分享了,前天尝试还不可以的,虽然不清楚怎么回事,但还是感谢博主啦
  • Amoon 2015-01-07 12:01:23 回复
    回复 Alien : 描述信息 (但document.title被改了)、图片地址是可以
    分享链接就不行
    
    我的微訊是6.0.2, iOS 8.1
  • xiaotian_s 2015-01-07 11:47:17 回复
    分享一次后,再分享就无法调用了
  • tom 2015-01-07 11:31:16 回复
    刚刚试验了一下,可以分享了,前天尝试还不可以的,虽然不清楚怎么回事,但还是感谢博主啦
  • yicps 2015-01-07 11:24:05 回复
    官方内测API已经出来了,还多了调用麦克风,摄像头等接口。
    就是要先有认证服务号的授权。
  • bluebug 2015-01-07 10:30:05 回复
    回复 Alien : 
    ios下面的另外一种解决方案:
    用window.history.pushState或者replaceState将需要跳转的链接写到history,微信分享时就会使用这个链接
    限制:链接地址必须是相对路径,因此只能做同域跳转,但是可以考虑在服务器端加二次跳转
    Alien said:
    各位请升级WeixinApi到最新版,目前对IOS进行了简单支持,包括描述信息、图片地址、以及分享链接
  • Alien 2015-01-07 09:55:37 回复
    回复 功夫小熊 : 能分享就不错了,至于回调,暂时别指望了。没办法
    功夫小熊 said:
    回复 Alien : IOS新增的方法有回调函数这功能?
  • 功夫小熊 2015-01-07 09:31:27 回复
    回复 Alien : IOS新增的方法有回调函数这功能?
    Alien said:
    各位请升级WeixinApi到最新版,目前对IOS进行了简单支持,包括描述信息、图片地址、以及分享链接
  • 功夫小熊 2015-01-07 09:17:01 回复
    回复 Alien : IOS下现在升级后能动态修改那些分享链接、图片地址、描述信息?
    Alien said:
    各位请升级WeixinApi到最新版,目前对IOS进行了简单支持,包括描述信息、图片地址、以及分享链接
  • Alien 2015-01-06 21:53:46 回复
    各位请升级WeixinApi到最新版,目前对IOS进行了简单支持,包括描述信息、图片地址、以及分享链接
  • tom 2015-01-06 21:29:40 回复
    回复 sfzhi : 这是微信的bug,楼主已经在他的blog里面提到过了,可以搜索一下
    sfzhi said:
    Android下微信6.0.2版本,用新的方法,在分享时,若取消分享,也会执行confirm下的内容,是不是有问题啊?
  • sfzhi 2015-01-06 19:56:38 回复
    Android下微信6.0.2版本,用新的方法,在分享时,若取消分享,也会执行confirm下的内容,是不是有问题啊?
  • lzy100p 2015-01-06 17:16:46 回复
    iphone可以临时用这个:
    /**
     * 微信分享
     * @param {String} text	分享文案
     * @param {String} url	分享链接
     * @param {String} pic	分享地址
     */
    function lWeChatShare (text,url,pic)
    {
    	if(text!=undefined)
    	{
    		document.title = text;
    	}
    
    	if(pic!=undefined)
    	{
    		var shareImg = document.createElement("img")
    		shareImg.src=pic
    		shareImg.style.width=0+"px"
    		shareImg.style.opacity=0;
    		
    		document.body.insertBefore(shareImg,document.body.childNodes[0])
    	}
    
    	if(url!=undefined)
    	{
    		var sUrl = location.search;
    		//获取url中"?"符后的字串
    		var theRequest = new Object();
    		if (sUrl.indexOf("?") != -1) {
    			var str = sUrl.substr(1);
    			strs = str.split("&");
    			for (var i = 0; i < strs.length; i++) {
    				theRequest[strs[i].split("=")[0]] = strs[i].split("=")[1];
    			}
    		}
    		if(theRequest.from!=undefined && theRequest.isappinstalled!=undefined)
    		{
    			window.location.href=url;
    			
    		}
    	}
    }
  • tom 2015-01-06 10:45:51 回复
    回复 madonglingyan : 同问
    madonglingyan said:
    回复 氺易 : 放到加载页是什么意思
  • redhat 2015-01-05 20:45:56 回复
    IOS 什么5S好用4和6不好用,我就纳闷了
  • 还有37条较早的评论...