【Android游戏开发】登录以及支付SDK总结

最近在公司里面搞IOS的登陆以及支付流程 我也写了一篇在论坛中 感兴趣的可以点击去看看 地址摆在下方

【IOS游戏开发】 登陆以及支付SDK总结

先了解接入SDK的各个流程
首先理清楚下面这个登陆模块的流程图

第一步:登陆模块 SDK的客户端上传用户名还有密码,App_id等数据到SDK的服务器
第二步:SDK的服务器将客户ID,User_token等上传到SDK的客户端
第三步:将SDK的客户端的数据上传给游戏的客户端
第四步:游戏客户端拿到数据将数据上传到游戏的服务器
第五步:游戏的服务器将 App_id,用户id,user_token,还有sign等上传到SDK的服务器
第六步:SDK的服务器将验证结果上传给游戏服务器
第七步:游戏服务器将登陆结果返回给游戏客户端(在游戏服务器中我们需要对Sign进行二次验证,然后在将结果返回给客户端)

简单来说就是我们拿到SDK服务器的数据,然后上传到游戏服务器经过处理(可能是字段拼接用md5码的形式和SDK服务器端传过来的sign值作对比,相同则进行下一步,不同则die,或者我们将数据拼接,将拼接的数据用来请求SDK服务器,然后SDK服务器返回结果)最后登录成功进入选服页

ps:SDK客户端或者游戏服务器上传的字段以及验证要求都不一定是一样的 具体看各个SDK接入文档

然后就是支付模块的流程图 此处的AppStore实际上相当于第三方平台的位置 也是因为原理都是一样的 所以就放一个稍微流程清楚的图片

php支付在客户端下单后,将信息传给sdk服务器后,sdk自己支付成功后会调用我们一个支付回调,这就需要我们配置好一个charge的php文件,具体实现是利用sdk返回的参数以及充值本身参数拼接出一个验证签名,对sdk返回的sign做一个校验,成功则返回sucess,否则返回fail

先将游戏资源以及Android工程创建好 因为涉及到公司里面的一些流程 所以就不写具体的流程了

而且大部分的SDK接入都是用的是eclipse接入 所以需要在eclipse里面做工程

1.eclipse导入工程且修改包名 改成渠道需要的包名

修改包名可以参考以下文章
eclipse修改包名

ps:①这一步的目的是因为渠道申请SDK时用的包名需要和我们创建项目的包名一致,且如果包名相同android识别的是同一个app,且包名是一个应用的唯一身份标示。
②如果AndroidManifest.xml没有修改包名在自动打包时会报错。(公司中用的是一套自动打包平台 所以也得需要修改)

2.把第三方库文件(jar等)存放到libs中

一般情况是第三方SDK所需的jar包 有则放 没有可以不放

ps:这一步的目的是导入第三方SDK的资源

3.将游戏资源放在accets文件夹中

ps:在我们自动创建项目的时是没有导入游戏引擎和资源的所以我们在run程序之前需要将游戏引擎和资源导入。

4.platform文件夹里面的platform.lua文件需要在以前的apk文件中复制一份出来导入到platform文件夹中
将platform.lua中的loading_mode = "1",改为0;还需要将ditch_name修改为center的地址

其中: --1为SDK登录;0为内网游戏登录

 config_url= "http://xxxxx.center.xxx.xxxxx.com/api/mobile_config.php", ditch_name ="center", 

5.运行测试一下
游戏是否可以运行

以上是我们公司项目的流程 具体流程可按照每个公司项目需求进行操作

客户端的代码接入

根据SDK中文档提供的要求导入相关SDK的jar包或者导入相关的项目 然后开始做项目的代码的各个接口的接入,主要是根据SDK中提供的各种信息去做接入 在接入时尽量用主线程做接入。

** 以下列出常用的接口代码接入**
1.初始化接口接入

  @Override public void _Qdinit(Activity context) { mContext = context; //游戏初始化接口,可以在里完成SDK的初始化,具体初始化主要参考SDK文档 } 

2.登陆接口

  @Override public void _QdopenLogin() { //游戏的登陆接口 CGamexSDK.login(mContext); } 

需要注意的是有时SDK可能会报错,不能用这个登陆接口需要在后面加一个

 @Override public void _QdopenLogin(int type) { CGamexSDK.login(mContext); } 

3.退出接口

  @Override public void _Qdlogout(String username) { CGamexSDK.logout(mContext); } 

4.支付接口

  @Override public void _QdopenPay(int chargeId, int amount, int price, int pid, int sid, int rid, String platformUserId, String platformUserName, String serverName, String moneyName, float exchange, String roleName, String extra, String ext1, String ext2, String ext3) { // TODO Auto-generated method stub //常见参数说明 //amount :对应的元宝数量 //price :充值金额(Rmb) //sid:所在服务器id //rid :角色id //serverName :所在服务器名称 //moneyName :理解成元宝 //platUserId 用户登录id //pid:玩家账号id //roleName :角色名 //extra :我们自己的订单号 //ext2:用户等级(可选,根据sdk需要而定) //ext3:支付回调(可选) //exchange:(默认兑换比例) //chargeId :商品ID } 

5.角色初始化接口

  @Override public void _QdsetUserInfo(int pid, int sid, int rid, String platformUserId, String platformUserName, String serverName, String roleName, int roleLevel, String extraInfo) { // TODO Auto-generated method stub //上传角色信息接口,游戏角色的创建,登陆,升级都会调用此接口 } 

以下是程序的生命周期的接入

主要是参考SDK中所需的生命周期方法去修改


有一些SDK中返回需要用到他们的返回方法 可以在生命周期中增加这代码

 @Override public boolean dispatchKeyEvent(KeyEvent event) { // TODO Auto-generated method stub if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0 ) { if (this != null || cgamexPlatformSdk.globalGameInfo != null){ CGamexSDK.exit(this, cgamexPlatformSdk.globalGameInfo, new IExitGameListener() { @Override public void onSdkExit() { // 即将退出游戏,如有必要,调用方可以在这里保存游戏数据 Log.i(TAG, "sdk exit"); Log.i(TAG, "gameInfo " + cgamexPlatformSdk.globalGameInfo); } }); } return true; } else { return super.dispatchKeyEvent(event); } } 

** AndroidManifest.xml 配置**

需要将需要的权限和一些SDK组件写入AndroidManifest.xml中,具体需要什么权限和组件看SDK选择。

PHP篇

PHP登陆篇

这边需要熟悉这篇文章开头部分的网络流程

首先说说这个是IOS和Android互通的 因为最近我也负责公司的IOS端SDK开发接入 其实对于PHP来说IOS和Android

是可以公用的 但是要注意Appid 或者appkey有不同的地方需要在php端做switch.case

考虑再三 这部分的代码涉及到公司的隐私 所以不予公开 但是可以提供这个思路去做

基本上是返回值进行拼接然后返回url或者是通过sdk中得到的sign值进行比对 正确返回SDK中需要的字符

然后进行发放元宝以及登录成功

PS:可能需要渠道那边进行php的回调!需要注意的是

然后将项目run一次 看看是否可以登录 以及充值

后续用的是公司这边的自动打包 所以不多写了 差不多流程是这种 但是各个SDK中有许多坑 所以 得要多注意一下!