最近国内做买量的游戏有点点多,顺便分享这几个渠道接入流程,还有要注意的一些坑,提供给同学们学习下!

一.联想SDK

官网:联想开放平台
接入SDK的版本号:V3.0.0

接口代码:


public class LenovoProxy {private static final String TAG = LenovoProxy.class.getSimpleName();private static LenovoProxy lenovoProxy = null;private static final String SDK_VERSION = "3.0.0";private static final String appId = "xxxxxx";public static LenovoProxy getInstance() {if (null == lenovoProxy) {lenovoProxy = new LenovoProxy();}return lenovoProxy;}/*** 初始化** @param activity*/public void init(Activity activity) {LenovoGameApi.doInit(activity, appId);/*** 防沉迷,默认不开启* true 开启未成年时长限制,时长到期后,弹出限制弹窗,强制引导退出游戏。* false 不开启未成年时长限制,时长到期后,不做任何处理*/LenovoGameApi.isLimitLoginTime(true);}/*** 登录** @param activity*/public void login(Activity activity) {LenovoGameApi.doAutoLogin(activity, new IAuthResult() {@Override// 登录回调,处理登录结果public void onFinished(boolean ret, String data) {/*** 返回值 ret:true 成功,false 失 败* 返回值 data:登录 ST(token)*/if (ret) {// 登录成功String token = data;/*** 获取到渠道token* 请求自己的服务端进行验证*/} else {// 登录失败(失败原因开启飞行模式、 网络不通等)}}});}/*** 储值** @param activity* @param map      可改用其它数据模型进行传入*/public void pay(Activity activity, Map map) {GamePayRequest payRequest = new GamePayRequest();// 请填写商品自己的参数payRequest.addParam("notifyurl", "");// 当前版本暂时不用,传空StringpayRequest.addParam("appid", appId);payRequest.addParam("waresid", "waresid");//商品idpayRequest.addParam("quantity", "quantity");//商品数量/*** 游戏方生成的订单号* 请求自己服务端生成订单号,返回给客户端* 由客户端传到渠道方法,拉起储值** 如果没有服务端,那就客户端随机生成,如下*/payRequest.addParam("exorderno", "sample" + System.currentTimeMillis());payRequest.addParam("price", "price");//商品价格payRequest.addParam("cpprivateinfo", "123456");//附加信息,最大长度128LenovoGameApi.doPay(activity, "", payRequest, new IPayResult() {@Overridepublic void onPayResult(int resultCode, String signValue, String resultInfo) {// resultInfo =// 应用编号&商品编号&外部订单号if (LenovoGameApi.PAY_SUCCESS == resultCode) {// 支付成功Log.i(TAG, "sample:支付成功 ");} else if (LenovoGameApi.PAY_CANCEL == resultCode) {Log.i(TAG, "sample:取消支付 ");// 取消支付处理,默认采用finish(),请根据需要修改} else {// 计费失败处理,默认采用finish(),请根据需要修改Log.i(TAG, "sample:支付失败 ");}}});}/*** 查询实名认证* CP 可以调用该接口获取当前登录用户实名认证的年龄;如用户未进行实名认证,* 会先弹出实名认证的界面;如用户已认证,会返回年龄(age)可以通过年龄来判断用* 户是否成年.** @param activity* @param token    渠道登录成功返回的ST*/public void registerRealName(Activity activity, String token) {LenovoGameApi.doCheckRealAuth(activity, token, new OnAuthVerifyListener() {@Overridepublic void onBackSuccess(boolean isAuthened, int age, String pi) {if (isAuthened) {//实名if (age >= 18) {//成年}} else {//未实名}}@Overridepublic void onBackFailed(int code, String message) {}});}/*** 返回键** @param activity*/public void onBackPressed(Activity activity) {LenovoGameApi.doQuit(activity, new IAuthResult() {@Overridepublic void onFinished(boolean result, String data) {Log.i(TAG, "onFinished:" + data);if (result) {activity.finish();System.exit(0);} else {// "用户点击底部返回键或点击弹窗close键"}}});}
}

联想的接入比较简单,到这结束。

二.雷电SDK

此处不包含闪屏代码,请同学自行处理。
接入SDK版本号:V2.4.4_5

接口代码:


public class ThunderProxy {private static final String TAG = ThunderProxy.class.getSimpleName();private static ThunderProxy thunderProxy = null;private String mUid;private static final String SDK_VERSION = "2.4.4_5";//接入参数由雷电提供的private static final String GAME_ID = "xxx";  //游戏IDprivate static final String CHANNEL_ID = "xxx"; //渠道IDprivate static final String SUN_CHANNEL_ID = "xxx"; //子渠道,分渠道private static final String APP_SECRET_ID = "xxx";  //app密钥public static ThunderProxy getInstance() {if (null == thunderProxy) {thunderProxy = new ThunderProxy();}return thunderProxy;}/*** 初始化** @param activity*/public void init(Activity activity) {LdInfo info = new LdInfo();info.gameId = GAME_ID;info.channel = CHANNEL_ID;info.sunChannel = SUN_CHANNEL_ID;info.appSecret = APP_SECRET_ID;/*** 注意:gameId 、channel、sunChannel还需在AndroidManifests中配置,详见上方 配置信息* appSecret 是我方提供的AppKey,需要和ServerKey区分开*/LdSdkManger.getInstance().init(activity, info, new InitCallBack() {@Overridepublic void callback(int code, String desc) {String result = "初始化返回--code: " + code + " ,desc: " + desc;Toast.makeText(activity, result, Toast.LENGTH_SHORT).show();switch (code) {case 0://初始化成功break;case 1://初始化失败default:break;}}});}public void login(Activity activity) {/*** 注意:* 1、悬浮窗内部退出登录与游玩超时下线都是在此接口返回,code = 2 (需要厂商处理退出账号的逻辑)* 2、注销账号功能,在此接口返回,code = 3 (需要厂商处理注销账号的逻辑)* code:0.登录成功;1.登录失败;2.退出登录界面;3.注销游戏账号*/LdSdkManger.getInstance().showLoginView(activity, new LoginCallBack() {@Overridepublic void callback(int code, String uid, String timestamp, String sign, String decs) {/*** code:0.登录成功;1.登录失败;2.退出登录界面;3.注销游戏账号* uid:平台的用户 ID* timestamp:时间戳* sign:签名串(user_token)* desc:描述*/mUid = uid;switch (code) {case 0:/*** 登录成功* 获取uid,user_token等上传到服务器验证登录*/Log.i(TAG, "登录成功:" + code + " ;decs: " + decs);break;case 2://退出登录界面Log.i(TAG, "登出成功:" + code + " ;decs: " + decs);break;case 3://注销游戏账号Log.i(TAG, "注销游戏账号:" + code + " ;decs: " + decs);break;case 1:default://登录失败Log.i(TAG, "登录失败:" + code + " ;decs: " + decs);break;}}});}/*** 退出游戏** @param activity*/public void exitGame(final Activity activity) {LdSdkManger.getInstance().showExitView(activity, new ExitCallBack() {@Overridepublic void onFinish(int i, String s) {//code 0.退出游戏;1.继续游戏;if (i == 0) {//销毁资源的方法LdSdkManger.getInstance().DoRelease(activity);Log.i(TAG, "确认退出应用");} else if (i == 1) {Log.i(TAG, "取消退出应用");}}});}/*** 储值** @param activity*/public void pay(Activity activity) {/*** 注意:以下所有参数都不能为空,否则会支付失败,没有的参数用任意值代替*/LdPayInfo ldPayInfo = new LdPayInfo();ldPayInfo.orderId = "12345"; //游戏的支付订单号//支付金额(单位:分)//注意:如果返回的Price包含小数点,必须要截取,否则支付失败//例如:返回的是100.0,此时直接传入是支付失败;处理变成100,正常ldPayInfo.amount = "1";//支付金额(单位:分)ldPayInfo.productId = "12";  //定额的产品支付,暂时没用到,默认值ldPayInfo.productDesc = "充值金币";//商品描述ldPayInfo.productName = "金币";//商品名称ldPayInfo.roleId = "10086";// 角色idldPayInfo.roleName = "张三";// 角色名字ldPayInfo.serverId = "23";// 服务器idldPayInfo.serverName = "内测服";//服务器名字;LdSdkManger.getInstance().showChargeView(activity, ldPayInfo, new PayCallback() {@Overridepublic void callback(int code, String uid, String billno, String timestamp, String decs) {/*** code 0.支付成功;1.支付失败;2.取消支付,退出支付界面* uid 平台的用户 ID* billno 充值订单id*/switch (code) {case 0://支付成功Log.i(TAG, "支付成功");break;case 2://取消支付,退出支付界面Log.i(TAG, "取消支付");break;case 1://支付失败default:Log.i(TAG, "支付失败");break;}}});}/*** isForce  是否强制实名,true该弹窗在实名认证成功前不可关闭*/public void registerRealName() {LdSdkManger.getInstance().verifyIdCard(true, new VerifyIdCardListener() {@Overridepublic void callback(int code, String birthday, boolean isAdult) {/*** code;             0.不可用; 1.成功; 2.验证中; 3.验证不通过;* birthday;         用户出生日期(19990909)* isAdult;            是否成年*/switch (code) {case 1:if (isAdult) {//成年} else {//未成年}break;case 0:case 2:case 3:default:break;}}});}/*** 上传角色信息** @param activity*/public void updateRoleInfo(Activity activity) {LdGameInfo ldGameInfo = new LdGameInfo();ldGameInfo.uid = mUid;ldGameInfo.serverId = "23";// 服务器idldGameInfo.serverName = "内测服";//服务器名字ldGameInfo.roleId = "10086";// 角色idldGameInfo.roleName = "张三";// 角色名字ldGameInfo.roleType = ""; //角色类型,例如:战士,魔法师,弓箭手ldGameInfo.level = "99"; //等级ldGameInfo.money = "10000000000000"; //游戏的金币数ldGameInfo.partyName = "工会";//公会ldGameInfo.powerNum = 10000;//角色战斗力ldGameInfo.vipLevel = 12;//VIP等级LdSdkManger.getInstance().enterGame(activity, ldGameInfo, new EntryCallback() {@Overridepublic void callback(int code, String desc) {if (code == 0) {//上传成功}}});}/*** 获取用户信息** @param activity* @return*/public LdUserInfo getUserInfo(Activity activity) {/*** uid;              用户id* username;         用户账号* password;         用户密码* nickName;         用户昵称* phoneNumber;      用户手机号码* email;          用户邮箱* realName;         用户实名认证姓名* birthday;         用户实名认证出生日期(格式:20190101)* isAuthenticated;  用户是否实名认证*/LdUserInfo ldUserInfo = LdSdkManger.getInstance().getUserInfo();return ldUserInfo;}/*** 浮窗** @param activity*/public void onResume(Activity activity) {LdSdkManger.getInstance().showFloatView(activity);}public void onPause(Activity activity) {LdSdkManger.getInstance().hideFlowView(activity);}public void onDestroy(Activity activity) {//释放SDKLdSdkManger.getInstance().DoRelease(activity);}
}

雷电SDK接入到此结束!

三.网易MUMU SDK

  • 确保minSdkVersion要大于等于15;
  • targetSdkVersion目前最高支持到26;

注意:

  • SDK提供的三种闪屏方式,必须接入任意一种,否则后面的功能都无法使用。
  • 使用非AndroidX

接口代码:


public class MuMuProxy {private static final String TAG = MuMuProxy.class.getSimpleName();private static MuMuProxy muMuProxy = null;private static final String SDK_VERSION = "1.0.6";private HubAction hubAction;public static MuMuProxy getInstance() {if (null == muMuProxy) {muMuProxy = new MuMuProxy();}return muMuProxy;}/*** 初始化** @param activity*/public void init(Activity activity) {hubAction = new HubAction() {@Overridepublic void onInit(int i, String s) {}@Overridepublic void onSplash() {}@Overridepublic void onLogin(int code, String msg, UserInfo info) {if (code == HubCode.OK) {/*** 登录成功* info.getUid()* info.getToken()* 上传服务端验证*/} else {//登录失败}}@Overridepublic void onPay(int code, String msg, PayInfo info) {// 请处理支付的结果if (code == HubCode.OK) {//支付成功} else {//支付失败}}@Overridepublic void onLogout() {// 请处理账户登出事件// 注意:此接口触发条件为两种:// 1.主动调用退出登录接口// 2.菜单中点击切换账号。// 切换账号导致的接口回调会重新触发登录操作// 所以请不要再在此接口处调用SDK的退出操作}@Overridepublic void onQuit(boolean realQuit) {// 请处理关闭游戏的逻辑if (realQuit) {//确认退出应用} else {//取消退出应用}}};Api.getInstance().register(hubAction);Api.getInstance().splashCreate(activity);}/*** 登录** @param activity*/public void login(Activity activity) {Api.getInstance().login(activity);}/*** 登出** @param activity*/public void logout(Activity activity) {Api.getInstance().logout(activity);}/*** 退出** @param activity*/public void exitGame(Activity activity) {Api.getInstance().quit(activity);}/*** 储值** @param activity*/public void pay(Activity activity) {PayInfo info = new PayInfo();//请求服务端创单 或者其它方式生成订单号info.setGameOrderId("hub_test_" + System.currentTimeMillis());info.setGoodsId("product_01");//商品idinfo.setGoodsName("一堆钻石");//商品名称info.setGoodsCount(1);//商品数量/*** 注意:以下3个价格参数均为同一参数* 单位:分*/info.setGoodsPrice(1);info.setOrderPrice(1);info.setActualPrice(1);info.setCurrency("CNY");//币种//储值回调info.setNotifyUrl("xxxxx");try {/*** 需要出入更多的参数,可以按一下方式传入*/JSONObject reserveInfo = new JSONObject();reserveInfo.put("key1", "value1");reserveInfo.put("key2", "value2");reserveInfo.put("key3", "value3");info.setReserved(reserveInfo.toString());} catch (Exception e) {/*ignore it*/}Api.getInstance().pay(activity, info);}
}

MUMU SDK接入到此结束!

四.游戏饭(长尾)SDK

注意事项:

  1. 健康游戏忠告(8句)
  2. SDK所有接口都必须调用且在主线程中调用
  3. apk的签名只能使用V1签名

接口代码:


public class YXFProxy {private static final String TAG = YXFProxy.class.getSimpleName();private static YXFProxy yxfProxy = null;private static final String SDK_VERSION = "6.4";private GameInfo gameInfo;private ICallback callback;private boolean isPaySuccess = false;public static YXFProxy getInstance() {if (null == yxfProxy) {yxfProxy = new YXFProxy();}return yxfProxy;}public void init(Activity activity) {callback = new ICallback() {@Overridepublic void onError(int type, String message) {switch (type) {case ICallback.INIT://初始化失败break;case ICallback.LOGIN://登陆失败break;case ICallback.CREATE_ROLE://创建角色失败break;case ICallback.UPLOAD_GAME_INFO://更新角色信息失败break;case ICallback.PAY://支付失败break;case ICallback.PAY_FINISH:/*** 这是坑,记得好好踩* 注意:支付弹窗点击外部消失  和  支付成功都会回调这个接口* 默认回调成功,是否真正成功由原厂判断,提示语用比较婉转的文案*/if (!isPaySuccess) {//取消支付}isPaySuccess = false;break;case ICallback.LOGOUT://登出失败break;case ICallback.EXIT://取消退出应用break;default:Log.i(TAG, "onError type = " + type + "  , message = " + message);break;}}@Overridepublic void logoutSuccess() {//登出成功}@Overridepublic void paySuccess(String orderId) {//支付成功isPaySuccess = true;}@Overridepublic void initSuccess() {//初始化成功}@Overridepublic void loginSuccess(UserInfoModel userInfoModel) {///*** 登陆验证 token的有效时间为2分钟* 获取pid,userInfoModel.sessionId* 进行登录验证*/String pid = userInfoModel.pid;String sessionId = userInfoModel.sessionId;}@Overridepublic void setGameInfoSuccess(String loginTime) {}@Overridepublic void exitSuccess() {// 推荐退出方法Intent startMain = new Intent(Intent.ACTION_MAIN);startMain.addCategory(Intent.CATEGORY_HOME);startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);activity.startActivity(startMain);Process.killProcess(Process.myPid());}@Overridepublic void createRoleSuccess() {}};YYReleaseSDK.getInstance().sdkInit(activity, callback);}public void login(Activity activity) {YYReleaseSDK.getInstance().sdkLogin(activity, callback);}public void logout(Activity activity) {YYReleaseSDK.getInstance().onSdkLogOut(activity, gameInfo, callback);}public void exitGame(Activity activity) {YYReleaseSDK.getInstance().onSdkExit(activity, gameInfo, callback);}public void pay(Activity activity) {//所有参数不能为空,否则报错GamePayInfo payInfo = new GamePayInfo();GameInfo gameInfo = getGameInfo();//自定义参数payInfo.setExtInfo("cusompay");//支付金额(只支持定额支付,以分为单位,值不能 少于 100 分)payInfo.setMoney("100");//充值回调payInfo.setNotifyUrl("xxxxx");//订单号,请求服务端创单 或 其它方式创单String orderId = "jh_" + System.currentTimeMillis();payInfo.setCpOrderId(orderId);//商品数量payInfo.setProductCount(10);//商品idpayInfo.setProductId("001");//商品名称payInfo.setProductName("钻石");//秘钥,服务端生成返回payInfo.setSign(sign);YYReleaseSDK.getInstance().doPay(activity, gameInfo, payInfo, callback);}private GameInfo getGameInfo() {/*** 注意:这个渠道会分应用宝的包* setZoneId 和setServerId 传的值应该相同*/String 区服ID = "123";String 角色名称 = "哈哈哈";gameInfo = new GameInfo();gameInfo.setRoleId("111111");gameInfo.setRoleLevel("11");gameInfo.setRoleName(角色名称);gameInfo.setZoneId(区服ID);gameInfo.setServerId(区服ID);gameInfo.setZoneName("big");gameInfo.setVipLevel("1");gameInfo.setRolePower("7465");return gameInfo;}/*** 创角** @param activity*/public void createRole(Activity activity) {YYReleaseSDK.getInstance().createRole(activity, gameInfo, callback);}/*** 角色升级** @param activity*/public void levelUpdate(Activity activity) {YYReleaseSDK.getInstance().levelUpdate(activity, gameInfo);}/*** 角色信息上报** @param activity*/public void updateRoleInfo(Activity activity) {getGameInfo();YYReleaseSDK.getInstance().setGameInfo(activity, gameInfo, true, callback);}public void onCreate(Activity activity) {YYReleaseSDK.getInstance().onCreate(activity);}public void onStart(Activity activity) {YYReleaseSDK.getInstance().onSdkStart(activity);}public void onRestart(Activity activity) {YYReleaseSDK.getInstance().onRestart(activity);}public void onResume(Activity activity) {YYReleaseSDK.getInstance().onSdkResume(activity);}public void onPause(Activity activity) {YYReleaseSDK.getInstance().onSdkPause(activity);}public void onStop(Activity activity) {YYReleaseSDK.getInstance().onSdkStop(activity);}public void onDestroy(Activity activity) {YYReleaseSDK.getInstance().onSdkDestory(activity);}public void onNewIntent(Intent intent) {YYReleaseSDK.getInstance().onNewIntent(intent);}public void onActivityResult(int requestCode, int resultCode, Intent data) {//必须接入YYReleaseSDK.getInstance().onActivityResult(requestCode, resultCode, data);}
}

游戏饭(长尾) SDK接入到此结束!

所有demo下载:demo下载地址
如无法下载,可私信获取。

Android 联想,雷电,mumu,游戏饭(长尾)游戏联运SDK接入相关推荐

  1. Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

    前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一. 继< Android Ap ...

  2. Android 直播、短视频平台第三方宝宝特效SDK接入方式

    项目集成流程: 1.获取APPKEY:进入哎吖科技官网:http://www.aiyaapp.com/,提交接入申请,填入applicationId获取appKey.(可以免费申请试用) 2.添加Ma ...

  3. 【解决方案】雷电模拟器去桌面底部游戏和游戏中心

    [解决方案]雷电模拟器去桌面底部游戏和游戏中心 1.在模拟器设置中开启root.系统分区写入.adb 2.在设置关于连续5次点击打开开发者设置,开启USB调试 开发者设置在系统-->高级--&g ...

  4. android开发学习之路——连连看之游戏逻辑(五)

    GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...

  5. android游戏模式,注重游戏体验 Android 12提供原生游戏模式

    原标题:注重游戏体验 Android 12提供原生游戏模式 [PChome手机频道资讯报道]谷歌方面即将推出新版的Android 12系统,该系统代号Snow Cone,将采用全新的界面设计,并提供多 ...

  6. Android 2.3 Gingerbreader 正式发布,向游戏开发者献媚

    Android 2.3 Gingerbread果然如期而至 ,这次更新的重点在于讨好游戏开发者(比如Playstation Phone吧 ?).主要更新包括: 游戏:增加了新的垃圾回收和优化处理事件, ...

  7. android 开发游戏_Android游戏开发–基本游戏循环

    android 开发游戏 在到目前为止的系列之后,您将对游戏架构有所了解. 即使只是短暂的一次,但我们知道我们需要以某种形式进行输入,更新游戏的内部状态,最后将其渲染到屏幕上,并产生一些声音和/或振动 ...

  8. 视博云android虚拟机,手游难推广?视博云云游戏解决方案助力游戏厂商破局

    原标题:手游难推广?视博云云游戏解决方案助力游戏厂商破局 昨天520,在这个表白爱的日子里,视博云为大家精心准备了最好玩的恋爱游戏 现在就带你们打开恋爱的大门. ①<拣爱>于2018年9月 ...

  9. android策略模式_Android游戏开发–设计游戏实体–策略模式

    android策略模式 在这一部分中,我将尝试解释我对好的游戏设计元素的理解. 我将在示例中使用droid,并编写基本的战斗模拟器脚本以查看其行为. 问题: 我指挥一个机器人,我想消灭敌人. 再次面对 ...

最新文章

  1. 使用PLP特征训练crnn语音分类
  2. 复杂数据权限设计方案
  3. 【机器学习】微软出品!FLAML:一款可以自动化机器学习过程的神器!
  4. mysql5.7.17初始化_mysql5.7.17初始化求助 - 墨天轮问答
  5. pandas滑动窗口滑动整个dataframe
  6. php gtk教程,PHP-GTK 介绍及其应用-PHP教程,PHP应用
  7. 【Intellij-IDEA系列】IDEA右键没有Git或svn处理方法
  8. vim源码编译启用python
  9. 如何轻松除掉肠道废物
  10. Express框架、Webstorm中创建Express项目
  11. PS教程:5种把图片变成黑白色的方法
  12. 解决spring JdbcTemplate更新操作成功但数据库未插入值的方案
  13. 系列创业家陈丕宏:互联网创业的五大定律
  14. [開發記錄] BBxM 系統建立
  15. C++ sort() 排序函数
  16. Matlab ——旋转矩阵,四元数,欧拉角之间的转换
  17. 3D种类游戏系统开发
  18. 腾讯员工平均月薪7.5w?我这是又被平均了?
  19. UE4 Unlua源码解析12 - Lua与UE4的混合GC
  20. HadoopHbaseZookeeper集群

热门文章

  1. 【小tip】word中的空白页怎么删都删不掉的解决办法
  2. React HOC高阶组件
  3. arcgis四至点坐标的实现(不是四至范围,是四至点坐标)
  4. Java 专业综合设计(附报告)
  5. 配置 Maven 报错:The JAVA_HOME environment variable is not defined correctly
  6. 青龙面板-快手极速低保版
  7. ggggxc学习笔记----Vue学习笔记VI----可复用技术
  8. 五个SEO视图带来高质量的流量
  9. 深度学习环境配置7——(30系显卡)windows下的tensorflow-gpu==2.4.0环境配置
  10. jQuery实例之表单验证