SdkProject/channel/x7bt5/java/com/secondworld/sdk/BtGameApp.java
New file @@ -0,0 +1,15 @@ package com.secondworld.sdk; import android.app.Application; public class BtGameApp extends Application { @Override public void onCreate() { super.onCreate(); GameAppProxy.create(this, new BtGamePlatform()); GameActivity.registerProxy(BtGameMain.class);GameActivity.registerProxy(BtGameMain.class); } } SdkProject/gradle.properties
@@ -18,4 +18,4 @@ ## Automatically convert third-party libraries to use AndroidX android.enableJetifier=false #当前构建的渠道名称 CHANNEL_NAME=qkbt52 CHANNEL_NAME=x7bt5 SdkProject/library/build.gradle
@@ -32,12 +32,12 @@ def channelJavaFiles = getAllFiles(new ArrayList<File>(), "${channelPath}/java") android { compileSdkVersion 29 compileSdkVersion 30 buildToolsVersion "28.0.1" defaultConfig { minSdkVersion 21 targetSdkVersion 29 targetSdkVersion 30 versionCode 1 versionName "1.0" SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdRequestPermissionStart.java
@@ -1,6 +1,5 @@ package com.secondworld.sdk.command; import com.quicksdk.User; import com.secondworld.sdk.GameActivityProxy; import com.secondworld.sdk.PermissionManager; import com.secondworld.sdk.QuickSdkMgr; SdkProject/plugins/x7sm/deps.gradle
New file @@ -0,0 +1,3 @@ dependencies { } SdkProject/plugins/x7sm/java/com/secondworld/sdk/QuickSdkMgr.java
New file @@ -0,0 +1,244 @@ package com.secondworld.sdk; import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.widget.Toast; import com.secondworld.sdk.utils.CodeA2U; import com.secondworld.sdk.utils.LogUtil; import com.secondworld.sdk.utils.RequestCode; import com.smwl.smsdk.abstrat.SMInitListener; import com.smwl.smsdk.abstrat.SMLoginListener; import com.smwl.smsdk.abstrat.SMPayListener; import com.smwl.smsdk.app.SMPlatformManager; import com.smwl.smsdk.bean.PayInfo; import com.smwl.smsdk.bean.RoleInfo; import com.smwl.smsdk.bean.SMUserInfo; import com.unity3d.player.UnityPlayer; import com.secondworld.sdk.PlatformDiff; import org.json.JSONException; import org.json.JSONObject; public class QuickSdkMgr extends PlatformSdkMgr { public static QuickSdkMgr I = new QuickSdkMgr(); String productCode; String productKey; int REQUEST_RECORD_PERMISSION_SETTING = 110; private boolean hasPermissions(Activity activity) { return (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); } public void requestPermissions(Activity activity) { try { // check权限 if (!hasPermissions(activity)) { // 没有则申请权限 ActivityCompat.requestPermissions(activity, new String[]{ Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); } else { QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); QuickSdkMgr.I.init(activity); } } catch (Exception e) { //QuickSdkMgr.I.init(activity); ActivityCompat.requestPermissions(activity, new String[]{ Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); } } public void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) { if (requestCode != RequestCode.QUICK) return; if (hasPermissions(activity)) { //申请成功 QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); QuickSdkMgr.I.init(activity); return; } final AlertDialog.Builder normalDialog = new AlertDialog.Builder(activity); normalDialog.setTitle("权限设置"); normalDialog.setMessage("游戏需要部分权限才能正常运行,请前往设置中打开电话权限与存储权限"); normalDialog.setPositiveButton("前往设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", activity.getPackageName(), null); intent.setData(uri); activity.startActivityForResult(intent, REQUEST_RECORD_PERMISSION_SETTING); dialog.dismiss(); } }); normalDialog.setNegativeButton("退出", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { GameAppProxy.appExit(); } }); // 显示 normalDialog.show(); } public void onActivityResult(Activity activity, int requestCode) { if (requestCode == REQUEST_RECORD_PERMISSION_SETTING) requestPermissions(activity); } public void init(Activity activity) { sdkInitState = SdkInitState.LOADING; } public void login() { switch (sdkInitState) { case FAILED: case UNKNOWN: { if (GameActivityProxy.I.activity == null) return; if (hasPermissions(GameActivityProxy.I.activity)) { Toast.makeText(GameAppProxy.app, "异常请重启游戏", Toast.LENGTH_LONG).show(); } break; } case SUCCEED: { GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { //用户登陆进入游戏和用户登出退出游戏的回调 SMPlatformManager.getInstance ().login (GameActivityProxy.I.activity, new SMLoginListener() { @Override public void onLoginSuccess(SMUserInfo loginInfo) { //客户端登录成功后,会通过如下方式得到token值,游戏客户端传token给自己服务器 LogUtil.e("SdkManager", "登录成功"); try { args.clear(); JSONObject info = new JSONObject(); info.put("token", loginInfo.getTokenkey()); args.put("info", info); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk, args); } catch (JSONException e) { e.printStackTrace(); LogUtil.e("SdkManager 登录成功", e); } } @Override public void onLoginFailed(String reason) { LogUtil.e("SdkManager", "登录失败:"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } @Override public void onLoginCancell(String reason) { //登陆取消 LogUtil.e("SdkManager", "登录失败:"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } @Override public void onLogoutSuccess() { //登出的前提是:已经登录成功了 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); } }); } }); break; } case LOADING: { Toast.makeText(GameAppProxy.app, "正在初始化中,请稍等!", Toast.LENGTH_LONG).show(); break; } } } public void setGameRoleInfo(RoleInfo roleInfo) { if (GameActivityProxy.I.activity == null) return; GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { SMPlatformManager.getInstance().smAfterChooseRoleSendInfo(GameActivityProxy.I.activity, roleInfo); } }); } public void pay(PayInfo payInfo) { if (GameActivityProxy.I.activity == null) return; GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { SMPlatformManager.getInstance ().Pay (GameActivityProxy.I.activity, payInfo, new SMPayListener() { @Override public void onPaySuccess(Object obj) { //支付成功 //sdkOrderID:quick订单号 cpOrderID:游戏订单号 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayOk); } @Override public void onPayFailed(Object obj) { //支付失败 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayFail); } @Override public void onPayCancell(Object obj) { //支付取消 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayCancel); } }); } }); } public void register(String productCode, String productKey) { this.productCode = productCode; this.productKey = productKey; //程序的入口执行初始化操作:一般放在游戏入口的activity里面用主线程调用 SMPlatformManager.getInstance().init(GameActivityProxy.I.activity, productCode, new SMInitListener() { @Override public void onSuccess() { sdkInitState = SdkInitState.SUCCEED; LogUtil.debug("SdkManager", "初始化成功"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk); } @Override public void onFail(String reason) { //初始化失败 sdkInitState = SdkInitState.FAILED; LogUtil.e("SdkManager", "初始化失败 msg:" + reason); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail); } }); } } SdkProject/plugins/x7sm/java/com/secondworld/sdk/SplashActivity.java
New file @@ -0,0 +1,30 @@ package com.secondworld.sdk; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.x7_act_splash); //修复切换到后台后点击图标重新启动的问题 if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { finish(); return; } new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, GameActivity.class); startActivity(intent); finish(); } }, 2000); } } SdkProject/plugins/x7sm/java/com/secondworld/sdk/command/CmdCreateRole.java
New file @@ -0,0 +1,30 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.QuickSdkMgr; import com.secondworld.sdk.utils.CodeU2A; import com.smwl.smsdk.bean.RoleInfo; import org.json.JSONObject; public class CmdCreateRole implements ICommand { @Override public int getCode() { return CodeU2A.CreateRole; } @Override public void process(JSONObject json) throws Exception { RoleInfo roleInfo = new RoleInfo(); roleInfo.setGame_area(json.getString("sid")); roleInfo.setGame_area_id(json.getString("sid")); roleInfo.setGame_guid(json.getString("game_guid")); roleInfo.setGame_role_id(json.getString("roleID")); roleInfo.setGame_role_name(json.getString("roleName").trim().replace(" ", "")); roleInfo.setRoleLevel(json.getString("level")); roleInfo.setRoleCE("-1"); roleInfo.setRoleStage("-1"); roleInfo.setRoleRechargeAmount("-1"); QuickSdkMgr.I.setGameRoleInfo(roleInfo); } } SdkProject/plugins/x7sm/java/com/secondworld/sdk/command/CmdPayFinished.java
New file @@ -0,0 +1,16 @@ 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/plugins/x7sm/java/com/secondworld/sdk/command/CmdPlatformLogin.java
New file @@ -0,0 +1,18 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.QuickSdkMgr; 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 { QuickSdkMgr.I.login(); } } SdkProject/plugins/x7sm/java/com/secondworld/sdk/command/CmdPlatformLogout.java
New file @@ -0,0 +1,19 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.QuickSdkMgr; import com.secondworld.sdk.utils.CodeU2A; import com.smwl.smsdk.app.SMPlatformManager; import org.json.JSONObject; public class CmdPlatformLogout implements ICommand { @Override public int getCode() { return CodeU2A.PlatformLogout; } @Override public void process(JSONObject json) throws Exception { SMPlatformManager.getInstance().smExitCurrent(); } } SdkProject/plugins/x7sm/java/com/secondworld/sdk/command/CmdPlatformPay.java
New file @@ -0,0 +1,46 @@ package com.secondworld.sdk.command; import android.widget.Toast; import com.secondworld.sdk.GameAppProxy; import com.secondworld.sdk.QuickSdkMgr; import com.secondworld.sdk.utils.CodeU2A; import com.smwl.smsdk.bean.PayInfo; import org.json.JSONObject; import java.net.URLEncoder; public class CmdPlatformPay implements ICommand { @Override public int getCode() { return CodeU2A.PlatformPay; } @Override public void process(JSONObject json) throws Exception { JSONObject extraData = new JSONObject(); extraData.put("appid", GameAppProxy.appId); extraData.put("cpinfo", json.getString("cpInfo")); extraData.put("cporderid", json.getString("orderId")); final PayInfo mPayInfo = new PayInfo (); mPayInfo.setExtends_info_data (URLEncoder.encode(extraData.toString(), "utf-8").replace(" ","")); mPayInfo.setGame_level (json.getString("level")); mPayInfo.setGame_role_id (json.getString("roleID")); mPayInfo.setGame_role_name (json.getString("roleName").trim().replace(" ", "")); // 测试账号:x7demo 密码:123456(选择小号1进入游戏) mPayInfo.setGame_area (json.getString("sid")); // 测试账号:x7demo 密码:123456(选择小号1进入游戏) 小号名称:小号1 :对应的game_guid:2018642 mPayInfo.setGame_guid (json.getString("game_guid")); mPayInfo.setGame_orderid (json.getString("orderId")); mPayInfo.setGame_price (String.format("%.2f", Float.parseFloat(json.getString("mount")))); mPayInfo.setNotify_id (json.getString("notify_id")); mPayInfo.setSubject (json.getString("title").replace(" ","")); mPayInfo.setGame_sign (json.getString("game_sign")); QuickSdkMgr.I.pay(mPayInfo); } } SdkProject/plugins/x7sm/java/com/secondworld/sdk/command/CmdRoleLevelUp.java
New file @@ -0,0 +1,29 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.QuickSdkMgr; import com.secondworld.sdk.utils.CodeU2A; import com.smwl.smsdk.bean.RoleInfo; import org.json.JSONObject; public class CmdRoleLevelUp implements ICommand { @Override public int getCode() { return CodeU2A.RoleLevelUp; } @Override public void process(JSONObject json) throws Exception { RoleInfo roleInfo = new RoleInfo(); roleInfo.setGame_area(json.getString("sid")); roleInfo.setGame_area_id(json.getString("sid")); roleInfo.setGame_guid(json.getString("game_guid")); roleInfo.setGame_role_id(json.getString("roleID")); roleInfo.setGame_role_name(json.getString("roleName").trim().replace(" ", "")); roleInfo.setRoleLevel(json.getString("level")); roleInfo.setRoleCE("-1"); roleInfo.setRoleStage("-1"); roleInfo.setRoleRechargeAmount("-1"); QuickSdkMgr.I.setGameRoleInfo(roleInfo); } } SdkProject/plugins/x7sm/java/com/secondworld/sdk/command/CmdRoleLogin.java
New file @@ -0,0 +1,29 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.QuickSdkMgr; import com.secondworld.sdk.utils.CodeU2A; import com.smwl.smsdk.bean.RoleInfo; import org.json.JSONObject; public class CmdRoleLogin implements ICommand { @Override public int getCode() { return CodeU2A.RoleLogin; } @Override public void process(JSONObject json) throws Exception { RoleInfo roleInfo = new RoleInfo(); roleInfo.setGame_area(json.getString("sid")); roleInfo.setGame_area_id(json.getString("sid")); roleInfo.setGame_guid(json.getString("game_guid")); roleInfo.setGame_role_id(json.getString("roleID")); roleInfo.setGame_role_name(json.getString("roleName").trim().replace(" ", "")); roleInfo.setRoleLevel(json.getString("level")); roleInfo.setRoleCE("-1"); roleInfo.setRoleStage("-1"); roleInfo.setRoleRechargeAmount("-1"); QuickSdkMgr.I.setGameRoleInfo(roleInfo); } }