12-15日记录 Cordova 热更新后 微信回调的一个Bug

Cordova与前端的交互大概是这样,主要通过一个callbackId进行标识

self.commandDelegate sendPluginResult:commandResult callbackId:callbackId];

问题记录:在进行了热更新之后,微信分享到第三方,这个时候是有callbackId,然后回调的时候callbackId=nil.,交互无效。
因为其中涉及到热更新和Cordova插件的一些机制,而且是接别人的二手码,感觉这个bug出来的毫无头绪

断点看了下堆栈信息,发现这个函数走了俩次

这里写图片描述

这个就是Cordova初始化插件的一个函数。

这个时候我想到了是不是因为初始化了俩次微信插件的原因,然后我打印了下插件初始化和分享前后地址

0x174095180 //更新之前

0x17009cb10. // 更新完之后

0x17009cb10. //分享到第三方

0x174095180 //分享的回调

果然,罪魁祸首就是这,实例化了俩个微信插件, 分享的时候是A,A的callbackId是存在的,在onResp回调的函数里面就是B的地址了,所以就是nil了,发现了根源问题就好解决了。

因为我的根视图控制器继承的是 CDVViewController,所以根视图控制器调用init初始化的时候,插件也会初始化

我在更新完之后需要重新设置 root 界面,所以又初始化了一次根视图控制器,导致实例化了俩个插件。

解决办法:直接获取到一开始初始化的那个根视图控制器就行了,避免二次初始化。 用单例应该也是个解决办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值