【移动应用开发技术】4399支付SDK供flash游戏使用ANE的使用_第1页
【移动应用开发技术】4399支付SDK供flash游戏使用ANE的使用_第2页
【移动应用开发技术】4399支付SDK供flash游戏使用ANE的使用_第3页
【移动应用开发技术】4399支付SDK供flash游戏使用ANE的使用_第4页
【移动应用开发技术】4399支付SDK供flash游戏使用ANE的使用_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】4399支付SDK供flash游戏使用ANE的使用

这两天对Flash游戏如何去接入android平台的SDK做了下研究,做了4399的支付SDK接入的工作,这里与大家分享下。一、ANE的介绍(网络描述也是一大堆,这里描述摘自/myquark/article/details/7904030)AdobeAIRNativeExtension,AdobeAIR的本地扩展,简称ANE。什么叫本地扩展?因为AdobeAIR是跨平台的一个运行时,可以在Windows,Mac,Android,iOS等系统上跑,正是因为其跨平台,所以它本身的功能就有局限性,不可能面面俱到;换句话来说,比如我们想在flash程序中调用一下系统的消息通知功能,但是AIR并没有这个功能,那么怎么办?这就要根据本地平台写段代码,让AIR委托本地平台去执行这段代码,这样就达到了拓展AIR程序的功能。换个角度来看问题,就好像系统有个dll文件,AIR可以去直接调用这个dll文件(这只是一个比方而已,让大家更容易理解,实际上AIR不能直接调用dll文件)。我们可以开发一个Android手机振动程序,然后打包成ANE,这样运行在AIR中的程序就可以调用写好的手机程序了。有了ANE机制,我们就可以开发很多Flash无法完成但是却可以使用的功能。二、ANE开发步骤

ANE的生成需要两个步骤,一个是生成本地的jar包,一个生成SWC库文件,最后进行编译合成。

本文开发工具为fb4.7与eclipse为主1、创建aneAndroid项目,生成本地jar包准备工作1)在eclipse中创建一个android的项目,假定命名为4399PaySDKANE_JAVA;2)将需要依赖的包(4399PaySdk.jar和FlashRuntimeExtensions.jar)添加到项目的libs目录下。3)在项目属性中-javabuildpath-Libraries下,添加以下4399PaySdk.jar(4399的支付sdk包,在/dev/downloadExchange可以下载到)FlashRuntimeExtensions.jar(该包在E:\softinstall\ADOBE\AdobeFlashBuilder4.7\sdks\4.6.0\lib\android可找到)4)在项目属性-JavaBuildPath-OrderandExport下,将游戏SDK及其依赖的JAR包(4399PaySdk.jar)打上勾,确保能够被输出到生成的JAR包中;

准备工作有些多哈。接下来正式进入开发。编码部分:1、编写FREContext的派生类(YJPaymentApiContext.java)packagecom.sj4399.pay.ane;

importjava.util.HashMap;

importjava.util.Map;

importcom.adobe.fre.FREContext;

importcom.adobe.fre.FREFunction;

publicclassYJPaymentApiContextextendsFREContext{

@Override

publicvoiddispose(){

}

@Override

publicMap<String,FREFunction>getFunctions(){

returnnull;

}

}空的文件先不管。2、编写FREExtension的派生类(如:YJPaymentApiExtension),在createContext方法中创建YJPaymentApiContext的实例,并作为该方法的结果值返回。packagecom.sj4399.pay.ane;

importcom.adobe.fre.FREContext;

importcom.adobe.fre.FREExtension;

