#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