From 5b3ff870ed6cd10b9ab6c7bcdbb299d749c07810 Mon Sep 17 00:00:00 2001 From: zhl Date: Mon, 21 Dec 2020 20:42:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84quick=E6=AF=8D=E5=8C=85?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 13 - .../main/java/com/hnjc/wjtx/MainActivity.java | 384 ++++++++++-------- app/src/main/res/values/strings.xml | 5 +- 4 files changed, 209 insertions(+), 195 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c2ab244..68e6fa4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { - applicationId "com.dca.wjtx" + applicationId "com.hnjc.wjtx" minSdkVersion 18 targetSdkVersion 26 versionCode 1 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8d9cc2a..275b788 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,19 +50,6 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/hnjc/wjtx/MainActivity.java b/app/src/main/java/com/hnjc/wjtx/MainActivity.java index 017a3f6..69cbbed 100755 --- a/app/src/main/java/com/hnjc/wjtx/MainActivity.java +++ b/app/src/main/java/com/hnjc/wjtx/MainActivity.java @@ -24,8 +24,10 @@ import android.widget.Toast; import com.hnjc.wjtx.util.AssetsUtil; import com.hnjc.wjtx.util.StorageUtil; import com.hnjc.wjtx.util.StringUtil; +import com.quicksdk.Extend; import com.quicksdk.QuickSDK; import com.quicksdk.Sdk; +import com.quicksdk.User; import com.quicksdk.entity.GameRoleInfo; import com.quicksdk.entity.OrderInfo; import com.quicksdk.entity.UserInfo; @@ -40,14 +42,12 @@ import org.egret.egretnativeandroid.EgretNativeAndroid; import org.json.JSONException; import org.json.JSONObject; -import java.util.UUID; - //Android项目发布设置详见doc目录下的README_ANDROID.md public class MainActivity extends Activity { private final String TAG = "MainActivity"; - private final String PRODUCT_CODE = "53944027057769834819388076876412"; - private final String PRODUCT_KEY = "70611892"; + private final String PRODUCT_CODE = "00625148882440283287987477259719"; + private final String PRODUCT_KEY = "87149628"; private EgretNativeAndroid nativeAndroid; private ImageView launchScreenImageView = null; private FrameLayout rootLayout = null; @@ -78,7 +78,7 @@ public class MainActivity extends Activity { nativeAndroid.config.preloadPath = preloadPath; setExternalInterfaces(); - + if (!nativeAndroid.initialize(gameUrl)) { Toast.makeText(this, "Initialize native failed.", Toast.LENGTH_LONG).show(); @@ -99,8 +99,8 @@ public class MainActivity extends Activity { if ((ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) || (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) { // 没有 , 申请权限 权限数组 - ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE, - Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); + ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE, + Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } else { // 有 则执行初始化 // 设置通知,用于监听初始化,登录,注销,支付及退出功能的返回值(必接) @@ -110,21 +110,24 @@ public class MainActivity extends Activity { } } catch (Exception e) { // 异常 继续申请 - ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE, - Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); + ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE, + Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } com.quicksdk.Sdk.getInstance().onCreate(this); } + @Override protected void onStart() { super.onStart(); com.quicksdk.Sdk.getInstance().onStart(this); } + @Override protected void onRestart() { super.onRestart(); com.quicksdk.Sdk.getInstance().onRestart(this); } + @Override protected void onPause() { super.onPause(); @@ -144,16 +147,19 @@ public class MainActivity extends Activity { super.onStop(); com.quicksdk.Sdk.getInstance().onStop(this); } + @Override protected void onDestroy() { super.onDestroy(); com.quicksdk.Sdk.getInstance().onDestroy(this); } + @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); com.quicksdk.Sdk.getInstance().onNewIntent(intent); } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -195,14 +201,13 @@ public class MainActivity extends Activity { }); nativeAndroid.setExternalInterface("setLocalStorage", message -> { Log.d(TAG, "setLocalStorage: " + message); - try{ + try { JSONObject jsonObject = new JSONObject(message); String key = jsonObject.getString("key"); String val = jsonObject.getString("val"); SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); StorageUtil.writeString(sharedPref, key, val); - } - catch (JSONException e) { + } catch (JSONException e) { Log.e(TAG, " onState message failed to analyze"); } @@ -247,12 +252,11 @@ public class MainActivity extends Activity { }); nativeAndroid.setExternalInterface("@onState", message -> { Log.e(TAG, "Get @onState: " + message); - try{ + try { JSONObject jsonObject = new JSONObject(message); String state = jsonObject.getString("state"); handleStateEvent(state); - } - catch (JSONException e) { + } catch (JSONException e) { Log.e(TAG, " onState message failed to analyze"); } @@ -263,21 +267,10 @@ public class MainActivity extends Activity { try { JSONObject jsonObject = new JSONObject(message); - String cpOrderId = jsonObject.getString("orderId"); - String productCode = jsonObject.getString("productCode"); - int count = jsonObject.getInt("count"); - //TODO: 平台的支付 - JSONObject obj = new JSONObject(); - try { - obj.put("errcode", 0); - obj.put("errmsg", ""); - nativeAndroid.callExternalInterface("payResult", obj.toString()); - } catch (JSONException e) { - e.printStackTrace(); - } + pay(jsonObject); } catch (JSONException e) { e.printStackTrace(); - } catch ( Exception e ) { + } catch (Exception e) { e.printStackTrace(); } }); @@ -298,6 +291,35 @@ public class MainActivity extends Activity { */ nativeAndroid.setExternalInterface("reportRoleInfo", message -> { Log.i(TAG, "Get reportRoleInfo: " + message); + try { + JSONObject data = new JSONObject(message); + GameRoleInfo roleInfo = new GameRoleInfo(); + roleInfo.setServerID(data.getString("serverId"));//数字字符串,不能含有中文字符 + roleInfo.setServerName(data.getString("serverName")); + roleInfo.setGameRoleName(data.getString("userRoleName")); + roleInfo.setGameRoleID(data.getString("userRoleId")); + roleInfo.setGameBalance(data.getString("userRoleBalance")); + roleInfo.setVipLevel(data.getString("vipLevel")); //设置当前用户vip等级,必须为数字整型字符串,请勿传"vip1"等类似字符串 + roleInfo.setGameUserLevel(data.getString("userRoleLevel")); //设置游戏角色等级 + roleInfo.setPartyName(data.getString("partyName"));//设置帮派名称 + roleInfo.setRoleCreateTime(data.getString("roleCreateTime")); //UC,当乐与1881,TT渠道必传,值为10位数时间戳 + roleInfo.setPartyId(data.getString("partyId")); //360渠道参数,设置帮派id,必须为整型字符串 + roleInfo.setGameRoleGender(data.getString("gameRoleGender"));//360渠道参数 + roleInfo.setGameRolePower(data.getString("gameRolePower")); //360,TT语音渠道参数,设置角色战力,必须为整型字符串 + roleInfo.setPartyRoleId("无"); //360渠道参数,设置角色在帮派中的id + roleInfo.setPartyRoleName("无"); //360渠道参数,设置角色在帮派中的名称 + roleInfo.setProfessionId("0"); //360渠道参数,设置角色职业id,必须为整型字符串 + roleInfo.setProfession(data.getString("job")); //360渠道参数,设置角色职业名称 + roleInfo.setFriendlist("无"); //360渠道参数,设置好友关系列表,格式请参考:http://open.quicksdk.net/help/detail/aid/190 +// 创建角色 + if (data.getBoolean("isCreateRole")) { + User.getInstance().setGameRoleInfo(MainActivity.this, roleInfo, true); + } else { + User.getInstance().setGameRoleInfo(MainActivity.this, roleInfo, false); + } + } catch (JSONException e) { + Log.e(TAG, " onState message failed to analyze"); + } }); } @@ -312,6 +334,7 @@ public class MainActivity extends Activity { FrameLayout.LayoutParams.MATCH_PARENT); rootLayout.addView(launchScreenImageView, params); } + private void handleStateEvent(String state) { switch (state) { case "running": @@ -321,6 +344,7 @@ public class MainActivity extends Activity { Log.i(TAG, state); } } + private void hideLoadingView() { rootLayout.removeView(launchScreenImageView); Drawable drawable = launchScreenImageView.getDrawable(); @@ -343,32 +367,35 @@ public class MainActivity extends Activity { finish(); } } + /** * 支付 */ - private void pay() { + private void pay(JSONObject data) throws JSONException { GameRoleInfo roleInfo = new GameRoleInfo(); - roleInfo.setServerID("1");// 服务器ID,其值必须为数字字符串 - roleInfo.setServerName("火星服务器");// 服务器名称 - roleInfo.setGameRoleName("裁决之剑");// 角色名称 - roleInfo.setGameRoleID("1121121");// 角色ID - roleInfo.setGameUserLevel("12");// 等级 - roleInfo.setVipLevel("Vip4");// VIP等级 - roleInfo.setGameBalance("5000");// 角色现有金额 - roleInfo.setPartyName("");// 公会名字 + roleInfo.setServerID(data.getString("serverId"));// 服务器ID,其值必须为数字字符串 + roleInfo.setServerName(data.getString("userServer"));// 服务器名称 + roleInfo.setGameRoleName(data.getString("userRoleName"));// 角色名称 + roleInfo.setGameRoleID(data.getString("userRoleId"));// 角色ID + roleInfo.setGameUserLevel(data.getString("userLevel"));// 等级 + roleInfo.setVipLevel(data.getString("vipLevel"));// VIP等级 + roleInfo.setGameBalance(data.getString("diamond"));// 角色现有金额 + roleInfo.setPartyName(data.getString("camp"));// 公会名字 + roleInfo.setRoleCreateTime(data.getString("roleCreateTime")); OrderInfo orderInfo = new OrderInfo(); - orderInfo.setCpOrderID(UUID.randomUUID().toString().replace("-", ""));// 游戏订单号 - orderInfo.setGoodsName("元宝");// 产品名称 + orderInfo.setCpOrderID(data.getString("cpOrderNo"));// 游戏订单号 + orderInfo.setGoodsName(data.getString("subject"));// 产品名称 // orderInfo.setGoodsName("月卡"); - orderInfo.setCount(10);// 购买数量,如购买"10元宝"则传10 + orderInfo.setCount(data.getInt("count"));// 购买数量,如购买"10元宝"则传10 // orderInfo.setCount(1);// 购买数量,如购买"月卡"则传1 - orderInfo.setAmount(10); // 总金额(单位为元) - orderInfo.setGoodsID("101"); // 产品ID,用来识别购买的产品 - orderInfo.setExtrasParams("透传参数"); // 透传参数 - + orderInfo.setAmount(data.getDouble("amount")); // 总金额(单位为元) + orderInfo.setGoodsID(data.getString("goodsId")); // 产品ID,用来识别购买的产品 + orderInfo.setGoodsDesc(data.getString("desc")); + orderInfo.setExtrasParams(data.getString("extrasParams")); // 透传参数 com.quicksdk.Payment.getInstance().pay(MainActivity.this, orderInfo, roleInfo); } + /** * 退出 */ @@ -382,161 +409,162 @@ public class MainActivity extends Activity { (arg0, arg1) -> Sdk.getInstance().exit(MainActivity.this)).setNegativeButton("取消", null).show(); } } + /** * 设置通知,用于监听初始化,登录,注销,支付及退出功能的返回值 */ private void initQkNotifiers() { QuickSDK.getInstance() - // 1.设置初始化通知(必接) - .setInitNotifier(new InitNotifier() { + // 1.设置初始化通知(必接) + .setInitNotifier(new InitNotifier() { - @Override - public void onSuccess() { - Log.i(TAG, "初始化成功"); - } + @Override + public void onSuccess() { + Log.i(TAG, "初始化成功"); + } - @Override - public void onFailed(String message, String trace) { - Log.i(TAG, "初始化失败:" + message); - } - }) - // 2.设置登录通知(必接) - .setLoginNotifier(new LoginNotifier() { + @Override + public void onFailed(String message, String trace) { + Log.i(TAG, "初始化失败:" + message); + } + }) + // 2.设置登录通知(必接) + .setLoginNotifier(new LoginNotifier() { - @Override - public void onSuccess(UserInfo userInfo) { - if (userInfo != null) { - Log.i(TAG, "登陆成功" + "\n\r" + "UserID: " + userInfo.getUID() - + "\n\r" + "UserName: " + userInfo.getUserName() - + "\n\r" + "Token: " + userInfo.getToken() - + "\n\r" + "PlatformUid: " + userInfo.getPlatformUid() - + "\n\r" + "ChannelToken: " + userInfo.getChannelToken() - ); - - // 登录成功之后,进入游戏时,需要向渠道提交用户信息 - JSONObject obj = new JSONObject(); - try { - obj.put("openid", userInfo.getUID()); - obj.put("token", userInfo.getToken()); - obj.put("polySdkChannel", (MainActivity.this).getString(R.string.polySdkChannel)); - obj.put("polySdkSubchannel", (MainActivity.this).getString(R.string.polySdkSubchannel)); - - // 如果其他登陆过程中的错误, 则传入一个大于0的errorcode + @Override + public void onSuccess(UserInfo userInfo) { + if (userInfo != null) { + int polySdkSubchannel = Extend.getInstance().getChannelType(); + Log.i(TAG, "登陆成功" + "\n\r" + "UserID: " + userInfo.getUID() + + "\n\r" + "UserName: " + userInfo.getUserName() + + "\n\r" + "Token: " + userInfo.getToken() + + "\n\r" + "PlatformUid: " + userInfo.getPlatformUid() + + "\n\r" + "ChannelToken: " + userInfo.getChannelToken() + + "\n\r" + "Extend.getChannelType: " + polySdkSubchannel + ); + // 登录成功之后,进入游戏时,需要向渠道提交用户信息 + JSONObject obj = new JSONObject(); + try { + obj.put("openid", userInfo.getUID()); + obj.put("token", userInfo.getToken()); + obj.put("polySdkChannel", (MainActivity.this).getString(R.string.polySdkChannel)); + obj.put("polySdkSubchannel", polySdkSubchannel + ""); + // 如果其他登陆过程中的错误, 则传入一个大于0的errorcode // obj.put("errorcode", 1); - nativeAndroid.callExternalInterface("sendUidToJS", obj.toString()); - } catch (JSONException e) { - e.printStackTrace(); - nativeAndroid.callExternalInterface("loginCancel", ""); + nativeAndroid.callExternalInterface("sendUidToJS", obj.toString()); + } catch (JSONException e) { + e.printStackTrace(); + nativeAndroid.callExternalInterface("loginCancel", ""); + } } } - } - @Override - public void onCancel() { - Log.i(TAG, "取消登陆"); - nativeAndroid.callExternalInterface("loginCancel", ""); - } - - @Override - public void onFailed(final String message, String trace) { - Log.i(TAG, "登陆失败:" + message); - nativeAndroid.callExternalInterface("loginCancel", ""); - } - - }) - // 3.设置注销通知(必接) - .setLogoutNotifier(new LogoutNotifier() { - - @Override - public void onSuccess() { - Log.i(TAG, "注销成功"); - nativeAndroid.callExternalInterface("loginOut", ""); - } - - @Override - public void onFailed(String message, String trace) { - Log.i(TAG, "注销失败:" + message); - } - }) - // 4.设置切换账号通知(必接) - .setSwitchAccountNotifier(new SwitchAccountNotifier() { - - @Override - public void onSuccess(UserInfo userInfo) { - if (userInfo != null) { - Log.i(TAG, "切换账号成功" + "\n\r" + "UserID: " + userInfo.getUID() + "\n\r" + "UserName: " + userInfo.getUserName() + "\n\r" - + "Token: " + userInfo.getToken()); - nativeAndroid.callExternalInterface("changeAccount", ""); + @Override + public void onCancel() { + Log.i(TAG, "取消登陆"); + nativeAndroid.callExternalInterface("loginCancel", ""); } - } - @Override - public void onFailed(String message, String trace) { - Log.i(TAG, "切换账号失败:" + message); - } - - @Override - public void onCancel() { - Log.i(TAG, "取消切换账号"); - } - }) - // 5.设置支付通知(必接) - .setPayNotifier(new PayNotifier() { - - @Override - public void onSuccess(String sdkOrderID, String cpOrderID, String extrasParams) { - Log.i(TAG, "支付成功,sdkOrderID:" + sdkOrderID + ",cpOrderID:" + cpOrderID); - JSONObject obj = new JSONObject(); - try { - obj.put("errcode", 0); - obj.put("errmsg", ""); - nativeAndroid.callExternalInterface("payResult", obj.toString()); - } catch (JSONException e) { - e.printStackTrace(); + @Override + public void onFailed(final String message, String trace) { + Log.i(TAG, "登陆失败:" + message); + nativeAndroid.callExternalInterface("loginCancel", ""); } - } - @Override - public void onCancel(String cpOrderID) { - Log.i(TAG, "支付取消,cpOrderID:" + cpOrderID); - JSONObject obj = new JSONObject(); - try { - obj.put("errcode", 1); - obj.put("errmsg", "支付失败:" + "pay failed,cpOrderID:" + cpOrderID + ",message: 支付取消" ); - nativeAndroid.callExternalInterface("payResult", obj.toString()); - } catch (JSONException e) { - e.printStackTrace(); + }) + // 3.设置注销通知(必接) + .setLogoutNotifier(new LogoutNotifier() { + + @Override + public void onSuccess() { + Log.i(TAG, "注销成功"); + nativeAndroid.callExternalInterface("loginOut", ""); } - } - @Override - public void onFailed(String cpOrderID, String message, String trace) { - Log.i(TAG, "支付失败:" + "pay failed,cpOrderID:" + cpOrderID + ",message:" + message); - JSONObject obj = new JSONObject(); - try { - obj.put("errcode", 1); - obj.put("errmsg", "支付失败:" + "pay failed,cpOrderID:" + cpOrderID + ",message:" + message); - nativeAndroid.callExternalInterface("payResult", obj.toString()); - } catch (JSONException e) { - e.printStackTrace(); + @Override + public void onFailed(String message, String trace) { + Log.i(TAG, "注销失败:" + message); } - } - }) - // 6.设置退出通知(必接) - .setExitNotifier(new ExitNotifier() { + }) + // 4.设置切换账号通知(必接) + .setSwitchAccountNotifier(new SwitchAccountNotifier() { - @Override - public void onSuccess() { - // 进行游戏本身的退出操作,下面的finish()只是示例 - nativeAndroid.exitGame(); - finish(); - } + @Override + public void onSuccess(UserInfo userInfo) { + if (userInfo != null) { + Log.i(TAG, "切换账号成功" + "\n\r" + "UserID: " + userInfo.getUID() + "\n\r" + "UserName: " + userInfo.getUserName() + "\n\r" + + "Token: " + userInfo.getToken()); + nativeAndroid.callExternalInterface("changeAccount", ""); + } + } - @Override - public void onFailed(String message, String trace) { - Log.i(TAG, "退出失败:" + message); - } - }); + @Override + public void onFailed(String message, String trace) { + Log.i(TAG, "切换账号失败:" + message); + } + + @Override + public void onCancel() { + Log.i(TAG, "取消切换账号"); + } + }) + // 5.设置支付通知(必接) + .setPayNotifier(new PayNotifier() { + + @Override + public void onSuccess(String sdkOrderID, String cpOrderID, String extrasParams) { + Log.i(TAG, "支付成功,sdkOrderID:" + sdkOrderID + ",cpOrderID:" + cpOrderID); + JSONObject obj = new JSONObject(); + try { + obj.put("errcode", 0); + obj.put("errmsg", ""); + nativeAndroid.callExternalInterface("payResult", obj.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onCancel(String cpOrderID) { + Log.i(TAG, "支付取消,cpOrderID:" + cpOrderID); + JSONObject obj = new JSONObject(); + try { + obj.put("errcode", 1); + obj.put("errmsg", "支付失败:" + "pay failed,cpOrderID:" + cpOrderID + ",message: 支付取消"); + nativeAndroid.callExternalInterface("payResult", obj.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailed(String cpOrderID, String message, String trace) { + Log.i(TAG, "支付失败:" + "pay failed,cpOrderID:" + cpOrderID + ",message:" + message); + JSONObject obj = new JSONObject(); + try { + obj.put("errcode", 1); + obj.put("errmsg", "支付失败:" + "pay failed,cpOrderID:" + cpOrderID + ",message:" + message); + nativeAndroid.callExternalInterface("payResult", obj.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }) + // 6.设置退出通知(必接) + .setExitNotifier(new ExitNotifier() { + + @Override + public void onSuccess() { + // 进行游戏本身的退出操作,下面的finish()只是示例 + nativeAndroid.exitGame(); + finish(); + } + + @Override + public void onFailed(String message, String trace) { + Log.i(TAG, "退出失败:" + message); + } + }); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2a86ddb..a46b8f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,12 +3,11 @@ 下载游戏资源 进入游戏 preload - http://local/index.html?channel=8001 + http://local/index.html?channel=8004 1.0.0 load_back 获取游戏版本 正在更新游戏资源 正在解压游戏资源 - 8001 - 1700 + 8004