游戏发行之跨端SDK

我们好,我是村长,本篇文章向我们共享下游戏发行的跨端SDK完结计划。

需求布景

问题

游戏开发程序员收到接入SDK需求时,往往需求分别接入AndroidSDK和iOSSDK,

假如你是一个游戏开发程序员,这时候就面临了以下几个问题

1、 我没有触摸过Android和IOS,还得学习JAVA和Objectiv-c语言和双端开发知识(学习本钱高)

2、 AndroidSDK和IOSSDK都需求接入一遍,作业量超级加倍(时间本钱高)

3、 日后如果接口有改动,需求维护迭代双端接口(维护本钱高)

期望

遇到上面的问题时,你是不是想具有一款SDK,能够不学习Java和Objective-c,仅仅只需求用游戏开发语言,就能够完结android和Ios双端SDK接入。

分析

针对上面游戏开发程序员遇到的问题,作为一个SDK开发当然要满意他们的需求。

首要我们得了解游戏开发程序员是怎么接入Android/IOSSDK的。

以Unity游戏接入AndroidSDK为比方,大致的接入流程是这样的。

第一步、依据AndroidSDK接口,编写C#与java互相调用的通讯层

第二步、在Unity游戏工程导出一个android工程

第三步、在android工程接入AndroidSDK

游戏发行之跨端SDK

注:iOSSDK的接入流程与AndroidSDK接入流程类似,只不过变成了C#和Objective-c通讯和导出iOS工程。

完结计划

依据上面的流程,如果我们想要做一款跨端SDK,且不需求研制学习客户端原生开发语言。就需求把替代研制完结红色框的作业。

游戏发行之跨端SDK

一同还得编写一个c#的桥接层,依据当时体系来判别调用Android/iOS通讯层。这样游戏研制只需求调用和接口C#桥接层代码,就能够完结双端SDK接入。

游戏发行之跨端SDK
接下来,就以伪代码的办法,讲一下各部分中心代码的完结 注:由于中心逻辑共同,本文只叙述Android部分。

C#桥接层

classXXSDK{
private通讯层;
publicXXDK(){
//依据当时体系,选择Android/iOS通讯层
if(当时体系==Android){
通讯层=Android通讯层();
}elseif(当时体系==iOS){
通讯层=iOS通讯层();
}
}
//初始化接口
publicvoidinit(SDKCallbackcallback){
通讯层.init(callback);
}
//登录接口
publicvoidlogin(SDKCallbackcallback){
通讯层.login(callback);
}
......其他接口如此类推,与SDK的接口数共同.........
}

Android通讯层

class Android通讯层 extends 通讯层{
    privateSDKCallbackinitCallback;
    privateSDKCallbackloginCallback;
    //初始化接口
    public void init(SDKCallbackcallback){
        this.initCallback=callback
        methodToJava("init");
    }
    //登录接口
    public void login(SDKCallbackcallback){
        this.loginCallback=callback;
        methodToJava("login");
    }
    //C#调用Java
    public void methodToJava(stringmethod){
        //依据办法名,调用Android工程的SDK办法
        nativeToJava(method);
    }
    //C#接收Java回调
    public void callbackFromJava(stringjson){
        //接收到的json回调
        stringtype=解析json获取当时回调类型;
intdata=解析json获取当时回调数据;
        if(type== "login"){
initCallback.callback(data);
        }else if(type== "login"){
loginCallback.callback(data);
        }
    }
}

Android工程接入SDK

这块我们也需求写一个Activity类来完结SDK接入。研制只需求依据文档,修正游戏主Activity承继即可(这一步就是为了解决游戏研制学习java后,才能接入SDK的学习本钱)

class XXActivity extends Activity{
    @Override
    protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
        //SDK周期函数
        XXSDK.getInstance().onCreta();
        //设置发送给C#的回调
        callbackFromJava();
    }
    //接收C#的调用
    public void methodToJava(Stringmethod){
        if(method.equal("init")){
            XXSDK.getInstance().init();
        }else if(method.equal("login")){
            XXSDK.getInstance().login();
        }
        //其他接口如此类推
    }
    //设置发送给C#的回调
    public void callbackFromJava(){
        XXSDK.getInstance().setCallback(new SDKCallback(){
            @Override
            void initSuccess(Stringjson){
Stringjson=初始化成功回来的json
javaToC#(json);
            }
            @Override
            void loginSuccess(Stringjson){
Stringjson=登录成功回来的json
javaToC#(json);
            }
            //其他接口如此类推
        });
    }
}

研制接入流程

提供给研制的物料

1、 C#代码(XXSDK.cs,XXAndroidSDK.cs)

2、 AndroidSDK(包含完结SDK接入封装的XXActivity类)

研制接入流程

第一步:将C#代码复制到工程,并调用XXSDK.cs中的办法

第二步:生成Android工程,并导入AndroidSDK

第三步:依据文档,完结Android工程装备和修正游戏主Activity,承继XXActivity

总结

从上面接入流程不难看出,研制只需求重视C#层的代码调用,不再需求关怀C#与java或者C#与Objective-c之间的通讯。

上述的计划仅仅简略的描述中心逻辑,还有许多能够优化的地方,比方

1、 能够通过编写脚本,自动完结Android/iOS工程的装备修正。无需研制手动修正Activity承继。

2、 除了android/iOS外,还可集成小游戏SDK。完结一次接入,多端SDK一同接入的目的。

欢迎讨论

由于篇幅有限,上述首要共享了跨端SDK的部分完结逻辑,期望对一些小伙伴有协助。如果有任何问题或更好的计划,欢迎我们谈论区一同讨论~