publicclassYJPaymentApiExtensionimplementsFREExtension{

@Override

publicFREContextcreateContext(Stringarg0){

//TODOAuto-generatedmethodstub

returnnewYJPaymentApiContext();

}

@Override

publicvoiddispose(){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidinitialize(){

//TODOAuto-generatedmethodstub

}

}3、编写一系列FREFunction的派生类(如:YJFInit,YJFLogin……等),以实现每一个接口,每个接口方法用一个FREFunction派生类实现;以YJFInit.java为例packagecom.sj4399.pay.ane;

importcom.adobe.fre.FREContext;

importcom.adobe.fre.FREFunction;

importcom.adobe.fre.FREObject;

importcom.sj4399.pay.YjPaymentApi;

publicclassYJFInitimplementsFREFunction{

privatestaticfinalStringTAG="YJFInit";

@Override

publicFREObjectcall(FREContextcontext,FREObject[]args){

YJPaymentApiContextyjac=(YJPaymentApiContext)context;

YjPaymentApi.getInstance().init(yjac.getActivity());

returnnull;

}

}我们通过context.dispatchStatusEventAsync(callbackString,"");进行回调给as3端。编写完其他接口类即可。4、修改YJPaymentApiContext的getFunctions方法,将实现的每一个FREFunction派生类添加到函数集合中,该函数集合作为该方法的结果值返回;此函数集合即承担接口调用职责packagecom.sj4399.pay.ane;

importjava.util.HashMap;

importjava.util.Map;

importcom.adobe.fre.FREContext;

importcom.adobe.fre.FREFunction;

publicclassYJPaymentApiContextextendsFREContext{

@Override

publicvoiddispose(){

}

@Override

publicMap<String,FREFunction>getFunctions(){

Map<String,FREFunction>mapFunc=newHashMap<String,FREFunction>();

mapFunc.put("getUser",newYJFGetUser());

mapFunc.put("charge",newYJFCharge());

mapFunc.put("destoryLogin",newYJFLogout());

mapFunc.put("openLogin",newYJFLogin());

mapFunc.put("init",newYJFInit());

returnmapFunc;

}

}5、编写ant配置文件build.xml,编译导出JAR包<?xmlversion="1.0"encoding="UTF-8"?>

<projectname="4399paysdk"basedir="."default="exportJar">

<!--设置全局变量-->

<propertyname="src.dir"value="src"/>

<propertyname="classes.dir"value="bin/classes"/>

<propertyname="dist.dir"value="dist"/>

<propertyname="jar.file"value="4399PaySDKANEJava.jar"/>

<propertyname="classes.encode"value="UTF-8"/>

<propertyname="libs.dir"value="libs"/>

<pathid="classpath">

<filesetdir="${libs.dir}">

<includename="**/*.jar"/>

</fileset>

<filesetdir="E:\softinstall\Java\jdk1.6.0_24\jre\lib">

<includename="**/*.jar"/>

</fileset>

<filesetdir="E:\soft\android\adt-bundle-windows-x86\sdk\platforms\android-8">

<includename="android.jar"/>

</fileset>

<filesetdir="E:\softinstall\ADOBE\AdobeFlashBuilder4.7\sdks\4.6.0\lib\android">

<includename="FlashRuntimeExtensions.jar"/>

</fileset>

</path>

<targetname="init">

<!--Createthetimestamp-->

<tstamp/>

</target>

<!--编译源文件-->

<targetname="buildFiles"depends="init">

<echomessage="startbuilding"/>

<deletedir="${classes.dir}"/>

<mkdirdir="${classes.dir}"/>

<javacdeprecation="on"debug="on"encoding="${classes.encode}"srcdir="${src.dir}"destdir="${classes.dir}"classpathref="classpath"source="1.6"target="1.6"includeAntRuntime="false"/>

<copytodir="${classes.dir}">

<!--copyconfigfiles-->

<filesetdir="${src.dir}"includes="**/*.properties,**/*.xml,**/*.bsh,**/*.logic,**/*.hbm"/>

</copy>

</target>

<!--导出jar文件-->

<targetname="exportJar"depends="buildFiles">

<deletedir="${dist.dir}"/>

<!--Createthedistributiondirectory-->

<mkdirdir="${dist.dir}"/>

<jardestfile="${dist.dir}/${jar.file}"basedir="${classes.dir}">

<zipfilesetexcludes="META-INF/*.SF"src="${libs.dir}/4399PaySdk.jar"/>

</jar>

<copytodir="${basedir}/../ane"file="${dist.dir}/${jar.file}"/>

</target>

</project>这样就完成了本地jar包的生成工作了。2、创建flex库项目,生成swc库准备工作:1)创建项目2)属性设置编码部分:这边使用单例模式,创建actionscript代码packagecom.sj4399.pay.ane

