版本记录
导入资源
引入demo中的mylibrary,点击android studio左上角的File->New->Import Module,选择demo中的mylibrary
或者是手动导入,拷贝mylibrary的libs、layout、xml三个文件夹的文件到工程中,拷贝AndroidManifest.xml中的权限申明、application到工程中,主题样式最好是全屏, application一定要配置属性android:usesCleartextTraffic="true"。layout目录下的float_webview.xml、float_webview_new.xml、floating_menu.xml这三个文件一定要拷贝
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.READ_CLIPBOARD_HISTORY"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_SENSORS" /> <application android:usesCleartextTraffic="true" android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" android:networkSecurityConfig="@xml/network_security_config"> </application> </manifest>
配置参数
在工程中的AndroidManifest.xml中配置参数,如下方所示
<activity android:name="com.bstsdk.sdkdemo.MainActivity" android:exported="true"> <!-- 用于应用启动的intent-filter --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 这里填app_id --> <meta-data android:name="app_id" android:value="${app_id}" /> <!-- 这里填login_key --> <meta-data android:name="client_key" android:value="${login_key}"/> <!-- 这里填domain --> <meta-data android:name="domain" android:value="${domain}"/> <!-- 1为横屏 0为竖屏--> <meta-data android:name="Landscape" android:value="0" />
参数说明
继承BstApp(必接)
public class App extends BstApp { @Override public void onCreate() { super.onCreate(); ... } }
如无法直接继承BstApp,可在自己的Application中调用bstsdk的相关方法:
@Override public void onCreate() { super.onCreate(); BstSDKManager.getInstance().onAppCreate(this); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); BstSDKManager.getInstance().onConfigurationChanged(this, newConfig); } @Override public void onTerminate() { super.onTerminate(); BstSDKManager.getInstance().onTerminate(this); } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); BstSDKManager.getInstance().attachBaseContext(this, base); } @Override public void onTrimMemory(int level) { super.onTrimMemory(level); BstSDKManager.getInstance().onTrimMemory(this, level); } @Override public void onLowMemory() { super.onLowMemory(); BstSDKManager.getInstance().onLowMemory(this); }
实现生命周期方法(必接)
需要在主Activity的各个生命周期方法中调用bstsdk对应的方法
初始化(必接)
初始化SDK需要传入GCallback接口,SDK的所有回调接口都在里面
如果初始化没有任何回调,请检查是否有继承BstApp,或者在Application中调用相关的方法
BstSDKManager.getInstance().init(this, new GCallback() { 初始化成功 请务必在初始化成功后再调用登录 @Override public void sdk_init_success() { Log.i("GCallback", "初始化成功"); } 初始化失败 @Override public void sdk_init_fail() { Log.i("GCallback", "初始化失败"); } 登录成功回调 @Override public void sdk_login_success(String user_id) { Toast.makeText(MainActivity.this, "登录成功"+user_id, Toast.LENGTH_SHORT).show(); uid=user_id; } 登录失败回调 @Override public void sdk_login_fail(int code, String reason) { Toast.makeText(MainActivity.this, reason, Toast.LENGTH_SHORT).show(); } 选择实现,玩家是否充值以服务端通知为准 @Override public void sdk_recharge_success(String json) { Toast.makeText(MainActivity.this, "支付成功,请以服务端通知为准"+json, Toast.LENGTH_SHORT).show(); } 退出游戏 @Override public void sdk_logout() { Toast.makeText(MainActivity.this, "退出", Toast.LENGTH_SHORT).show(); } 支付失败回调 @Override public void sdk_recharge_fail(int code, String reason) { } 无需实现 @Override public void show_sdk_webview() { } 无需实现 @Override public void show_sdk_webview_width(int radio) { } 无需实现 @Override public void js_create_order_success_callback(String json) { } 支付界面被关闭时 @Override public void close_sdk_rechargewindow() { } 无需实现 @Override public void hide_sdk_loginwindow() { } 无需实现 @Override public void show_float_view(String isShow) { } 不同意协议 退出APP 无需实现 @Override public void exit_app() { } 切换账号 必须实现 @Override public void relogin() { /*调用sdk切换账号*/ BstSDKManager.getInstance().SdkChangeAccount(); /*你方的代码*/ } });
登录(必接)
BstSDKManager.getInstance().SdkShowLogin();
登出(必接)
BstSDKManager.getInstance().SdkLogout();
切换账号(必接)
BstSDKManager.getInstance().SdkChangeAccount();
上报(必接)
GameRoleData roleData = new GameRoleData(); { roleData.setServerId("1"); //区服ID 必须 roleData.setServerName("1区"); //区服名称 必须 roleData.setRoleId("10000"); //角色ID 必须 roleData.setRoleName("孙悟空"); //角色名称 必须 roleData.setRoleLevel("58");//角色等级 必须 roleData.setRoleBalance("8899"); //角色游戏内货币余额 roleData.setPartyRoleId("1008"); //帮派ID roleData.setRolePower("100000"); //角色战力 roleData.setVipLevel("8"); //VIP等级 roleData.setRoleGender("男"); //角色性别 roleData.setPartyName("天下第一帮"); //帮派名称 roleData.setProfessionId("1"); //角色职业Id roleData.setProfession("法师"); //角色职业名称 roleData.setFriendList("[]"); //角色好友列表 //事件类型请传入GameRoleData.Event类下的几个参数,不要传入 //其他的 //unknown 其他、未知; //online 进入游戏; //create 创建角色; //upleve 升级 //offline 退出游戏 roleData.setEventName(GameRoleData.Event.create); //事件类型 BstSDKManager.getInstance().SdkUploadGameRoleInfo(roleData); }
支付(必接)
GameRoleData roleData = new GameRoleData(); roleData.setServerId("1"); //区服ID 必须 roleData.setServerName("1区"); //区服名称 必须 roleData.setRoleId("10000"); //角色ID 必须 roleData.setRoleName("孙悟空"); //角色名称 必须 roleData.setRoleLevel("58");//角色等级 必须 roleData.setRoleBalance("8899"); //角色游戏内货币余额 roleData.setPartyRoleId("1008"); //帮派ID roleData.setRolePower("100000"); //角色战力 roleData.setVipLevel("8"); //VIP等级 roleData.setRoleGender("男"); //角色性别 roleData.setPartyName("天下第一帮"); //帮派名称 roleData.setProfessionId("1"); //角色职业Id roleData.setProfession("法师"); //角色职业名称 roleData.setFriendList("[]"); //角色好友列表 //事件类型请传入GameRoleData.Event类下的几个参数,不要传入其他的 //unknown 其他、未知;online 进入游戏;create 创建角色;upleve 升级offline 退出游戏 roleData.setEventName(GameRoleData.Event.create); //事件类型 OrderInfo orderInfo = new OrderInfo(); orderInfo.setCpOrderID("ABC" + System.currentTimeMillis()); //cp的订单编号 orderInfo.setAmount(100); //订单金额 orderInfo.setCount(100); //游戏币数量 即20元可以购买多少游戏币 orderInfo.setGoodsID("商品ID"); //游戏方商品Id orderInfo.setGoodsName("点券"); //商品名称 如:元宝 钻石 点券等 orderInfo.setGoodsDesc("月卡");//商品描述: 如:周卡 月卡 元旦活动 648送10% orderInfo.setExtrasParams("[]"); //本例是demo,所以把pay_key写在客户端,并进行签名.正确做法:在服务端生成时间戳(timestamp),在服务端计算签名(sign),timestamp和sign随cp订单号一同返回过来 String timestamp = String.valueOf(System.currentTimeMillis()); String pay_key=""; String signstr = "amount=%1$d&app_id=%2$s&cporder=%3$s×tamp=%4$s&uid=%5$s%6$s"; //元需要转换为分 signstr = String.format(signstr, ((int)( orderInfo.getAmount() * 100)), "appid", orderInfo.getCpOrderID(), uid, timestamp, pay_key); BstLog.i("signstr",signstr); String sign = BaseTools.md5(signstr); BstSDKManager.getInstance().SdkShowRecharge(roleData, orderInfo,timestamp,sign); orderInfo.setExtrasParams("[]"); //本例是demo,所以把pay_key写在客户端,并进行签名.正确做法:在服务端生成时间戳(timestamp),在服务端计算签名(sign), //timestamp和sign随cp订单号一同返回过来 String timestamp = String.valueOf(System.currentTimeMillis()); String pay_key="224e594bc55d4879b080238a8db9bcf9"; String signstr = "amount={amount}&app_id={app_id}&cporder={cporder}×tamp={timestamp}&uid={uid}" + pay_key; signstr = signstr.replace("{amount}",((int)( orderInfo.getAmount() * 100))+""); //需要转换为分进行签名 signstr = signstr.replace("{app_id}", BstConfig.APP_ID); signstr = signstr.replace("{cporder}", orderInfo.getCpOrderID()); signstr = signstr.replace("{uid}", uid); signstr = signstr.replace("{timestamp}", timestamp); Log.i("signstr",signstr); String sign = BaseTools.md5(signstr); BstSDKManager.getInstance().SdkShowRecharge(roleData, orderInfo,timestamp,sign);
退出游戏(必接)
在需要退出游戏的时候调用,弹出退出框
BstSDKManager.getInstance().onBackPressed();
其他
BstSDKManager.getInstance().showFloat(true/false);//展示/关闭悬浮图标 BstLog.enable();//开启日志
注意事项
所有的方法请在主线程(UI线程)中调用