2.3.3/2.3.4集成sdkbox admob在iOS真机崩溃

初步排查是 Cocos Creator v2.3.3/2.3.4 的问题,使用 v2.3.2 不会发生异常崩溃。


请大大们检查下 v8 中 _obj 失败的问题。代码就参考:
https://github.com/sdkbox/sdkbox-sample-ccc200/blob/admob/build/jsb-link/frameworks/runtime-src/Classes/AppDelegate.cpp


Cocos Creator v2.3.3
SDKBOX INFO

  _______ ______  _     _ ______   _____  _     _
  |______ |     \ |____/  |_____] |     |  \___/
  ______| |_____/ |    \_ |_____] |_____| _/   \_
 Copyright (c) 2016-2020 SDKBOX Inc. v1.3.1.0
 installed packages:
     v2.6.0.1 sdkboxads
     v2.6.0.1 admob
     v2.6.0.1 googleplayservices

在AppDelegate.cpp中导入头文件,加入下面代码

#ifdef SDKBOX_ENABLED
    se->addRegisterCallback(register_all_PluginAdMobJS);
    se->addRegisterCallback(register_all_PluginAdMobJS_helper);
#endif

se->start()被调用后,会执行上面的注册回调。
register_all_PluginAdMobJS会运行成功,然后register_all_PluginAdMobJS_helper会注册插件监听

bool register_all_PluginAdMobJS_helper(se::Object* obj)
{
    auto pluginValue = sdkbox::getPluginValue(obj, "sdkbox.PluginAdMob");
    auto plugin = pluginValue.toObject();
    plugin->defineFunction("setListener", _SE(js_PluginAdMobJS_PluginAdMob_setListener));

    se::ScriptEngine::getInstance()->clearException();
    return true;
}

但是在上面的 auto pluginValue = sdkbox::getPluginValue(obj, "sdkbox.PluginAdMob"); 调用getPluginValue里,会将 sdkbox.PluginAdMob 分解成 sdkboxPluginAdMob 并通过obj->getProperty方法在 obj 中查找是否包含了名字为他们的属性。

问题是:

因为 obj 对象不同,当去调用 getProperty 查找 PluginAdMob 的属性时,在

  1. 运行iPhone模拟器,会走 jswrapper/jsc/Object.mmObject::getProperty 方法,会成功。
  2. 运行真机,会走 jswrapper/v8/Object.cppObject::getProperty 方法,会失败。

失败在,当断言getProperty返回值是一个对象的时候,真机(v8)却返回了 Undefined,导致游戏崩溃。

v8 的 Object::getProperty 代码如下:

    bool Object::getProperty(const char *name, Value *data)
    {
        assert(data != nullptr);
        data->setUndefined();

        v8::HandleScope handle_scope(__isolate);

        if (_obj.persistent().IsEmpty())
        {
            return false;
        }

        // ...
    }

在判断条件 _obj.persistent().IsEmpty() 时成立,返回了 false。

请问,如何配置才不会出上面的问题?

顶一下。最新的2.3.4仍然有此bug

2.3.4 同问题,请大佬修复

请问有解决方案了吗

目前使用2.3.2版本没问题

使用staging版本不报错了

sdkboxads/admob/googleplayservices v2.6.1.2

命令是

sdkbox import admob 后面加上 --staging

可能会报配置文件错误。

1赞