cocos2dx3.12-lua添加ShareSDK分享功能(朋友圈、QQ空间、微博)

    xiaoxiao2026-03-14  10

    因为以前对接过C++版的ShareSDK,所以这次对接起来比较轻松,然而这次对接lua版本的,所以就没有采用cocos2dx的文档,而是IOS和Android分开对接的。

    先说一下IOS平台:

    打开ShareSDK官网,找到对接IOS平台下的文档,然后按照文档上的介绍一一对接,当代码都集成好之后,在lua文件中,实现与OC互调。

    我是这样实现的,点击一个按钮,调用OC,贴代码:

    local shareItem = cc.MenuItemFont:create("SHAREMENU")

    shareItem:setPosition(cc.p(100, 100))

    local menu = cc.Menu:create(shareItem)

    memu:setPosition(cc.p(0, 0))

    menu:setAnchorPoint(cc.p(0, 0))

    self:addChild(menu)

    local function shareMenuBack(pSender)

    IOSShare()

    end

    shareItem:registerScriptTapHandler(shareMenuBack)

    然后主要实现IOSShare方法

    function MainScene:IOSShare()

    local luaoc = require("cocos.cocos2d.luaoc") --1

    local className = "IOSShare" --2

    local methodName = "share" --3

    local function callback(arg) --4

    print("result oc is ", arg.result) --5

    end

    local args = {callback = "1234", func = callback} --6

    local ok = luaoc.callStaticMethod(classname, methodName, args) --7

    end

    分别说一下上面函数的意思:

    第一行require("cocos.cocos2d.luaoc")是引入luaoc模块,通过观察引擎文件中的代码,可以看出来,lua版本对于对接OC已经进行了封装,因此我们可以直接用,

    第二行是类名,

    第三行是类中的方法名(即我们要调用的方法),第四行是用来回调的函数,也就是调用完OC之后,如果需要回调给lua的,可以在这个函数中进行编码,而参数是在oc回调的时候指定的,

    第五行写了一个arg.result,刚才说了,参数是oc回调的时候指定的,所以这个result就是在oc代码里写的,我写的是result。

    第六行是lua调用oc传入的参数,记得要把回调函数传进入,参数的格式的键值对的形式(与lua调用java不一样)

    第七行是执行(参数是类名,方法名,参数),记住,lua与oc回调只能调用oc的静态函数,因为引擎里只封装了静态函数(callStaticMethod)

    android与oc不同的是,执行的时候,还要传入参数的类型。

    可参见引擎中的源码,比较清晰。

    而IOSShare这个类,就是我们新建的了,这是个OC类,头文件是.h,源文件是.mm,因此在.mm文件中,我们可以用C++和OC实现混编。

    接下来就是在OC中回调lua了

    看一下IOSShare这个类:OC应该导入的头文件我就不说了

    @interface IOSShare : NSObject{

    }

    + (void)share:(NSDictionary*)dict; //这里一定是类方法,也就是静态函数

    @end

    //源文件

    @implementation IOSShare

    + (void)share:(NSDictionary*)dict

    {

    //需要分享的代码,请参见ShareSDK IOS文档

    int nFuncID = [[dict valueForKey:@"func"] intValue]; //"func"就是我们传入的参数的键,现在是获取它的值,也就是回调函数的id

    //下面是OC回调lua

    LuaObjcBridge::pushLuaFunctionById(nFuncID); //这里使用LuaObjcBridge这个类,因此需要包含头文件#include "platform/ios/CCLuaObjcBridge.h"

    //注意:如果这个头文件找不到的话,请包含这个类的绝对路径

    LuaValueDict item;

    item["result"] = LuaValue::stringValue("success");

    LuaObjcBridge::getStack()->pushLuaValueDict(item);

    LuaObjcBridge::getStack()->executeFunction(1);

    LuaObjcBridge::releaseLuaFunctionById(nFuncID);

    }

    @end

    这样就可以实现oc回调lua了。

    android分享的原理跟这个差不多,先到ShareSDK找android对接的相关文档,然后利用lua和java互调进行调用,关于互调,可参见引擎代码,有实例,很方便,也很简单

    唯一的特点就是,只能调用oc和java的静态方法。

    好了,就先说到这里,关于lua下ShareSDK分享功能,有不懂的童鞋可以给我留言,也请大神指教。

    转载请注明原文地址: https://ju.6miu.com/read-1307935.html
    最新回复(0)