diff --git a/app/build.gradle b/app/build.gradle index 08a4b4c..ebd7f27 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { - applicationId "com.hnjc.wjtx.mi" + applicationId "com.hnjc.wjtx.g.baidu" minSdkVersion 18 targetSdkVersion 28 versionCode 1 @@ -11,6 +11,7 @@ android { ndk { abiFilters 'armeabi-v7a' } + multiDexEnabled true } buildTypes { release { @@ -37,6 +38,8 @@ android { dependencies { implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs') implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:multidex:1.0.3' implementation 'com.android.volley:volley:1.1.1' implementation 'org.greenrobot:eventbus:3.2.0' } diff --git a/app/libs/BaiduGameSDK_v1.6.0.3.aar b/app/libs/BaiduGameSDK_v1.6.0.3.aar new file mode 100644 index 0000000..80b725a Binary files /dev/null and b/app/libs/BaiduGameSDK_v1.6.0.3.aar differ diff --git a/app/libs/msa_mdid_1.0.13.aar b/app/libs/msa_mdid_1.0.13.aar new file mode 100644 index 0000000..650e98d Binary files /dev/null and b/app/libs/msa_mdid_1.0.13.aar differ diff --git a/app/libs/onekey_login_ssolibrary-1.0.2.aar b/app/libs/onekey_login_ssolibrary-1.0.2.aar new file mode 100644 index 0000000..2985293 Binary files /dev/null and b/app/libs/onekey_login_ssolibrary-1.0.2.aar differ diff --git a/app/libs/pass-httpclient-1.4.1.2.aar b/app/libs/pass-httpclient-1.4.1.2.aar new file mode 100644 index 0000000..f44bd7c Binary files /dev/null and b/app/libs/pass-httpclient-1.4.1.2.aar differ diff --git a/app/libs/sapi-pass-core-9.1.5.aar b/app/libs/sapi-pass-core-9.1.5.aar new file mode 100644 index 0000000..920dbef Binary files /dev/null and b/app/libs/sapi-pass-core-9.1.5.aar differ diff --git a/app/libs/sapi-pass-enhanced-9.1.5.aar b/app/libs/sapi-pass-enhanced-9.1.5.aar new file mode 100644 index 0000000..0ba49e0 Binary files /dev/null and b/app/libs/sapi-pass-enhanced-9.1.5.aar differ diff --git a/app/libs/sofire-sdk-3.3.9.8.2.aar b/app/libs/sofire-sdk-3.3.9.8.2.aar new file mode 100644 index 0000000..e545dac Binary files /dev/null and b/app/libs/sofire-sdk-3.3.9.8.2.aar differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index f553295..fb35899 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -84,8 +84,34 @@ -keep class **.R$styleable{*;} -keep class com.hnjc.wjtx.mi.** { *; } --dontwarn com.hnjc.wjtx.mi.** +-dontwarn com.hnjc.wjtx.** -keep class org.egret.** { *; } --dontwarn org.egret.** \ No newline at end of file +-dontwarn org.egret.** + +-keepclassmembers public class * extends android.app.Activity { + public *; +} +-keep public class * extends android.support.v4.app.Fragment +-keep public class * extends android.app.Fragment + +# 支付第三方SDK + +-keep class com.tencent..** { + *; +} +-keep class com.alipay.** { + *; +} +-keep class com.baidu.** { + *; +} +-keep class com.bun.miitmdid.core.** {*;} + +-dontnote com.baidu.sapi2.** +-dontwarn com.squareup.picasso.** +-dontwarn android.support.test.** +-dontwarn com.baidu.sapi2.** +-dontwarn com.alipay.** +-dontwarn com.baidu.sofire.** \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d5882f7..17b94fd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,12 @@ + + @@ -10,12 +16,24 @@ + + + + + + + + + @@ -39,19 +57,26 @@ - - - - - - - - + + + - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/hnjc/wjtx/BaseActivity.java b/app/src/main/java/com/hnjc/wjtx/BaseActivity.java new file mode 100644 index 0000000..97c9874 --- /dev/null +++ b/app/src/main/java/com/hnjc/wjtx/BaseActivity.java @@ -0,0 +1,27 @@ +package com.hnjc.wjtx; + +import android.app.Activity; +import android.os.Bundle; + +import com.baidu.gamesdk.BDGameSDK; + +public class BaseActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onResume() { + super.onResume(); + BDGameSDK.onResume(this); // todo:【必接】Activity监听 + } + + @Override + protected void onPause() { + super.onPause(); + BDGameSDK.onPause(this); // todo:【必接】Activity监听 + } + +} diff --git a/app/src/main/java/com/hnjc/wjtx/JCApplication.java b/app/src/main/java/com/hnjc/wjtx/JCApplication.java index e040a76..bc59463 100644 --- a/app/src/main/java/com/hnjc/wjtx/JCApplication.java +++ b/app/src/main/java/com/hnjc/wjtx/JCApplication.java @@ -1,12 +1,14 @@ package com.hnjc.wjtx; -import android.app.Application; import android.util.Log; -public class JCApplication extends Application { +import androidx.multidex.MultiDexApplication; + +public class JCApplication extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); Log.i("JCApplication", "JCApplication onCreate"); + com.baidu.gamesdk.BDGameSDK.initApplication(this); } } diff --git a/app/src/main/java/com/hnjc/wjtx/LaunchActivity.java b/app/src/main/java/com/hnjc/wjtx/LaunchActivity.java index 1e23c84..9fcaf89 100644 --- a/app/src/main/java/com/hnjc/wjtx/LaunchActivity.java +++ b/app/src/main/java/com/hnjc/wjtx/LaunchActivity.java @@ -1,9 +1,6 @@ package com.hnjc.wjtx; -import android.Manifest; -import android.app.Activity; import android.content.Intent; -import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; @@ -11,7 +8,12 @@ import android.os.Message; import android.util.Log; import android.widget.ProgressBar; import android.widget.TextView; +import android.widget.Toast; +import com.baidu.gamesdk.BDGameSDK; +import com.baidu.gamesdk.BDGameSDKSetting; +import com.baidu.gamesdk.ResultCode; +import com.baidu.platformsdk.utils.PermissionUtils; import com.hnjc.wjtx.net.DownloadRunnable; import com.hnjc.wjtx.net.TaskInfo; import com.hnjc.wjtx.net.WebApi; @@ -23,8 +25,11 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.File; +import java.util.List; -public class LaunchActivity extends Activity { +import static com.baidu.platformsdk.utils.PermissionUtils.requestRuntimePermissions; + +public class LaunchActivity extends BaseActivity { private final String TAG = "LaunchActivity"; private final String ZERO_VERSION = "0"; private ProgressBar progressBar = null; @@ -53,7 +58,10 @@ public class LaunchActivity extends Activity { // 解压任务 private UnzipRunnable unzipRunnable; - private static final String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE}; + private static final String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE", + "android.permission.WRITE_EXTERNAL_STORAGE", + "android.permission.READ_PHONE_STATE" + }; private Handler handler = new Handler(new Handler.Callback() { @Override @@ -95,12 +103,23 @@ public class LaunchActivity extends Activity { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - int check = checkSelfPermission(permissions[0]); - if (check != PackageManager.PERMISSION_GRANTED) { - requestPermissions(permissions, 111); - } + requestRuntimePermissions(this, PERMISSIONS_STORAGE, + new PermissionUtils.PermissionListener() { + @Override + public void granted() { + // 权限申请通过 + initBDGameSDK(); + } + + @Override + public void denied(List deniedList) { + Toast.makeText(LaunchActivity.this, + "获取权限失败\n请在系统设置为应用添加权限", Toast.LENGTH_LONG).show(); + } + }); + } else { + initBDGameSDK(); } - compareVersions(); } /** @@ -309,5 +328,35 @@ public class LaunchActivity extends Activity { // 移除activity的移出场动画 overridePendingTransition(0, 0); } + @Override + public void onRequestPermissionsResult( + int requestCode, String[] permissions, int[] grantResults) { + PermissionUtils.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + private void initBDGameSDK() { // 初始化游戏SDK + BDGameSDKSetting mBDGameSDKSetting = new BDGameSDKSetting(); + mBDGameSDKSetting.setAppID(23031784); // APPID设置 + mBDGameSDKSetting.setAppKey("DX7iB9hUPlSWCzA13oinUzcR"); // APPKEY设置 + mBDGameSDKSetting.setMode(BDGameSDKSetting.SDKMode.ONLINE); // SDK模式默认为网游联网模式 + mBDGameSDKSetting.setEnableAds(false); // 广告开关 + mBDGameSDKSetting.setDomain(BDGameSDKSetting.Domain.RELEASE); // 设置为正式模式 + mBDGameSDKSetting.setOrientation(BDGameSDKSetting.Orientation.PORTRAIT); + + BDGameSDK.init(this, mBDGameSDKSetting, (resultCode, resultDesc, extraData) -> { + switch (resultCode) { + case ResultCode.INIT_SUCCESS: + compareVersions(); + break; + + case ResultCode.INIT_FAIL: + default: + Toast.makeText(LaunchActivity.this, "启动失败", + Toast.LENGTH_LONG).show(); + finish(); + // 初始化失败 + } + + }); + } } diff --git a/app/src/main/java/com/hnjc/wjtx/MainActivity.java b/app/src/main/java/com/hnjc/wjtx/MainActivity.java index f0740e0..0a95dd2 100755 --- a/app/src/main/java/com/hnjc/wjtx/MainActivity.java +++ b/app/src/main/java/com/hnjc/wjtx/MainActivity.java @@ -1,7 +1,5 @@ package com.hnjc.wjtx; -import android.app.Activity; -import android.app.AlertDialog; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; @@ -16,8 +14,10 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.Toast; +import com.baidu.gamesdk.BDGameSDK; +import com.baidu.gamesdk.ResultCode; +import com.baidu.platformsdk.PayOrderInfo; import com.hnjc.wjtx.util.AssetsUtil; -import com.hnjc.wjtx.util.IdUtil; import com.hnjc.wjtx.util.StorageUtil; import com.hnjc.wjtx.util.StringUtil; @@ -27,12 +27,13 @@ import org.json.JSONObject; //Android项目发布设置详见doc目录下的README_ANDROID.md -public class MainActivity extends Activity { +public class MainActivity extends BaseActivity { private final String TAG = "MainActivity"; private EgretNativeAndroid nativeAndroid; private ImageView launchScreenImageView = null; private FrameLayout rootLayout = null; private Vibrator vibrator; + private String uid; @Override @@ -69,6 +70,13 @@ public class MainActivity extends Activity { rootLayout = nativeAndroid.getRootFrameLayout(); showLoadingView(); vibrator = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE); + setSuspendWindowChangeAccountListener(); // 【必接】设置切换账号事件监听(个人中心界面切换账号) + + setSessionInvalidListener(); // 【选接】设置会话失效监听 + + BDGameSDK.showFloatView(this); // 【选接,建议接】显示悬浮窗 + + setAntiAddictionListener(); // todo:【必接】防沉迷相关设置 } @Override @@ -86,19 +94,10 @@ public class MainActivity extends Activity { @Override public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) { if (keyCode == KeyEvent.KEYCODE_BACK) { - //声明并初始化弹出对象 - AlertDialog.Builder builder=new AlertDialog.Builder(this); - builder.setTitle("提示:"); - builder.setMessage("是否退出"); - //设置确认按钮 - builder.setNegativeButton("确定", (dialog, which) -> { + BDGameSDK.gameExit(this, () -> { nativeAndroid.exitGame(); - finish();//退出程序 + finish(); }); - //设置取消按钮 - builder.setPositiveButton("取消",null); - //显示弹框 - builder.show(); return true; } else { return super.onKeyDown(keyCode, keyEvent); @@ -163,19 +162,7 @@ public class MainActivity extends Activity { Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); }); nativeAndroid.setExternalInterface("getUid", message -> { - //TODO: 平台的登陆 - JSONObject obj = new JSONObject(); - try { - obj.put("openid", IdUtil.getUid(this)); - obj.put("token", ""); - // 如果其他登陆过程中的错误, 则传入一个大于0的errorcode - obj.put("errorcode", 1); - nativeAndroid.callExternalInterface("sendUidToJS", obj.toString()); - } catch (JSONException e) { - e.printStackTrace(); - nativeAndroid.callExternalInterface("loginCancel", ""); - } - + login(); }); nativeAndroid.setExternalInterface("@onState", message -> { Log.e(TAG, "Get @onState: " + message); @@ -193,17 +180,58 @@ public class MainActivity extends Activity { // 支付 nativeAndroid.setExternalInterface("pay", message -> { + Log.i(TAG, "begin pay: " + message); try { JSONObject jsonObject = new JSONObject(message); String cpOrderId = jsonObject.getString("orderId"); String productCode = jsonObject.getString("productCode"); int count = jsonObject.getInt("count"); + + PayOrderInfo payOrderInfo = new PayOrderInfo(); + payOrderInfo.setCooperatorOrderSerial(cpOrderId); +// payOrderInfo.setProductName(goodsName); +// long p = Long.parseLong(totalAmount); +// payOrderInfo.setTotalPriceCent(p); // 以分为单位 +// payOrderInfo.setRatio(ratio); +// payOrderInfo.setExtInfo(extInfo); // 该字段将会在支付成功后原样返回给CP(不超过500个字符) +// payOrderInfo.setCpUid(BDGameSDK.getLoginUid()); // 必传字段,需要验证uid是否合法,此字段必须是登陆后或者切换账号后保存的uid +// if (isPayToBaidu) { +// payOrderInfo.isPurchaseBaiduGoods = "true"; +// } + + BDGameSDK.pay(MainActivity.this, payOrderInfo, null, + (resultCode, resultDesc, extraData) -> { +// alertDialog.cancel(); + String resultStr = ""; + switch (resultCode) { + case ResultCode.PAY_SUCCESS: // 支付成功 + resultStr = "支付成功:" + resultDesc; + break; + case ResultCode.PAY_CANCEL: // 订单支付取消 + resultStr = "取消支付"; + break; + case ResultCode.PAY_FAIL: // 订单支付失败 + resultStr = "支付失败:" + resultDesc; + break; + case ResultCode.PAY_SUBMIT_ORDER: // 订单已经提交,支付结果未知(比如:已经请求了,但是查询超时) + resultStr = "订单已经提交,支付结果未知"; + break; + default: + resultStr = "订单已经提交,支付结果未知"; + break; + } + Toast.makeText(getApplicationContext(), resultStr, + Toast.LENGTH_LONG).show(); + + }); + //TODO: 平台的支付 JSONObject obj = new JSONObject(); try { obj.put("errcode", 0); obj.put("errmsg", ""); nativeAndroid.callExternalInterface("payResult", obj.toString()); + } catch (JSONException e) { e.printStackTrace(); } @@ -231,6 +259,27 @@ public class MainActivity extends Activity { nativeAndroid.setExternalInterface("reportRoleInfo", message -> { Log.i(TAG, "Get reportRoleInfo: " + message); }); + //TODO: + // 上报玩家游戏角色信息Json串,格式为:{ + // "nick":"昵称", + // "role":"角色名", + // "region":"(游戏)大区", + // "server":"(游戏)服", + // "level":"角色等级", + // "power":"玩家战力值" + // } + JSONObject data = new JSONObject(); + try { + data.put("nick", "齐天大圣"); + data.put("role", "战士"); + data.put("region", "中国"); + data.put("server", "001"); + data.put("level", 88); + data.put("power", 99999); + BDGameSDK.reportUserData(data.toString()); + } catch (JSONException e) { + e.printStackTrace(); + } } @Override @@ -238,6 +287,12 @@ public class MainActivity extends Activity { super.onDestroy(); } + @Override + public void finish() { + super.finish(); + BDGameSDK.closeFloatView(this); // 关闭悬浮窗 + } + private void showLoadingView() { launchScreenImageView = new ImageView(this); launchScreenImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); @@ -266,4 +321,103 @@ public class MainActivity extends Activity { launchScreenImageView = null; } + private void setSuspendWindowChangeAccountListener() { // 设置切换账号事件监听(个人中心界面切换账号) + BDGameSDK.setSuspendWindowChangeAccountListener(MainActivity.this, + (resultCode, resultDesc, extraData) -> { + switch (resultCode) { + case ResultCode.LOGIN_SUCCESS: + // TODO 登录成功,不管之前是什么登录状态,游戏内部都要切换成新的用户 + uid = BDGameSDK.getLoginUid(); + // 切换账号成功后必须更新uid给调用支付api使用 + // Toast.makeText(getApplicationContext(), + // "登录成功", + // Toast.LENGTH_LONG).show(); + break; + case ResultCode.LOGIN_FAIL: + // TODO + // 登录失败,游戏内部之前如果是已经登录的,要清除自己记录的登录状态,设置成未登录。如果之前未登录,不用处理。 + Toast.makeText(getApplicationContext(), "登录失败", + Toast.LENGTH_LONG).show(); + break; + case ResultCode.LOGIN_CANCEL: + // TODO 取消,操作前后的登录状态没变化 + Toast.makeText(getApplicationContext(), "登录取消", + Toast.LENGTH_LONG).show(); + break; + default: + // TODO + // 此时当登录失败处理,参照ResultCode.LOGIN_FAIL(正常情况下不会到这个步骤,除非SDK内部异常) + Toast.makeText(getApplicationContext(), "登录失败", + Toast.LENGTH_LONG).show(); + break; + + } + }); + } + + /** + * @Description: 监听session失效时重新登录 + */ + private void setSessionInvalidListener() { + BDGameSDK.setSessionInvalidListener((resultCode, resultDesc, extraData) -> { + if (resultCode == ResultCode.SESSION_INVALID) { + // 会话失效,开发者需要重新登录或者重启游戏 + login(); + } + + }); + } + + /** + * @Description: 登录 + */ + private void login() { + BDGameSDK.login((resultCode, resultDesc, extraData) -> { + Log.d("login", "this resultCode is " + resultCode); + switch (resultCode) { + case ResultCode.LOGIN_SUCCESS: { + BDGameSDK.queryLoginUserAuthenticateState( + getApplicationContext(), (resultCode1, resultDesc1, extraData1) -> { + + Log.i("LoginUserAuth", + "resultCode" + resultCode1 + "==" + extraData1); + Log.i("login", BDGameSDK.getLoginAccessToken()); + Log.i("login", "login sucess"); + uid = BDGameSDK.getLoginUid(); + JSONObject obj = new JSONObject(); + try { + obj.put("openid", uid); + obj.put("token", BDGameSDK.getLoginAccessToken()); + // 如果其他登陆过程中的错误, 则传入一个大于0的errorcode + nativeAndroid.callExternalInterface("sendUidToJS", obj.toString()); + } catch (JSONException e) { + e.printStackTrace(); + nativeAndroid.callExternalInterface("loginCancel", ""); + } + + }); + } + break; + case ResultCode.LOGIN_CANCEL: { + nativeAndroid.callExternalInterface("loginCancel", "取消登陆"); + } + break; + case ResultCode.LOGIN_FAIL: + default: { + nativeAndroid.callExternalInterface("loginCancel", "登陆失败"); + } + } + }); + } + + public void setAntiAddictionListener() { + + // [必接]设置防沉迷系统回调,如果用户在线时长累计超过规定值,会触发该回调 + BDGameSDK.setAntiAddictionListener((resultCode, resultDesc, extraData) -> { + //TODO: 默认直接弹出游玩超时警告弹窗退出游戏,厂商也可以根据自己需要进行自己的防沉迷设计 + BDGameSDK.forceCloseDialog(MainActivity.this); + }); + + } + } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b6b991..9a2fc81 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,7 +3,7 @@ 下载游戏资源 进入游戏 preload - http://local/index.html?channel=7103 + http://local/index.html?channel=7107 1.0.0 load_back 获取游戏版本 diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000..dca93c0 --- /dev/null +++ b/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file