`

Umeng Sdk整合的那些事

 
阅读更多
本来想整合 umeng 的 SDK 来对自己的应用进行分析,但是在整合的过程中遇到了一些问题,现记录如下:

首先,默认的 umeng SDK 是基于 objective-c 的,这就导致不能直接在 cocos2d-x 中使用。在 cpp 文件中不能调用 objective-c,一定要转成 mm 结尾的。如果这样的话,那么在之后需要加入记录事件的地方就很麻烦了。但好消息是,从 2.1.3 版本开始,cocos2d-x 中多加了一个 plugin 目录,可以帮助我们处理这些事情,plugin 的概念很广,我这里暂时仅仅限于分析的 SDK,它还包括 IAP 的东西。

所以第一步我需要做的就是将 plugin 目录下面的 protocols 和 plugins/umeng 给加到我的工程里面来。这个事情还是很好办的。就像下面的这个图的样子,其中MyApplication 包含MyLibrary。



对应的xcode工程文件都在proj.ios目录下面。

之后我们需要选择我们的主应用程序,设置 target dependency 就如图中显示的那样。

依赖设置好以后,我们就需要将连接的库文件也包含进来。这个在图中的Link Binary with Libraries中。

这才是万里长征的第一步,接下来我们需要加入实际的代码,一般而言,我们需要在自己的AppDelegate.cpp 中加入如下的代码:

PluginProtocol *plugin = PluginManager::getInstance()->loadPlugin("AnalyticsUmeng");
g_analytics = dynamic_cast<ProtocolAnalytics*>(plugin);

g_analytics->setDebugMode(true);
g_analytics->setCaptureUncaughtException(true);
g_analytics->startSession(APPKEY);


g_analytics是个全局变量,声明啥的就请自己脑补吧。当然可以更优雅的来个singleton,这个就看自己的个人品味啦。

那么这样就可以了吗?有没有问题啊?

实际遇到的问题是发现g_analytics为空,也就是说loadPlugin()没有成功。于是接着代码找线索,发现原来它是利用 AnalyticsUmeng 的一个静态类成员变量来将 plugin 串接起来,放到一个 map 中去,但不知道什么原因,由于我在代码中没有直接使用 AnalyticsUmeng 这个类,libPluginUmeng.a竟然没有被链接进去,从而导致出错。一度我还以为是全局变量的初始化顺序导致的错误。知道这个原因之后,我甚至不链接这个库,竟然还可以编译,链接通过,怪哉。不过解决方案也很简单,就是显示的调用该类即可,比如在上面的代码上加入如下代码:

AnalyticsUmeng *umeng = dynamic_cast<AnalyticsUmeng*>(g_analytics);
umeng->setDefaultReportPolicy(AnalyticsUmeng::BATCH_AT_LAUNCH);


好,问题还没有结束,之后我发现还是会报错,loadPlugin()返回NULL。

进一步分析,定位到在 Protocol 的项目中,利用到了这样的一句话:id obj = [[NSClassFromName(name) alloc] init]。但结果 obj 一直返回 nil。这里的 name 是正确的 UmengWrapper。

真是百思不得其解,一度还怀疑是不是库又没有链接上,从而导致 objective-c 无法在动态环境下获得我们在另外一个项目中的类。

最后的最后,还是靠我们万能的 stackoverflow 解决了这个问题,原来是我们的 cocos2d-x 主要是 cpp 的代码,它在链接静态库的时候没有默认加上 -ObjC 的这个选项,(需要加到Other Linker Flags),从而导致 objective-c 的一些动态特性没办法使用。这个文章的 stackoverflow 链接 在此。如果你想用到静态库的 category 特性,那么也需要将这个 flag 打开,具体的解释在苹果官方的文档里。

故事到此就完美的结束了吗?王子和公主幸福在一起了吗?古语有云,一波三折嘛。。。

调试又直接出错,出错的位置在 AVAudioPlayer 中,一圈搜索下来,貌似是由于它在播放音乐文件的时候会去查它的 tag,但是很可惜,没有 tag,内部出 exception,同时,由于我在前面的调试过程把捕获所有的exception打开了,所以一到这个地方就直接给我停住了,出现了比较奇怪的样子。解决方案也很简单,去掉捕获所有异常的选项,或者给你的 mp3 加上正确的 meta data 信息。

至此,终于完成了集成工作,可以在 umeng 的后台看到自己调试的信息了。
  • 大小: 190.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics