游戏发行之跨端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的部分实现逻辑,希望对一些小伙伴有帮助。如果有任何问题或更好的方案,欢迎大家评论区一起讨论~

相关推荐
Dnelic-1 小时前
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
android·junit·单元测试·android studio·自学笔记
Eastsea.Chen3 小时前
MTK Android12 user版本MtkLogger
android·framework
比格丽巴格丽抱10 小时前
flutter项目苹果编译运行打包上线
flutter·ios
长亭外的少年11 小时前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
网络安全-老纪12 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
建群新人小猿13 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
1024小神14 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri
兰琛14 小时前
20241121 android中树结构列表(使用recyclerView实现)
android·gitee
Y多了个想法15 小时前
RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526
android·rk3568·触摸屏·tp·敦泰·focaltech·ft5526
lzhdim15 小时前
iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录
ios·iphone