微信开放平台android接入笔记(unity3d)

来源:互联网 发布:防伪码制作软件 编辑:程序博客网 时间:2024/06/06 01:21

这两天接了下微信开放平台的sdk,总结下

首先,申请appId和appSecret这部分就不多讲了,上官网申请,审核通过就可以拿到了


然后就是下载sdk了 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN

有两个,一个旧的一个新的,一开始我下的是新的,就是下图打x的那个,发现数据结构跟文档说的不一样,原来是微信开放平台的文档没有更新(不得不吐槽一下微信开放平台的小伙伴),数据结构还是按旧的sdk来说的,所以我还是使用了旧的sdk进行开发,就是我打钩的那个


下载下来之后,解压,在lib目录下有两个jar包,我用的是框框那个



好了,这个jar包怎么用呢,首先我们是要给unity调用的,所以,得写一个中间件,就是作为unity和这个jar包接口之间的桥梁

用eclipse新建一个android工程,导入unity中关于编译Android程序的Jar包:classes.jar

project - Properties - Java Build Path - Add External JARs...

Jar包路径一般为:
%Unity安装目录%\Editor\DataPlaybackEngines\androidplayer\development\bin\classes.jar

然后让主Activity继承UnityPlayerActivty,因为我们在Unity中要获得这个主Activity然后进行一些接口调用,下面再说怎么调用

然后,在android工程中新建个libs目录,把上面的那个wechat-sdk-android-with-mta-1.3.4.jar丢进来

在onCreate中创建api对象



按照微信开放平台的文档,我们需要进行注册接口的调用,写个注册接口


再写个授权接口


其中SessionMgr.GenSession是自己写的一个产生一个字符串的方法,用来作为校验标志

sendReq给微信了,微信客户端就会收到我们发给它的信息,它会启动自己的Activity


在这个Activity,你点取消按钮或者确认登录按钮,微信的Activity都会new一个叫WXEntryActivity的东东然后调用onResp

这个WXEntryActivity必须放在名字叫做wxapi的文件下面,所以必须新建一个wxapi文件夹,并且Activity名字必须是WXEntryActivity,继承Activity并继承接口IWXAPIEventHandler


它也是在onCreate中通过WXAPIFactory创建一个api对象,然后调用接口handleIntent,这样才能收到微信的回调

下面就是onResp和onReq了

为了理解这两个回调,我画了个图


相信大家应该都能看懂,我们上面授权其实是调用了sendReq,微信启动了个Activity,点取消或者确认登录的时候呢,它就会回调到我们那个WXEntryActivity的onResp啦


回调回来的数据结构是个BaseResp,我们要根据type转化为对应的子类,由于我们是要传给unity的,说以得把数据转成json,写个单独的类专门转成json,然后写个专门的类作为unity的消息发送器,这样,就可以把数据传到unity啦

注意记得处理完执行finish,这样才能回到主Activity

例:

将数据结构转化为json的类


unity消息发送器


其他接口就不继续讲了,现在我们要把我们写的这些java代码打成jar包导入unity中

注意,只需要将java代码打成jar包即可,所以右键src->Export->Java->Jar file

打成jar包,比如叫SPHelper.jar

轮到unity工程部分啦,在unity工程Assets目录下新建Plugins/Android/libs目录

然后把SPHelper.jar丢进去,wechat-sdk-android-with-mta-1.3.4.jar也丢进去

然后是AndroidManifest,我们至少有两个Activity,一个是主Activity,一个是WXEntryActivity

<activity

android:name=".wxapi.WXEntryActivity"

android:label="@string/app_name"

android:exported="true"/>

记得添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

好了,可以开始unity的调用了,就是通过com.unity3d.player.UnityPlayer创建一个AndroidJavaClass对象: m_jc

然后通过这个对象GetStatic<AndroidJavaObject>("currentActivity")得到一个AndroidJavaObject对象: m_jo

然后我们就可以用这个m_jo.Call("RegistWXApi")跟m_jo.Call("ReqLogin")了,它就会调用我们上面的java接口了

回调回来是通过SendMessage到Unity的一个同名GameObject的方法上的,

所以我们搞个名字叫WXSdkAndroidConnector的GameObject,并且挂上脚本,脚本上有个OnRecvMsg的共有成员函数,参数是个字符串

这样我们就能接受到java那边的回调了,剩下的就是解析json跟一些逻辑处理了,这里就不展开了

先讲这么多吧,关于iOS部分的还没有研究,有机会再研究写总结,望共勉

如果关于Unity与Android之间的通信不是很清楚的,可以看我另外一篇博文:http://blog.csdn.net/linxinfa/article/details/72852155


原创粉丝点击