这是笔者第二次接SDK,第一个是为游戏接的语音SDK。本以为微信SDK会同语音一般简单,后来折腾了半天,才知道微信SDK难多了。为避免各位有像我一样的SDK接入新手重蹈笔者的覆辙,特地写一篇博客。
本文涉及到的一些技术要求:C++,Java,JNI,还有一丢丢安卓的知识。当然,默认读者是cocos2dx引擎的使用者。首先需要先下载微信SDK并配置好环境。此步骤可参考:https://open.weixin.qq.com官方网站。
进入项目的安卓工程,笔者使用的是eclipse打开。找到org.cocos2dx.cpp包下面的AppActivity类,在其成员中添加如下代码:
其中api是微信SDK提供给我们用来调用分享的一些接口的对象。appid需要我们自己去申请,不懂的读者可以去上面笔者提供的官网去参考。在AppActivity的onCreate方法中,需要添加如下代码:
初始化api对象后,需要将appid注册到微信。因为笔者是团队开发,由于某些原因,笔者这一步骤被开发团队的伙伴给改动了。这导致后来笔者测试微信分享的时候,点击微信分享游戏就闪退,原因就是遗漏了此步骤。
接下来就开始介绍笔者添加分享的函数吧,直接上图。
笔者的这个函数,囊括了文字+图片+网页分享。着重注释了网页分享部分,图片部分亦类似,一般说来,大多分享对象都带有title和description两个属性。其他不懂的可以参考官方文档,还是笔者之前提到的参考网站。笔者对微信SDK的理解也是边看官方API文档,边自己理解,也无法注释的非常详细。
接下来在游戏中添加方法,实现C++调用Java代码,点击分享按钮时调用此方法即可:
重点就在JniHelper的getStaticMethodInfo函数上,此函数第一个参数:需要传入JniMethodIofo对象;第二个参数是要调用的方法所在的java类的完整包名,必须用“/”而不能使用“.”来间隔;第三个参数是方法名;第四个参数是“方法签名”,意思是告知将要调用的“OnWxShare”函数的参数类型,以及返回类型,这些也正是函数的要点。
前面可以看到“OnWxShare”拥有4个String类型的参数和一个boolean型的参数,并且其返回值为void。
在“方法签名”参数中,Ljava/lang/String;此签名表示一个String类型,因为“OnWxShare”有4个,因此此处写了4个Ljava/lang/String;注意,封号不能遗漏。最后一个Z签名表示boolean类型。方法参数签名需要在小括号里面完成,而括号外面的V表示void的返回类型。若读者需要其他类型可以自行百度JNI的相关知识。
学过Java的童鞋应该知道,String在Java中是对象类型,而不是基本类型。因此它才需要用Ljava/lang/String;来签名,只有当方法参数为对象类型时,才采用这种方式签名:L+“对象的完整包名”+封号隔开。若是基本类型变量则不需要,例如:如果上图的OnWxShare方法参数类型为4个int类型+1个boolean类型,则签名为“(IIIIZ)V”,I是int的签名。
当getStaticMethodInfo执行完毕后,若成功找到方法,则信息将保存在info里面,并且返回true。info的env属性可以通过CallStaticVoidMethod去调用“OnWxShare”方法。调用时,java的String类型会被JNI转换为jstring类型,也就是说现在CallStaticVoidMethod接受4个jstring类型参数和一个bool参数。
而C++的string不是jstring类型,因此需要通过NewStringUTF函数来将string转换为jstring,进行调用。如果读者不想转换,可以在java代码中全部使用基本类型,而不使用String等对象类型(String在Java中是对象类型)。因为基本类型不需要转换。
至此,只要创建我们的“微信分享”按钮,点击后调用此方法即可实现拉起微信,分享我们所要分享的了。