探索flutter框架开发的app在移动应用市场的潜力与挑战
858
2022-10-22
cocos的一个简单的支付框架
说明
1. 起源
最近在帮公司接入渠道支付SDK的小姐姐分担工作,分给我一个游戏,让我更新渠道的支付SDK,然后给了我一张表,里边密密麻麻的有三十几个渠道包,看得我头皮发麻。在细细的研究了公司项目(单机)的支付流程,为了提高代码的复用性和降低耦合性(主要是各种渠道的import xxxx.java太烦人)。写了这么一套的东西,主要是以插件的形式来管理各种支付渠道,需要用到哪个渠道的支付就引入哪个渠道的支付java文件就好了。这种代码组织方式主要是还是从前段时间使用的SDKBOX获取的灵感.
使用这个架构的好处如下
代码的复用性更强了,写完的代码保存下来,下次哪个项目需要直接复制过去就好了代码的耦合性更低了,整个项目的支付只和SDKCtrl.java打交道,避免了各种渠道提供的各种奇怪的api
2.目录说明
src/SDKAbstract.java
所有渠道插件都要继承自这个Java文件,他提供了基本的
渠道插件初始化发起支付退出游戏(如果渠道SDK支持的话)显示/关闭广告(如果渠道SDK支持的话)
src/SDKConfig.java
渠道SDK的基本配置
src/SDKCtrl.java
项目调用渠道SDK的操作全部都是通过这个java文件,所有渠道的特性对于调用者来说是透明的,调用者并不关心渠道SDK的具体操作是怎么样的。他提供的功能如下
初始化渠道的SDK调用渠道的支付调用渠道的退出调用渠道的显示广告在Cocos2dxActivity的生命周期内调用相应的生命周期事件(onCreate,onPause 等等)
src/SDKCtrlDelegate.java
需要调用者继承这个delegate,并实现购买结束时候的回调
src/PluginXXX.java
各种渠道支付插件的具体实现。请注意本例子已经提供了一些渠道支付写好的插件,但是接入渠道支付时候的AndroidManifest.xml的修改,以及手动拷贝渠道支付需要的jar包还是需要自己做的。有可能我上传的版本会落后于渠道的新版本哦,请小心
每个支付渠道都会有自己的appID ,appKey之类的东西,使用相应的插件之前,请修改源码里对应的appid之类的东西。
每个支付渠道都会有自己的appID ,appKey之类的东西,使用相应的插件之前,请修改源码里对应的appid之类的东西。
每个支付渠道都会有自己的appID ,appKey之类的东西,使用相应的插件之前,请修改源码里对应的appid之类的东西。
(重要的事情说三遍)
3. 使用(这里以百度的单机SDK举例)
假设我们的Activity类名字叫 TestActivity,首先这个TestActivity需要继承自Cococs2dxActivity并实现SDKCtrlDelegate的方法
public class TestActivity extends Cocos2dxActivity implements SDKCtrlDelegate{ @Override public void onFinishPurchase(boolean result, String message, int payIndex, String payCode) { if(result) Log.d("SDKCtrl", "支付成功了,支付成功的序号是"+payIndex); else Log.d("SDKCtrl","支付失败了,失败的原因是"+message); } }
第二步在onCreate函数里初始化我们的SDKCtrl和需要使用到的渠道SDK
protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); SDKCtrl.init(this, this, "Baidu"); SDKCtrl.initSDK("Baidu",this.getSDKConfig("Baidu")); }
getSDKConfig函数如下
public static SDKConfig getSDKConfig(String sdkName) { HashMap
接下来实现生命周期的函数,这里只举2个函数,其他的onPause之类的类比
@Override protected void onDestroy() { super.onDestroy(); SDKCtrl.onDestroy("Baidu"); android.os.Process.killProcess(android.os.Process.myPid()); } @Override protected void onRestart() { super.onRestart(); SDKCtrl.onRestart("Baidu"); }
接下来就是比较重要的发起支付了
void pay(int payIndex) { //payIndx 就是 getConfig函数里的key ,这里的1对应的就是 “商品1 " 计费ID是"15735" SDKCtrl.initiatePurchase(1, "Baidu"); }
其他功能,比如退出游戏,显示广告,等等的详见SDKCtrl.java的源码
4. 注意(重要的事情说三遍)
SDKCtrl本身没有考虑过cocos的opengl线程和主线程的问题,请确保发起支付之类的调用和调用购买后的回调的线程安全的问题
SDKCtrl本身没有考虑过cocos的opengl线程和主线程的问题,请确保发起支付之类的调用和调用购买后的回调的线程安全的问题
SDKCtrl本身没有考虑过cocos的opengl线程和主线程的问题,请确保发起支付之类的调用和调用购买后的回调的线程安全的问题
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~