分享到微信功能之与微信通信

最近在实现第三方应用分享到微信时,项目又提出:当用户单击微信分享对话框的分享或者取消按钮之后,APP能有相应的操作和提示。这里就需要用到微信的回调函数进行通信,从而接收微信的请求及返回值,这里用到的回调函数就是IWXAPIEventHandler。具体使用见下面的一张图片,这是来自微信官网的使用截图。

分享到微信功能之与微信通信

主要来讲就是:

第一:要在你的包名下新建wxapi目录,并在该目录下新建WXEntryActivity类,可以用该类实现IWXAPIEventHandler的回调函数。

第二:在WXEntryActivity类中通过WXAPIFactory工厂来产生实现IWXAPI接口的对象,在类里可注册实现IWXAPI接口的对象。另外还必须需调用handleIntent(getIntent(),实现IWXAPIEventHandler回调的对象),这样回调函数才会起作用。

第三:配置该activity的exported属性为true,也就是允许微信来调用这个activity。

具体可以参考官方demo的实现,可以在WXEntryActivity类中打log,在onCreate和IWXAPIEventHandler回调函数的onReq和onResq函数下打log,这样你就可以大致猜测出微信是怎样的调用机制。当用户单击分享或者取消按钮之后,微信将首先实例化WXEntryActivity类,这里会调用onCreate函数,实例化之后微信会调用回调函数的onResq()/onReq()方法。

当你看到这里,就会有些困惑,微信调用的类一定要是包名.wxapi下的WXEntryActivity类吗?不管怎么说,我试过了使用其他名称等方式,但都是不能正常使用。如果真是这样,对开发者而言就会有很多的不方便。比如你用的是fragment,那你怎么去回调?我这里采用的是透明的activity,并在回调函数中finish()该Activity。写到这我不得不吐槽下微信分享,为嘛事设计成这种鬼样!希望是我的理解是错误的,欢迎大家提出指正,代码将在后面补上。