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