Channel/Android/mlgtgame_jf/AndroidManifest.xml
New file @@ -0,0 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools"> <application android:allowNativeHeapPointerTagging="false"> <activity android:name="com.secondworld.sdk.GameActivity" android:theme="@style/UnityThemeSelector"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application> </manifest> Channel/Android/mlgtgame_jf/debug/libs/library-debug-mlgtgame_jf.aarBinary files differ
Channel/Android/mlgtgame_jf/deps.gradle
New file @@ -0,0 +1,3 @@ dependencies { } Channel/Android/mlgtgame_jf/release/libs/library-release-mlgtgame_jf.aarBinary files differ
SdkProject/channel/mlgtgame_jf/AndroidManifest.xml
New file @@ -0,0 +1,45 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.secondworld.sdk"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- GooglePay--> <uses-permission android:name="com.android.vending.BILLING" /> <application android:name=".GTGameApp" android:requestLegacyExternalStorage="true" android:usesCleartextTraffic="true" android:supportsPictureInPicture= "true" android:resizeableActivity="true" android:exported="false" android:extractNativeLibs="true" tools:replace="android:name"> <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> <meta-data android:name="JF_APPID" android:value="81445"/> <meta-data android:name="JF_APPKEY" android:value="538D489BFA57BAF0AF6401745118D6EA"/> <activity android:name="com.juefeng.sdk.juefengsdk.ui.activity.InitdataActivity" android:screenOrientation="sensorLandscape" /> </application> </manifest> SdkProject/channel/mlgtgame_jf/config.properties
New file @@ -0,0 +1 @@ PLUGINS= SdkProject/channel/mlgtgame_jf/deps.gradle
New file @@ -0,0 +1,3 @@ dependencies { } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/GTGameApp.java
New file @@ -0,0 +1,25 @@ package com.secondworld.sdk; import android.app.Application; public class GTGameApp extends Application { @Override public void onCreate() { super.onCreate(); GameAppProxy.create(this,new GTGamePlatform()); registerProxy(); } protected void registerProxy() { //主界面代理注册 GameActivity.registerProxy(GTGameMain.class); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/GTGameMain.java
New file @@ -0,0 +1,79 @@ package com.secondworld.sdk; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.view.KeyEvent; import androidx.annotation.NonNull; import com.juefeng.sdk.juefengsdk.JFSDK; public class GTGameMain extends GameActivityProxy { @Override public void onCreate(Activity activity) { super.onCreate(activity); // 初始化SDK MySdkMgr.I.OnCreate(activity); } @Override public void onStart() { super.onStart(); MySdkMgr.I.onStart(); } @Override public void onResume() { super.onResume(); MySdkMgr.I.onResume(); } @Override public void onPause() { super.onPause(); MySdkMgr.I.onPause(); } @Override public void onStop() { super.onPause(); MySdkMgr.I.onStop(); } @Override public void onDestroy() { super.onDestroy(); MySdkMgr.I.onDestroy(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { MySdkMgr.I.onActivityResult(requestCode, resultCode, data); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); MySdkMgr.I.onRequestPermissionsResult(requestCode, permissions, grantResults); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // 游戏调用自身的退出对话框,点击确定后,调用quick的exit接口 new AlertDialog.Builder(activity).setTitle("退出").setMessage("是否退出游戏?").setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { JFSDK.getInstance().exitLogin(GTGameMain.I.activity); } }).setNegativeButton("取消", null).show(); return true; } return super.onKeyDown(keyCode, event); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/GTGamePlatform.java
New file @@ -0,0 +1,9 @@ package com.secondworld.sdk; public class GTGamePlatform extends PlatformDiff { @Override public String platformName() { return "jfgtgame"; } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/MySdkMgr.java
New file @@ -0,0 +1,201 @@ package com.secondworld.sdk; import android.app.Activity; import android.content.Intent; import android.widget.Toast; import androidx.annotation.NonNull; import com.juefeng.sdk.juefengsdk.interf.SDKEventListener; import com.juefeng.sdk.juefengsdk.services.bean.CreatOrderInfo; import com.juefeng.sdk.juefengsdk.services.bean.JfOrderInfo; import com.juefeng.sdk.juefengsdk.services.bean.LoginErrorMsg; import com.juefeng.sdk.juefengsdk.services.bean.LogincallBack; import com.juefeng.sdk.juefengsdk.services.bean.PayFaildInfo; import com.juefeng.sdk.juefengsdk.services.bean.PaySuccessInfo; import com.secondworld.sdk.utils.CodeA2U; import com.secondworld.sdk.utils.LogUtil; import com.juefeng.sdk.juefengsdk.JFSDK; import org.json.JSONException; import org.json.JSONObject; public class MySdkMgr extends PlatformSdkMgr { private static final String TAG = MySdkMgr.class.getSimpleName(); public static MySdkMgr I = new MySdkMgr(); public static String uid; public static int viplevel; public void init(Activity activity) { sdkInitState = SdkInitState.LOADING; JFSDK.getInstance().init(activity, mSDKEventListener); } public void OnCreate(Activity activity) { JFSDK.getInstance().onCreate(GTGameMain.I.activity); init(activity); } public void onStart() { JFSDK.getInstance().onStart(GTGameMain.I.activity); } public void login() { switch (sdkInitState) { case FAILED: case UNKNOWN: { break; } case SUCCEED: { GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { JFSDK.getInstance().doLogin(GTGameMain.I.activity); } }); break; } case LOADING: { Toast.makeText(GameAppProxy.app, "Initializing", Toast.LENGTH_LONG).show(); break; } } } public void LogOutInitialize() { JFSDK.getInstance().logoutLogin(GTGameMain.I.activity); } public void pay(JfOrderInfo roleInfo) { JFSDK.getInstance().showPay(GTGameMain.I.activity, roleInfo); } public void onResume() { JFSDK.getInstance().onResume(GTGameMain.I.activity); } public void onPause() { JFSDK.getInstance().onPause(GTGameMain.I.activity); } public void onStop() { JFSDK.getInstance().onStop(GTGameMain.I.activity); } public void onDestroy() { //退出登录、退出游戏调用 JFSDK.getInstance().onDestroy(GTGameMain.I.activity); } public void onActivityResult(int requestCode, int resultCode, Intent data) { JFSDK.getInstance().onActivityResult(GTGameMain.I.activity, requestCode, resultCode, data); } public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { JFSDK.getInstance().onRequestPermissionsResult(GTGameMain.I.activity, requestCode, permissions, grantResults); } SDKEventListener mSDKEventListener = new SDKEventListener(){ @Override public void onLoginSuccess(LogincallBack logincallBack) {//登录成功 JFSDK.getInstance().showFloatView(GTGameMain.I.activity); try { args.clear(); JSONObject info = new JSONObject(); String channelID = "9996"; uid = logincallBack.userId; String account = uid + "@" + channelID; info.put("account", account); info.put("userName", uid); info.put("token", logincallBack.token); args.put("info", info); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk, args); } catch (JSONException e) { e.printStackTrace(); LogUtil.e("SdkManager 登录成功 但信息处理失败", e); } LogUtil.i(TAG, "login success,uid:" + uid + " userName:" + logincallBack.userName); } @Override public void onLoginFailed(LoginErrorMsg loginErrorMsg) {//登录失败 Toast.makeText(GameAppProxy.app, "login fail " + loginErrorMsg.getCode(), Toast.LENGTH_LONG).show(); //登录失败 LogUtil.e("SdkManager", "登录失败:" + loginErrorMsg.getErrorMsg()); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } @Override public void onInitSuccess(String desc,boolean isAutoLogin) { sdkInitState = SdkInitState.SUCCEED; LogUtil.debug("SdkManager", "初始化成功"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk); } @Override public void onInitFaild(String desc) { Toast.makeText(GameAppProxy.app, "init fail "+desc, Toast.LENGTH_LONG).show(); //初始化失败 sdkInitState = SdkInitState.FAILED; LogUtil.e("SdkManager", "初始化失败 msg:" + desc); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail); } @Override public void onPaySuccessCallback(PaySuccessInfo paySuccessInfo) { //支付成功 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayOk); } @Override public void onPayFaildCallback(PayFaildInfo payFaildInfo) { //支付失败 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayFail); } @Override public void onExit(String desc) {//退出成功 } @Override public void onCancleExit(String desc) { } @Override public void onCreatedOrder(CreatOrderInfo infoBean) { //订单创建成功 LogUtil.i("SdkManager", "订单创建成功"); } @Override public void onLogoutLogin(){//此处需回到游戏登录界面游戏方执行 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); } public void onSwitchAccountSuccess(LogincallBack login) { /*此回调接口是在当SDK内部有切换帐号的功能,且切换成功时会调用,游 戏方需要在这个回调接口中注销原来的角色数据,然后根据新的openid(参数 login中可以获取到)来重新加载角色数据;*/ UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); } @Override public void onGameSwitchAccount() { /*此接口是在游戏内有账号切换功能点击 调用 JFSDK.getInstance().switchAccount(MainActivity.this);后回调 游戏方账号切换逻辑需要在此回调中执行 * */ UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); } }; } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdCreateRole.java
New file @@ -0,0 +1,35 @@ package com.secondworld.sdk.command; import com.juefeng.sdk.juefengsdk.JFSDK; import com.juefeng.sdk.juefengsdk.services.bean.JfRoleInfo; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdCreateRole implements ICommand { @Override public int getCode() { return CodeU2A.CreateRole; } @Override public void process(JSONObject json) throws Exception { //上报角色信息 JfRoleInfo roleInfo = new JfRoleInfo(); roleInfo.setGameRoleLevel(json.getString("level")); roleInfo.setRoleId(json.getString("roleID")); roleInfo.setGameRolePower(json.getInt("fightPower")); roleInfo.setServerId(json.getString("sid")); roleInfo.setServerName(json.getString("serverName")); roleInfo.setRoleName(json.getString("roleName")); roleInfo.setExperience("1"); roleInfo.setPartyId(json.getString("familyID")); roleInfo.setPartyName(json.getString("familyName")); roleInfo.setRoleCreateTime(System.currentTimeMillis()); roleInfo.setVipLevel(json.getInt("vipLevel")); roleInfo.setType("1"); JFSDK.getInstance().syncInfo(roleInfo); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdOpenDashboard.java
New file @@ -0,0 +1,17 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdOpenDashboard implements ICommand{ @Override public int getCode() { return CodeU2A.OpenDashboard; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdPayFinished.java
New file @@ -0,0 +1,17 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPayFinished implements ICommand{ @Override public int getCode() { return CodeU2A.PayFinished; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdPlatformInit.java
New file @@ -0,0 +1,17 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformInit implements ICommand { @Override public int getCode() { return CodeU2A.PlatformInit; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdPlatformLogin.java
New file @@ -0,0 +1,18 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformLogin implements ICommand { @Override public int getCode() { return CodeU2A.PlatformLogin; } @Override public void process(JSONObject json) throws Exception { MySdkMgr.I.login(); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdPlatformLogout.java
New file @@ -0,0 +1,17 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformLogout implements ICommand { @Override public int getCode() { return CodeU2A.PlatformLogout; } @Override public void process(JSONObject json) throws Exception { MySdkMgr.I.LogOutInitialize(); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdPlatformPay.java
New file @@ -0,0 +1,37 @@ package com.secondworld.sdk.command; import com.juefeng.sdk.juefengsdk.services.bean.JfOrderInfo; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformPay implements ICommand { @Override public int getCode() { return CodeU2A.PlatformPay; } @Override public void process(JSONObject json) throws Exception { //channelID_cp订单id_区服id_游戏充值编号 长度不超过100 只能用下划线 JfOrderInfo roleInfo = new JfOrderInfo (); roleInfo.setLevel(json.getString("level")); roleInfo.setGoodsId(json.getString("cpInfo")); roleInfo.setGoodsName(json.getString("title")); roleInfo.setGoodsDes(json.getString("title")); roleInfo.setPrice(json.getString("mount")); roleInfo.setServerId(json.getString("sid")); roleInfo.setServerName(json.getString("serverName")); roleInfo.setRoleId(json.getString("roleID")); roleInfo.setRoleName(json.getString("roleName")); roleInfo.setVip(json.getString("vipLevel")); String attach = "9996_" + json.getString("orderId") + "_" + json.getString("sid") + "_" + json.getString("cpInfo"); roleInfo.setRemark(attach); roleInfo.setCpOrderId(json.getString("orderId")); MySdkMgr.I.pay(roleInfo); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdRoleLevelUp.java
New file @@ -0,0 +1,34 @@ package com.secondworld.sdk.command; import com.juefeng.sdk.juefengsdk.JFSDK; import com.juefeng.sdk.juefengsdk.services.bean.JfRoleInfo; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdRoleLevelUp implements ICommand { @Override public int getCode() { return CodeU2A.RoleLevelUp; } @Override public void process(JSONObject json) throws Exception { //上报角色信息 JfRoleInfo roleInfo = new JfRoleInfo(); roleInfo.setGameRoleLevel(json.getString("level")); roleInfo.setRoleId(json.getString("roleID")); roleInfo.setGameRolePower(json.getInt("fightPower")); roleInfo.setServerId(json.getString("sid")); roleInfo.setServerName(json.getString("serverName")); roleInfo.setRoleName(json.getString("roleName")); roleInfo.setExperience("1"); roleInfo.setPartyId(json.getString("familyID")); roleInfo.setPartyName(json.getString("familyName")); roleInfo.setVipLevel(json.getInt("vipLevel")); roleInfo.setType("3"); JFSDK.getInstance().syncInfo(roleInfo); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdRoleLogin.java
New file @@ -0,0 +1,34 @@ package com.secondworld.sdk.command; import com.juefeng.sdk.juefengsdk.JFSDK; import com.juefeng.sdk.juefengsdk.services.bean.JfRoleInfo; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdRoleLogin implements ICommand{ @Override public int getCode() { return CodeU2A.RoleLogin; } @Override public void process(JSONObject json) throws Exception { //上报角色信息 JfRoleInfo roleInfo = new JfRoleInfo(); roleInfo.setGameRoleLevel(json.getString("level")); roleInfo.setRoleId(json.getString("roleID")); roleInfo.setGameRolePower(json.getInt("fightPower")); roleInfo.setServerId(json.getString("sid")); roleInfo.setServerName(json.getString("serverName")); roleInfo.setRoleName(json.getString("roleName")); roleInfo.setExperience("1"); roleInfo.setPartyId(json.getString("familyID")); roleInfo.setPartyName(json.getString("familyName")); roleInfo.setVipLevel(json.getInt("vipLevel")); roleInfo.setType("2"); JFSDK.getInstance().syncInfo(roleInfo); } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdTrackingCloseVote.java
New file @@ -0,0 +1,15 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdTrackingCloseVote implements ICommand{ @Override public int getCode() { return CodeU2A.TrackingCloseVote; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/CmdTutorialFinish.java
New file @@ -0,0 +1,15 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdTutorialFinish implements ICommand{ @Override public int getCode() { return CodeU2A.TutorialFinish; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_jf/java/com/secondworld/sdk/command/GoToReview.java
New file @@ -0,0 +1,16 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class GoToReview implements ICommand { @Override public int getCode() { return CodeU2A.GoToReview; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_jf/res/xml/filepaths.xml
New file @@ -0,0 +1,13 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <paths> <root-path path="." name="root_path"/> <!-- <external-path name="external_storage_root" path="." /> <external-path name="external_storage_download" path="." /> <external-cache-path name="external_cache_path" path="." /> <external-files-path name="external_files_path" path="." /> <external-path name="external_path" path=". " /> <cache-path name="cache_path" path="." /> <files-path name="files_path" path="." />--> </paths> </resources> SdkProject/gradle.properties
@@ -18,4 +18,4 @@ ## Automatically convert third-party libraries to use AndroidX android.enableJetifier=true #当前构建的渠道名称 CHANNEL_NAME=mlgtgame_quickhw CHANNEL_NAME=mlgtgame_jf SdkProject/library/build.gradle
@@ -204,34 +204,6 @@ } //以下为必需依赖的库 implementation(name: 'quickgame_hw_2.3.3', ext: 'aar') //x.x.x为具体版本 implementation 'com.android.billingclient:billing:5.2.1'//google内购 implementation 'androidx.appcompat:appcompat:1.1.0' implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.10" //以下为选接库 //谷歌登录 implementation 'com.google.android.gms:play-services-auth:19.0.0' implementation 'com.facebook.android:facebook-android-sdk:16.0.0' implementation(name: 'sdklibrary-release', ext: 'aar') //x.x.x为具体版本 //firebase analytics implementation 'com.google.firebase:firebase-analytics:20.1.0' //appsflyer // implementation 'com.appsflyer:af-android-sdk:6.10.3' ////adjust // implementation 'com.adjust.sdk:adjust-android:4.31.1' ////adjust需要 // implementation 'com.google.android.gms:play-services-ads-identifier:17.0.1' ////appsflyer、adjust需要 // implementation 'com.android.installreferrer:installreferrer:2.2' ////Twitter登录 // implementation 'com.twitter.sdk.android:twitter:3.1.1' ////Line登录 // implementation (name: 'line_sdk_4.0.8',ext: 'aar') ////tapdb // implementation files('libs/libTapDB-3.3.0.aar') ////TalkingData // implementation files('libs/TalkingData_GP_GameAnalytics_V4.0.69.jar') } SdkProject/library/libs/alipaysdk_15.7.5.jarBinary files differ
SdkProject/library/libs/android-support-v4.jarBinary files differ
SdkProject/library/libs/gson-2.8.6.jarBinary files differ
SdkProject/library/libs/sdklibrary-release.aarBinary files differ
SdkProject/library/src/main/java/com/secondworld/sdk/GameActivity.java
@@ -10,7 +10,7 @@ import com.secondworld.sdk.utils.LogUtil; import com.secondworld.sdk.utils.WebViewUtil; import com.juefeng.sdk.juefengsdk.JFSDK; public class GameActivity extends UnityPlayerActivity { @@ -60,6 +60,8 @@ super.onRestart(); if (proxy != null) proxy.onRestart(); JFSDK.getInstance().onRestart(GTGameMain.I.activity); } @Override @@ -95,6 +97,7 @@ super.onNewIntent(intent); if (proxy != null) proxy.onNewIntent(intent); JFSDK.getInstance().onNewIntent(GTGameMain.I.activity, intent); } @Override @@ -118,4 +121,29 @@ boolean b = proxy.onKeyDown(keyCode, event); return b ? b : super.onKeyDown(keyCode, event); } @Override public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { if(event.getAction() == KeyEvent.ACTION_DOWN&&event.getRepeatCount() == 0) { JFSDK.getInstance().exitLogin(GTGameMain.I.activity); return true; } } return super.dispatchKeyEvent(event); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); JFSDK.getInstance().onWindowFocusChanged(hasFocus); } @Override public void onBackPressed() { super.onBackPressed(); JFSDK.getInstance().onBackPressed(GTGameMain.I.activity); } }