Cocos Creatorcocos 2dxCocos开发

Cocos2dx-lua项目中集成微信支付和微信登录遇到的坑!!

2017-12-12  本文已影响313人  行业碧油鸡

1,写c++调用方法

通过JNI获取java虚拟机,再获取当前程序的JNI环境,通过JNI环境获取需要调用的java类信息,再获取需要调用的java类中的函数信息。再通过JNI环境调用,使用类信息、函数信息,调用对应的java函数。

#include "cocos2d.h"
#include "config.h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"

记得引用JniHelper.h时,加上#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID),不然iOS版本会报错。

需要使用的接口如下:

static bool getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
static bool getMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);

例如我的方法:

.h 中声明
static void Pay_WXPay(const char *partnerid,const char *prepayid,const char *package,const char *noncestr,const char *timestamp,const char *sign);
.cpp中实现
void CMiscHelper::Pay_WXPay(const char *partnerid,const char *prepayid,const char *package,const char *noncestr,const char *timestamp,const char *sign)
{
    JniMethodInfo t;
    if(JniHelper::getStaticMethodInfo(t, (string(CLASS_NAME)+string("MiscHelper")).c_str(), "Pay_WXPay", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljav  a/lang/String;Ljava/lang/String;)V"))
        {
        jstring jpartnerid =  t.env->NewStringUTF(partnerid);
        jstring jprepayid =  t.env->NewStringUTF(prepayid);
        jstring jpackage =  t.env->NewStringUTF(package);
        jstring jnoncestr =  t.env->NewStringUTF(noncestr);
        jstring jtimestamp =  t.env->NewStringUTF(timestamp);
        jstring jsign =  t.env->NewStringUTF(sign);
        t.env->CallStaticVoidMethod(t.classID, t.methodID, jpartnerid,jprepayid,jpackage,jnoncestr,jtimestamp,jsign);
        t.env->DeleteLocalRef(jpartnerid);
        t.env->DeleteLocalRef(jprepayid);
        t.env->DeleteLocalRef(jpackage);
        t.env->DeleteLocalRef(jnoncestr);
        t.env->DeleteLocalRef(jtimestamp);
        t.env->DeleteLocalRef(jsign);
        t.env->DeleteLocalRef(t.classID);
        }
        }

类型中 Ljava/lang/String;分号一定要加上!!!

然后/tools/tolua/xxx python genbindings_xxx.py
绑定后自动生成文件默认在auto中,lua_jni_auto.cpp文件中如果没有添加安卓判断记得添加:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
否则会报错!!!

2,写java原生方法

1.应用中的包名(Mainfext.xml中的package)必须与后台配置的一致。
2.应用生成不能是debug包,必须是正式的签名包。这个签名必须与后台配置的一致,release包才能支付成功。
3.微信的方法编写是有约束的,你的项目包名是com.aaa.xxx,那么你就要在src下面先新建一个com.aaa.xxx.wxapi的包,微信登录在这个包下面创建一个WXEntryAvtivity的类;微信支付在这个包下面创建一个WXPayEntryAvtivity的类。

3,微信登录后黑屏闪屏问题

上一篇下一篇

猜你喜欢

热点阅读