#include "TapNative.h"
|
|
#include "Taptap.h"
|
|
// #define PLATFORM_ANDROID 1
|
|
#if PLATFORM_ANDROID
|
#include "Android/AndroidJNI.h"
|
#endif
|
|
#define JAVA_CLASS_NAME "com/leopard/taptap/TapNative"
|
|
TapNative::FTapNativeInitLoginOverEventHandle TapNative::TapNativeInitLoginOverEventHandle;
|
TapNative::FTapNativeLoginOverEventHandle TapNative::TapNativeLoginOverEventHandle;
|
TapNative::FTapNativeLoginFailEventHandle TapNative::TapNativeLoginFailEventHandle;
|
bool TapNative::CheckLogin()
|
{
|
#if PLATFORM_ANDROID
|
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
|
{
|
bool isOptional = false;
|
static jmethodID methodId = FJavaWrapper::FindMethod(Env,
|
FJavaWrapper::GameActivityClassID,
|
"CheckLogin",
|
"()Z", isOptional);
|
if (methodId == 0)
|
{
|
TAPLOG_D(TEXT("没找到方法CheckLogin"));
|
return false;
|
}
|
TAPLOG_D(TEXT("找到方法CheckLogin"));
|
|
return FJavaWrapper::CallBooleanMethod(Env, FJavaWrapper::GameActivityThis, methodId);
|
}
|
else
|
{
|
TAPLOG_D(TEXT("没找到JNIEnv"));
|
return false;
|
}
|
#else
|
TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
|
return true;
|
#endif
|
}
|
//(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
void TapNative::InitTapDB(FString clientId, FString clientToken, FString serverUrl, FString gameChannel,
|
FString gameVersion)
|
{
|
#if PLATFORM_ANDROID
|
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
|
{
|
bool isOptional = false;
|
static jmethodID methodId = FJavaWrapper::FindMethod(Env,
|
FJavaWrapper::GameActivityClassID,
|
"InitTapDB",
|
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", isOptional);
|
if (methodId == 0)
|
{
|
TAPLOG_D(TEXT("没找到方法InitTapDB"));
|
return;
|
}
|
TAPLOG_D(TEXT("找到方法InitTapDB"));
|
auto paramClientId = FJavaHelper::ToJavaString(Env,clientId);
|
auto paramClientToken = FJavaHelper::ToJavaString(Env,clientToken);
|
auto paramServerUrl = FJavaHelper::ToJavaString(Env,serverUrl);
|
auto paramGameChannel = FJavaHelper::ToJavaString(Env,gameChannel);
|
auto paramGameVersion = FJavaHelper::ToJavaString(Env,gameVersion);
|
return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId,
|
*paramClientId,
|
*paramClientToken,
|
*paramServerUrl,
|
*paramGameChannel,
|
*paramGameVersion);
|
}
|
else
|
{
|
TAPLOG_D(TEXT("没找到JNIEnv"));
|
}
|
#else
|
TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
|
#endif
|
}
|
|
void TapNative::InitLogin(FString clientId, FString clientToken, FString serverUrl)
|
{
|
#if PLATFORM_ANDROID
|
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
|
{
|
bool isOptional = false;
|
static jmethodID methodId = FJavaWrapper::FindMethod(Env,
|
FJavaWrapper::GameActivityClassID,
|
"InitLogin",
|
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", isOptional);
|
if (methodId == 0)
|
{
|
TAPLOG_D(TEXT("没找到方法InitLogin"));
|
return;
|
}
|
TAPLOG_D(TEXT("找到方法InitLogin"));
|
auto paramClientId = FJavaHelper::ToJavaString(Env,clientId);
|
auto paramClientToken = FJavaHelper::ToJavaString(Env,clientToken);
|
auto paramServerUrl = FJavaHelper::ToJavaString(Env,serverUrl);
|
return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId,
|
*paramClientId,
|
*paramClientToken,
|
*paramServerUrl);
|
}
|
else
|
{
|
TAPLOG_D(TEXT("没找到JNIEnv"));
|
}
|
#else
|
TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
|
TapNativeInitLoginOverEventHandle.Execute();
|
#endif
|
}
|
//Login
|
void TapNative::Login()
|
{
|
#if PLATFORM_ANDROID
|
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
|
{
|
bool isOptional = false;
|
static jmethodID methodId = FJavaWrapper::FindMethod(Env,
|
FJavaWrapper::GameActivityClassID,
|
"Login",
|
"()V", isOptional);
|
if (methodId == 0)
|
{
|
TAPLOG_D(TEXT("没找到方法Login"));
|
return;
|
}
|
TAPLOG_D(TEXT("找到方法Login"));
|
return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId);
|
}
|
else
|
{
|
TAPLOG_D(TEXT("没找到JNIEnv"));
|
}
|
#else
|
TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
|
TapNativeLoginOverEventHandle.Execute(FString(),FString(),FString());
|
#endif
|
}
|
|
FString TapNative::GetCurrentProfile()
|
{
|
#if PLATFORM_ANDROID
|
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
|
{
|
bool isOptional = false;
|
static jmethodID methodId = FJavaWrapper::FindMethod(Env,
|
FJavaWrapper::GameActivityClassID,
|
"GetCurrentProfile",
|
"()Ljava/lang/String;", isOptional);
|
if (methodId == 0)
|
{
|
TAPLOG_D(TEXT("没找到方法GetCurrentProfile"));
|
return FString();
|
}
|
TAPLOG_D(TEXT("找到方法GetCurrentProfile"));
|
jstring result = (jstring)FJavaWrapper::CallObjectMethod(Env, FJavaWrapper::GameActivityThis, methodId);
|
return FJavaHelper::FStringFromLocalRef(Env,result);
|
}
|
else
|
{
|
TAPLOG_D(TEXT("没找到JNIEnv"));
|
return FString();
|
}
|
#else
|
TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
|
return TEXT("{}");
|
#endif
|
}
|
//()V
|
void TapNative::Logout()
|
{
|
#if PLATFORM_ANDROID
|
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
|
{
|
bool isOptional = false;
|
static jmethodID methodId = FJavaWrapper::FindMethod(Env,
|
FJavaWrapper::GameActivityClassID,
|
"Logout",
|
"()V", isOptional);
|
if (methodId == 0)
|
{
|
TAPLOG_D(TEXT("没找到方法Logout"));
|
return;
|
}
|
TAPLOG_D(TEXT("找到方法Logout"));
|
return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId);
|
}
|
else
|
{
|
TAPLOG_D(TEXT("没找到JNIEnv"));
|
}
|
#else
|
TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
|
#endif
|
}
|
//(Ljava/lang/String;Ljava/lang/String;)V
|
void TapNative::TapDBTraceEvent(FString eventName, FString jsonObject)
|
{
|
#if PLATFORM_ANDROID
|
if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
|
{
|
bool isOptional = false;
|
static jmethodID methodId = FJavaWrapper::FindMethod(Env,
|
FJavaWrapper::GameActivityClassID,
|
"TapDBTraceEvent",
|
"(Ljava/lang/String;Ljava/lang/String;)V", isOptional);
|
if (methodId == 0)
|
{
|
TAPLOG_D(TEXT("没找到方法TapDBTraceEvent"));
|
return;
|
}
|
TAPLOG_D(TEXT("找到方法TapDBTraceEvent"));
|
auto paramEventName = FJavaHelper::ToJavaString(Env,eventName);
|
auto paramJsonObject = FJavaHelper::ToJavaString(Env,jsonObject);
|
return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId,
|
*paramEventName,
|
*paramJsonObject);
|
}
|
else
|
{
|
TAPLOG_D(TEXT("没找到JNIEnv"));
|
}
|
#else
|
TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
|
#endif
|
}
|
|
#if PLATFORM_ANDROID
|
JNI_METHOD void Java_com_leopard_taptap_TapNative_NativeInitLoginOver(
|
JNIEnv* jenv,
|
jclass cls)
|
{
|
TAPLOG_D(TEXT("登陆初始化完毕!!! "))
|
AsyncTask(ENamedThreads::GameThread, [=]()
|
{
|
TapNative::TapNativeInitLoginOverEventHandle.Execute();
|
});
|
}
|
//TapNativeLoginFailEventHandle
|
JNI_METHOD void Java_com_leopard_taptap_TapNative_NativeLoginFail(
|
JNIEnv* jenv,
|
jclass cls,
|
jstring debugeMessage,
|
jint errCode)
|
{
|
auto paramDebugMessage = FJavaHelper::FStringFromParam(jenv,debugeMessage);
|
|
TAPLOG_E(TEXT("登陆失败!!! %s,%d"))
|
AsyncTask(ENamedThreads::GameThread, [=]()
|
{
|
TapNative::TapNativeLoginFailEventHandle.Execute(paramDebugMessage,(int32)errCode);
|
});
|
}
|
|
JNI_METHOD void Java_com_leopard_taptap_TapNative_NativeLoginOver(
|
JNIEnv* jenv,
|
jclass cls,
|
jstring objectId,
|
jstring avatar,
|
jstring nickName)
|
{
|
auto paramObjectId = FJavaHelper::FStringFromParam(jenv,objectId);
|
auto paramAvatar = FJavaHelper::FStringFromParam(jenv,avatar);
|
auto paramNickName = FJavaHelper::FStringFromParam(jenv,nickName);
|
TAPLOG_D(TEXT("登陆完毕!!! %s,%s,%s"),*paramObjectId,*paramNickName,*paramAvatar)
|
AsyncTask(ENamedThreads::GameThread, [=]()
|
{
|
TapNative::TapNativeLoginOverEventHandle.Execute(paramObjectId,paramAvatar,paramNickName);
|
});
|
}
|
#endif
|