{

importflash.events.EventDispatcher;

importflash.events.IEventDispatcher;

importflash.events.StatusEvent;

importflash.external.ExtensionContext;

publicclassYjPaymentApiextendsEventDispatcher

{

publicstaticconstEXTENSION_ID:String="com.sj4399.pay.ane.android";

privatevar_context:ExtensionContext;

privatestaticvar_instance:YjPaymentApi;

publicstaticfunctiongetInstance():YjPaymentApi{

if(_instance==null){

_instance=newYjPaymentApi();

}

return_instanceasYjPaymentApi;

}

publicfunctionYjPaymentApi(target:IEventDispatcher=null)

{

_context=ExtensionContext.createExtensionContext(EXTENSION_ID,null);

if(_context==null){

trace("YjPaymentApi(.as)constructor:_contextisnull,pleasecall'init()'first!");

}

_context.addEventListener(StatusEvent.STATUS,onStatus);

super(target);

}

/**

*SDK初始化

*/

publicfunctioninit(){

_context.call("init",null);

}

/**

*登录

*/

publicfunctionopenLogin(){

_context.call("openLogin",null);

}

/**

*注销

*/

publicfunctiondestoryLogin(){

_context.call("destoryLogin",null);

}

/**

*充值

*amount充值金额

*server分服标识

*mark拓展标记

*/

publicfunctioncharge(amount:int,server:int=0,mark:String=null){

_context.call("charge",amount,server,mark);

}

/**

*获取用户信息*/

publicfunctiongetUser():String{

returnString(_context.call("getUser"));

}

privatefunctiononStatus(e:StatusEvent):void{

//trace("receivedstatusevent:"+e.toString());

vareventObject:Object=JSON.parse(e.code);

varevt:PayCallbackEvent=newPayCallbackEvent(Constants.EVENT_TYPE_4399PAYSDK_CALLBACK,

eventObject.callbackType,eventObject.code,eventObject.data);

this.dispatchEvent(evt);

}

}

}2、编写PayCallbackEventpackagecom.sj4399.pay.ane

{

importflash.events.Event;

/**

*支付SDK回调事件

*/

publicclassPayCallbackEventextendsEvent

{

privatevar_eventType:String;

privatevar_callbackType:String;

privatevar_code:int;

privatevar_data:Object;

publicfunctionPayCallbackEvent(eventType:String,callbackType:String,code:int,data:Object,bubbles:Boolean=false,cancelable:Boolean=false)

{

this._eventType=eventType;

this._callbackType=callbackType;

this._code=code;

this._data=data;

super(eventType,bubbles,cancelable);

}

/**

*获取回调事件类型,Constants中定义了回调事件类型常量(CALLBACKTYE_*),游戏应根据此回调事件类型对事件进行不同的处理。

*@return

*

*/

publicfunctiongetcallbackType():String{

return_callbackType;

}

/**

*获取回调事件状态码,表示SDK返回的执行结果和状态,StatusCode中定义了回调事件状态码常量。不同回调事件类型的事件有自己对应的状态列表,游戏应根据此状态码进行不同的处理。

*@return

*

*/

publicfunctiongetcode():int{

return_code;

}

/**

*获取SDK返回的执行结果数据,不同回调事件类型的事件具有不同的数据结构,游戏应根据回调事件类型来获取相应的数据。

*@return

*

*/

publicfunctiongetdata():Object{

return_data;

}}

}3、定义常量packagecom.sj4399.pay.ane

{

publicclassConstants

{

publicstaticconstEVENT_TYPE_4399PAYSDK_CALLBACK="4399_pay_sdk_callback";

publicstaticconstCB_LOGIN:String="login";

publicstatic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论