游戏发行之跨端SDK

游戏发行之跨端SDK

大家好,我是村长,本篇文章向大家分享下游戏发行的跨端SDK实现方案。

需求背景

问题

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

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

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

2、 Android SDK和IOS SDK都需要接入一遍,工作量超级加倍(时间成本高)

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

期望

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

分析

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

首先我们得了解游戏开发程序员是如何接入Android/IOS SDK的。

以Unity 游戏接入Android SDK为例子,大致的接入流程是这样的。

第一步、根据Android SDK接口,编写C#与java互相调用的通信层

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

第三步、在android工程接入Android SDK

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

实现方案

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

同时还得编写一个c#的桥接层,根据当前系统来判断调用Android/iOS通信层。这样游戏研发只需要调用和接口C#桥接层代码,就可以实现双端SDK接入。

接下来,就以伪代码的方式,讲一下各部分核心代码的实现 注:因为核心逻辑一致,本文只讲述Android部分。

C#桥接层

c# 复制代码
class XXSDK{
 private 通信层;
 public XXDK(){
    //根据当前系统,选择Android/iOS通信层
    if(当前系统 == Android){
        通信层 = Android通信层();    
    }else if(当前系统 == iOS){
        通信层 = iOS通信层();
    }
 }
 //初始化接口
 public void init(SDKCallback callback){
    通信层.init(callback);
 }
 //登录接口
 public void login(SDKCallback callback){
    通信层.login(callback);
 }
 ......其他接口如此类推,与SDK的接口数一致.........
}

Android通讯层

c# 复制代码
class Android通信层 extends 通信层{
    private SDKCallback initCallback;
    private SDKCallback loginCallback;
    //初始化接口
    public void init(SDKCallback callback){
        this.initCallback = callback
        methodToJava("init");
    }
    //登录接口
    public void login(SDKCallback callback){
        this.loginCallback = callback;
        methodToJava("login");
    }

    //C#调用Java
    public void methodToJava(string method){
        //根据方法名,调用Android工程的SDK方法
        nativeToJava(method);
    }
    //C#接收Java回调
    public void callbackFromJava(string json){
        //接收到的json回调
        string type = 解析json获取当前回调类型;
        int data = 解析json获取当前回调数据;
        if(type == "login"){
            initCallback.callback(data);
        }else if(type == "login"){
            loginCallback.callback(data);
        }
    }
}

Android工程接入SDK

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

java 复制代码
class XXActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //SDK周期函数
        XXSDK.getInstance().onCreta();
        //设置发送给C#的回调
        callbackFromJava();
    }
    //接收C#的调用
    public void methodToJava(String method){
        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(String json){
                String json = 初始化成功返回的json
                javaToC#(json);
            }
            @Override
            void loginSuccess(String json){
                String json = 登录成功返回的json
                javaToC#(json);
            }
            //其他接口如此类推
        });
    }
}

研发接入流程

提供给研发的物料

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

2、 Android SDK(包含完成SDK接入封装的XXActivity类)

研发接入流程

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

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

第三步:根据文档,完成Android工程配置和修改游戏主Activity,继承XXActivity

总结

从上面接入流程不难看出,研发只需要关注C#层的代码调用,不再需要关心C#与java或者C#与Objective-c之间的通信。

上述的方案只是简单的描述核心逻辑,还有很多可以优化的地方,比如

1、 可以通过编写脚本,自动完成Android/iOS工程的配置修改。无需研发手动修改Activity继承。

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

欢迎讨论

由于篇幅有限,上述主要分享了跨端SDK的部分实现逻辑,希望对一些小伙伴有帮助。如果有任何问题或更好的方案,欢迎大家评论区一起讨论~

相关推荐
子非衣11 分钟前
MySQL修改JSON格式数据示例
android·mysql·json
openinstall全渠道统计3 小时前
免填邀请码工具:赋能六大核心场景,重构App增长新模型
android·ios·harmonyos
双鱼大猫4 小时前
一句话说透Android里面的ServiceManager的注册服务
android
双鱼大猫4 小时前
一句话说透Android里面的查找服务
android
双鱼大猫4 小时前
一句话说透Android里面的SystemServer进程的作用
android
双鱼大猫4 小时前
一句话说透Android里面的View的绘制流程和实现原理
android
双鱼大猫5 小时前
一句话说透Android里面的Window的内部机制
android
双鱼大猫5 小时前
一句话说透Android里面的为什么要设计Window?
android
双鱼大猫5 小时前
一句话说透Android里面的主线程创建时机,frameworks层面分析
android
苏金标6 小时前
android 快速定位当前页面
android