添加baidu相关代码

This commit is contained in:
zhl 2020-11-27 14:59:24 +08:00
parent b2e58d4462
commit e11ccb2fb4
16 changed files with 345 additions and 55 deletions

View File

@ -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'
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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.**
-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.**

View File

@ -2,6 +2,12 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hnjc.wjtx">
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
@ -10,12 +16,24 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<!-- ↓↓↓ SDK ↓↓↓ -->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<!-- 百度PUSH 适配Android N系统必需的ContentProvider写权限声明写权限包含应用包名 -->
<uses-permission
android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.hnjc.wjtx.g.baidu" />
<permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.hnjc.wjtx.g.baidu"
android:protectionLevel="normal" />
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:name=".JCApplication"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" >
<meta-data android:name="android.max_aspect" android:value="2.2" />
@ -39,19 +57,26 @@
</activity>
<!-- <activity android:name=".MainActivity"-->
<!-- android:launchMode="singleTask"-->
<!-- android:screenOrientation="portrait"-->
<!-- android:windowSoftInputMode="adjustPan|stateAlwaysVisible"-->
<!-- android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"-->
<!-- android:theme="@android:style/Theme.NoTitleBar.Fullscreen">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<meta-data android:name="android.notch_support" android:value="true"/>
<!-- 适配Android P否则系统缺少相关类会崩溃 -->
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.hnjc.wjtx.g.baidu.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<!--元数据-->
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
<!-- 适配Android N系统必需的ContentProvider声明写权限包含应用包名-->
<provider android:name="com.baidu.android.pushservice.PushInfoProvider"
android:authorities="com.hnjc.wjtx.bdpush" android:exported="true"
android:protectionLevel="signature"
android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.hnjc.wjtx.g.baidu" />
</application>
</manifest>

View File

@ -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监听
}
}

View File

@ -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);
}
}

View File

@ -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<String> 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();
// 初始化失败
}
});
}
}

View File

@ -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);
});
}
}

View File

@ -3,7 +3,7 @@
<string name="load_game">下载游戏资源</string>
<string name="start_game">进入游戏</string>
<string name="preload_path">preload</string>
<string name="game_url">http://local/index.html?channel=7103</string>
<string name="game_url">http://local/index.html?channel=7107</string>
<string name="local_version">1.0.0</string>
<string name="load_back">load_back</string>
<string name="launch_version">获取游戏版本</string>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>