# 久久游聚合SDK **Repository Path**: a945866953/jiujiuyou-merge-sdk ## Basic Information - **Project Name**: 久久游聚合SDK - **Description**: 聚合SDK开发接入文档 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-05-07 - **Last Updated**: 2025-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 久久游聚合SDK集成文档 ``` /** 特别注意: 1 母包动态权限需要在用到时再申请 请不要启动立即申请权限 2 SDK接口需要在主线程中调用 第1步:配置SDK的出包参数 assets/jjyx_developer_config.properties 第2步:将demo中libs下面的资源拷贝到您工程下libs目录下 第3步:游戏中的AndroidManifest.xml文件中application节点的android:name属性一定要设置为com.jjyou.mergesdk.JJYXApplication 第4步:接入以下代码部分 */ public class MainActivity extends Activity { String userId; String token; //生命周期 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册统一回调 JJYXSDK.getInstance().setSDKListener(new DefaultJJYSDKListener(){ @Override public void onInitResult(InitResult result) { if ( result.getCode()==0 ){ //注意:要求SDK初始化成功后游戏才可以继续往下执行 tip("初始化成功"); }else { //初始化错误不要继续往下走了 建议错误的时候显示 msg 和code 出来 tip("初始化失败 mag="+result.getMsg()+" code=="+result.getCode()); } } @Override public void onLoginResult(UToken authResult) { if(authResult.getCode()==0){ userId=authResult.getUserID(); token=authResult.getToken(); // String extra = authResult.getExtra();//专服标识 忽略 tip("登录成功 userId=="+userId +" token=="+token); }else{ //错误码没有一个对照表, 所以建议错误的时候显示 msg 和code 出来 tip("登录失败 mag="+authResult.getMsg()+" code=="+authResult.getCode()); } } @Override public void onPayResult(PayResult result) { switch (result.getCode()){ case JJYXCode.CODE_PAY_COMPLETE: //注意:支付完成不等于支付成功,必须以cp服务器为准 tip("支付完成 orderID=="+result.getOrderID()); break; case JJYXCode.CODE_PAY_CANCEL: tip("支付取消 orderID=="+result.getOrderID()); break; default: //建议错误的时候显示 msg 和code 出来 tip("失败 code=="+result.getCode()+"msg=="+result.getMsg()+" orderID=="+result.getOrderID()); break; } } //cp调用SDK退出登录接口的回调 @Override public void cpLogout(LogoutResult result) { //执行用户退出操作 if (result.getCode()==0){ userId=""; token=""; tip("退出成功"); }else { //错误码没有一个对照表, 所以建议错误的时候显示 msg 和code 出来 tip("退出失败 mag="+result.getMsg()+" code=="+result.getCode()); } } //********************** 以下接口为 SDK主动回调CP ******************** //sdk 主动要求切换当前账号 @Override public void onSdkSwitchAccount(UToken authResult) { //cp执行操作:返回到游戏登录页 -> 清理当前用户数据 -> 用新的账号登录 (和onLoginResult回调一致 CP拿到账号后验证登录并拉去服务器列表) userId=authResult.getUserID(); token=authResult.getToken(); // String extra = authResult.getExtra();//专服标识 忽略 tip("SDK要求切换登录 userId=="+userId +" token=="+token); } //sdk 主动回调退出登录 @Override public void sdkLogout() { //cp 执行操作:返回到游戏登录页 -> 清理当前用户数据 -> 调起登录; tip("用户点击注销,游戏需要清理数据并回调登录首页"); userId=""; token=""; JJYXUser.getInstance().login(); } }); JJYXSDK.getInstance().init(this); JJYXSDK.getInstance().onCreate(savedInstanceState); } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { JJYXUser.getInstance().exit(new IexitCallback() { @Override public void onExitFinish(int ResultCode) { switch (ResultCode){ case JJYXCode.CODE_APSDKExitResultCodeExitGame: //退出游戏 tip("退出游戏"); break; case JJYXCode.CODE_APSDKExitResultCodeCloseWindow: //取消 tip("取消"); break; case JJYXCode.CODE_APSDKExitResultCodeError: //调取对话框失败 //*****注意: 当退出对话框拉起失败的时候 游戏一定要显示自定的退出对话框, 很重要!!!!!! tip("显示自己的对话框"); break; } } }); return false; }else { return super.onKeyDown(keyCode, event); } } public void onclick(View view){ switch (view.getId()){ case R.id.bt_login: //游戏调起SDK登录 JJYXUser.getInstance().login(); break; case R.id.bt_pay: //游戏调起SDK支付 PayParams data=new PayParams(); data.setBuyNum(1);//购买数量 data.setCoinNum(100);//获得的虚拟货币数量 比如100元宝 data.setExtension("12345678");//扩展参数,该参数会在支付成功后原样回调到cp 服务器接口 data.setCporderID(String.valueOf(System.currentTimeMillis()));//模拟订单号 接入时请填真实订单号 data.setPrice(100);//单位是分, 最少100(也就是1元钱) data.setProductDesc("阮月弯刀是自强的刀");//商品描述 data.setProductId("8081");//商品ID data.setProductName("阮月弯刀");//商品名称 data.setRoleId("u154251234");//角色ID data.setRoleLevel("12");//角色等级 data.setRoleName("死神方便");//角色名称 data.setServerId("1");//服务器ID data.setServerName("王者服");//服务器名称 data.setTime(System.currentTimeMillis());//当前时间戳 毫秒 data.setUserID(userId);//我方返回的uid ,注意函数是:setUserID() 而不是:setSdkUserID() JJYXPay.getInstance().pay(data); break; case R.id.bt_switch: //游戏主动切换用户的按钮 JJYXUser.getInstance().logout(); break; case R.id.bt_logout: //游戏主动调用SDK退出用户 JJYXUser.getInstance().logout(); break; case R.id.bt_exit: //游戏退出按钮 JJYXUser.getInstance().exit(new IexitCallback() { @Override public void onExitFinish(int ResultCode) { switch (ResultCode){ case JJYXCode.CODE_APSDKExitResultCodeExitGame: //退出游戏 tip("退出游戏"); break; case JJYXCode.CODE_APSDKExitResultCodeCloseWindow: //取消 tip("取消"); break; case JJYXCode.CODE_APSDKExitResultCodeError: //调取对话框失败 //*****注意: 当退出对话框拉起失败的时候 游戏一定要显示自定的退出对话框, 很重要!!!!!! tip("显示自己的对话框"); break; } } }); break; case R.id.bt_submit: //角色数据上报 UserExtraData userExtraData=new UserExtraData(); userExtraData.setServerID("1"); userExtraData.setServerName("王者服"); userExtraData.setRoleName("死神方便"); // public static final int TYPE_SELECT_SERVER = 1; //选择服务器 // public static final int TYPE_CREATE_ROLE = 2; //创建角色 // public static final int TYPE_ENTER_GAME = 3; //进入游戏 // public static final int TYPE_LEVEL_UP = 4; //等级提升 // public static final int TYPE_EXIT_GAME = 5; //退出游戏 //数据同步的类型,有些sdk 需要区分数据的类型 userExtraData.setDataType(UserExtraData.TYPE_ENTER_GAME);//默认 userExtraData.setMoneyNum(800);//用户金币余额 userExtraData.setRoleID("u154251234");//角色id userExtraData.setUserId(userId);//我方返回的uid. 注意函数是setUserId 而不是setSdkUserId userExtraData.setRoleLevel("12");//角色等级 userExtraData.setRoleCreatetimer(System.currentTimeMillis());//角色创建时间 JJYXUser.getInstance().submitExtraData(userExtraData, new IUserExtraCallback() { @Override public void onUserExtraCallback(int ResultCode) { switch (ResultCode){ case JJYXCode.GAME_ROLE_SUCCESS: tip("同步数据成功"); break; case JJYXCode.GAME_ROLE_FAIL: tip("同步数据失败"); break; } } }); break; } } private void tip(String msg){ // Logs.i( msg ); Logs.i( Thread.currentThread().getName() ); Toast.makeText( this, msg, Toast.LENGTH_SHORT).show(); } //生命周期 @Override protected void onStart() { super.onStart(); JJYXSDK.getInstance().onStart(); } @Override protected void onPause() { super.onPause(); JJYXSDK.getInstance().onPause(); } @Override protected void onResume() { super.onResume(); JJYXSDK.getInstance().onResume(); } @Override protected void onRestart() { super.onRestart(); JJYXSDK.getInstance().onRestart(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); JJYXSDK.getInstance().onNewIntent(intent); } @Override protected void onStop() { super.onStop(); JJYXSDK.getInstance().onStop(); } @Override protected void onDestroy() { super.onDestroy(); JJYXSDK.getInstance().onDestroy(); } @Override public void onBackPressed() { // super.onBackPressed(); JJYXSDK.getInstance().onBackPressed(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); JJYXSDK.getInstance().onActivityResult(requestCode, resultCode, data); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); JJYXSDK.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults); } @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); JJYXSDK.getInstance().attachBaseContext(newBase); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); JJYXSDK.getInstance().onConfigurationChanged(newConfig); } } ```