ActionScript
TypeScript
JavaScript

对接渠道

发布时间:2016-12-29

  LayaNative通过反射机制为开发者提供了对接渠道的接口, 下面的内容通过实现对接渠道商城(conchMarket)详细的介绍了如何利用反射机制完成对接渠道的工作.

------------------------------ 200块一米的豪华分割线 ------------------------------

对接渠道商城

  LayaNative已经通过反射机制实现JavaScript与原生开发语言(Android下Java, iOS下Objective-C)的互相调用, 开发者只需要完成剩下的关于原生开发语言(Android下Java, iOS下Objective-C)部分的开发工作.


  1.1 iOS系统下的对接渠道商城实现:

    Part.1 - 类名反射:

      通过LayaNative构建出的iOS项目工程中我们会看到PlatformInterface目录下有自动创建的MarketAppStore类, 这个类继承自LayaPlatformInterface类, 并且在resource/config.ini中设置了platformClassName=MarketAppStore, 这样, 我们以login方法为例, 只需要在MarketAppStore.mm中重写LP_Login方法, 就完成了对login方法的二次开发.

    Part.2 - JavaScript调用OC:

      还是以上述的login方法为例, 在JavaScript中, 通过conchMarket类调用的login方法实际上就是在调用LayaPlatformInterface中的LP_Login方法, 而这个过程其实就是JavaScript调用OC的过程.

    Part.3 - OC调用JavaScript:

      继续以上述的login方法为例, 在JavaScript中, 通过conchMarket类调用的login方法执行完成后会执行回调方法, 这个回调方法在LayaPlatformCallback中声明, 然后在LayaPlatformInterface的LP_Login中调用LayaPlatformCallback的LP_LoginCallback方法来实现OC调用JavaScript.

    Part.4 - 代码片段:

        // JavaScript中调用方式: conchMarket.login([参数], [回调函数]) ;
        var sData={type:"test"};
        conchMarket.login(JSON.stringify(sData),function(data){
          console.log(data);
          // TODO 数据处理.
        });


      // MarketAppStore.mm文件中根据自己需求添加相关代码到LP_Login方法中, JavaScript中调用conchMarket.login就会执行LP_Login方法.
      -(void)LP_Login:(NSString*)jsonParam{
          // TODO 调用第三方平台的登陆的登陆接口
          // OC层调用登录结束回调.
          [[LayaPlatformCallback GetInstance] LP_LoginCallback:pJsonString];
      }

------------------------------ 200块一米的豪华分割线 ------------------------------

  1.2 Android系统下的对接渠道商城实现:

    Part.1 - 类名反射:

      通过LayaNative构建出的Android项目工程中我们会看到layaair.game.Market包中有自动创建的MarketMango类, 这个类继承自LayaPlatformInterface类, 我们以login方法为例, 只需要在MarketMango.java中重写LP_Login方法, 就完成了对login方法的二次开发.

    Part.2 - JavaScript调用Java:

      还是以上述的login方法为例, 在JavaScript中, 通过conchMarket类调用的login方法实际上就是在调用LayaPlatformInterface中的LP_Login方法, 而这个过程其实就是JavaScript调用Java的过程. 即: conchMarket.login => LayaPlatformInterface的LP_Login方法.

    Part.3 - Java调用JavaScript:

      继续以上述的login方法为例, 在JavaScript中, 通过conchMarket类调用的login方法执行完成后会执行回调方法, 这个回调方法在LayaPlatformCallback中声明, 然后在LayaPlatformInterface的LP_Login中调用LayaPlatformCallback的LP_LoginCallback方法来实现Java调用JavaScript. 即: LayaPlatformInterface的LP_Login => LayaPlatformCallback的LP_LoginCallback.

    Part.4 - 代码片段:

        // JavaScript中调用方式: conchMarket.login([参数], [回调函数]) ;
        var sData={type:"test"};
        conchMarket.login(JSON.stringify(sData),function(data){
            console.log(data);
            // 数据处理.
        });


        // MarketMango.java文件中根据自己需求添加相关代码到LP_Login方法中, JavaScript中调用conchMarket.login就会执行LP_Login方法.
        public void LP_Login(final String jsonParam)
        {
                // 调用第三方平台的登陆的登陆接口
            // Java层调用登录结束回调.
            LayaPlatformCallback.GetInstance().LP_LoginCallback(objCallBack.toString());
        }


------------------------------ 200块一米的豪华分割线 ------------------------------

2. 对接渠道

  通过LayaNative提供的反射机制, 开发者可以将不同渠道的一些常用的API(如: 登录, 分享, 充值等)在JavaScript层做一套统一的接口, 然后再使用系统原生开发语言根据, LayaNative通过conchMarket全局类将对接渠道相关的API都整合起来, 以方便开发者使用, 如下表:

(注: 接口对应的原生开发语言(Android下Java, iOS下Objective-C)部分的编码工作请参照二次开发中的示例代码自行完成.)

API名称API描述API原型
init初始化MarketconchMarket.init(JSON.stringify(sData),function(data));
login登陆conchMarket.login(JSON.stringify(sData),function(data));
logout登出conchMarket.logout(JSON.stringify(sData),function(data));
switchUser切换用户conchMarket.switchUser(JSON.stringify(sData),function(data));
enterPlatform进入第三方的平台conchMarket.enterPlatform(JSON.stringify(sData),function(data));
enterBBS进入论坛conchMarket.enterBBS(JSON.stringify(sData),function(data));
enterFeedback反馈conchMarket.enterFeedback(JSON.stringify(sData),function(data));
enterAccountMgr进入账户管理conchMarket.enterAccountMgr(JSON.stringify(sData),function(data));
authorize授权conchMarket.authorize(JSON.stringify(sData),function(data));
refreshToken刷新tokenconchMarket.refreshToken(JSON.stringify(sData),function(data));
recharge充值conchMarket.recharge(JSON.stringify(sData),function(data));
buyProps购买道具conchMarket.buyProps(JSON.stringify(sData),function(data));
setRechargeInfo设置充值信息conchMarket.setRechargeInfo(JSON.stringify(sData),function(data));
enterShareAndFeed分享conchMarket.enterShareAndFeed(JSON.stringify(sData),function(data));
enterInvite邀请conchMarket.enterInvite(JSON.stringify(sData),function(data));
getGameFriends获得好友列表conchMarket.getGameFriends(JSON.stringify(sData),function(data));
sendToDesktop发送到桌面conchMarket.sendToDesktop(JSON.stringify(sData),function(data));
sendMessageToPlatform发送消息conchMarket.sendMessageToPlatform(JSON.stringify(sData),function(data));
canSendToDesktop能否pushiconconchMarket.canSendToDesktop(JSON.stringify(sData),function(data));
openTopicCircle打开话题圈conchMarket.openTopicCircle(JSON.stringify(sData),function(data));