1.做好微信开放平台的审核工作
第一步:创建自己的微信开放平台账号并且提交自己的应用等待审核
审核通过之后就会如上图所示,审核已通过。一般应用审核通过之后只会有微信分享和收藏的功能:
某些接口是要收费的,具体要看自己的需求了,再提交应用的时候有很重要的两点,第一就是包名,安卓程序唯一标识就是包名,也是安装在手机上的唯一标识,这样系统才会识别出来这是两种不同的应用。还有一个就是应用签名:把apk文件装在手机上用微信开放平台的签名检测工具,输入自己的包名就可以得出应用签名了,然后把这个签名提交到微信开放平台上。(这里有一点需要特别注意,到后面出现无法登陆微信的情况很有可能是本地签名和微信开放平台的签名不一致所导致的,导出自己的apk时,要注意需要用keystore文件来对apk进行签名,这样带有keystore文件的apk以后就可以用这个keystore来签名了,尽量不要用debug.keystore。在以后微信开放平台上面的应用签名也可以修改)
在eclipse里面打开这个窗口进行keystore的导入(首先要自己创建一个keystore文件):
选择keystore文件之后点击apply,然后ok就可以了。
2.编写本地代码
由于我的项目是Cocos项目,要想调用Java层的微信SDK接口必须在本地编写逻辑代码,然后借助Jni来调用Java层的代码:
- self.Button_login:addTouchEventListener(function ( sender,eventType )
- if eventType == ccui.TouchEventType.ended then
- print('==================登录 LoginScene:btnEvent()')
- self:lodingAnimation()
- game.anysdk:login_native()
- end
- end)
然后走到anysdk:login_native里面(也可以直接走到Jni里面)
- function AnySdk:login_native()
- local function LoginServer()
- local function callBack()
- MissionManager.getMission('login_mission','main_mission'):sendData(MDM_GR_LOGON,SUB_GP_LOGON_ACCOUNTS)
- end
- MissionManager.connect(LOGIN_SERVER_NAME,LOGIN_SERVER_IP,LOGIN_SERVER_PORT,callBack)
- end
-
- if device.platform == "android" or device.platform == "ios" then
- local access_token = cc.UserDefault:getInstance():getStringForKey("access_token", "")
- local openid = cc.UserDefault:getInstance():getStringForKey("openid", "")
- if access_token ~= "" and openid ~= "" then
- self:getWeixinInfo(access_token,openid,LoginServer)
- else
- JniFun:create():longinWX(APP_ID,AppSecret)
- end
- else
- --self:getWeixinInfo("", "", LoginServer)
- local function callBack()
- MissionManager.getMission('login_mission','main_mission'):sendData(MDM_GR_LOGON,SUB_GP_REGISTER_ACCOUNTS)
- end
- MissionManager.connect(LOGIN_SERVER_NAME,LOGIN_SERVER_IP,LOGIN_SERVER_PORT,callBack)
- end
- end
然后进入到JniFun:loginWX里面:
- #include "JniFun.h"
- #include "cocos2d.h"
-
- #include "CCLuaEngine.h"
-
- #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
- #include <Jni.h>
- #include "platform/android/jni/JniHelper.h"
- #include "jubaosdk/ShellApiJni.h"
- #endif
- #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS
- #include "IosHelper.h"
- #endif
-
- #define JAVA_CLASSNAME "com/wx/Native"
- using namespace cocos2d;
- void JniFun::longinWX(const char* APP_ID,const char* AppSecret)
- {
- #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
- JniMethodInfo minfo;
- bool isHave = JniHelper::getStaticMethodInfo(minfo,JAVA_CLASSNAME,"LoginWX","(Ljava/lang/String;Ljava/lang/String;)V");
- if (isHave)
- {
- jstring jAPP_ID = minfo.env->NewStringUTF(APP_ID);
- jstring jAppSecret = minfo.env->NewStringUTF(AppSecret);
- minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jAPP_ID,jAppSecret);
-
- minfo.env->DeleteLocalRef(jAPP_ID);
- minfo.env->DeleteLocalRef(jAppSecret);
- minfo.env->DeleteLocalRef(minfo.classID);
- cocos2d::log("JniFun call LoginWX over!");
- }
- else
- {
-
- cocos2d::log("JniFun call LoginWX error!");
- }
- #endif
- #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS
- cocos2d::log("IosHelper::sendAuthRequest!");
- IosHelper::sendAuthRequest();
- #endif
- }
在JniFun里面就用到了cocos封装好的JniHelper类,通过上面的代码才会真正调用到Java里面的微信API方法