本来想整合 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
分享到:
相关推荐
mvn-repo-umeng umeng sdk发行版的Maven回购
源码参考,欢迎下载
umeng sdk 友盟统计分析 节约开发成本。云端聚合QQ空间、新浪微博、腾讯微博、人人网、豆瓣和微信 社交平台的分享功能; 快速获得全面功能。支持使用六大平台账户登录,并提供评论、喜欢等其他社交 功能; 详尽的...
sdk Java android 的安装必须的工具
umeng_ios_social_sdk_4.1_custom
umeng_android_social_sdk_5.2.1_custom
umeng社会化分享demo,最新的官方资源。分享平台:微信,新浪微博、QQ、QQ空间
umeng_android_social_sdk_5.1.2_custom
安卓Android源码——umeng_sdk_201312301505_update.rar
安卓Android源码——umeng_sdk_201312301505_fb_update.rar
umeng统计和更新SDK技术测评,参考官网后,自己写的简单demo,内含文档和demo源码。笔者水平有限,欢迎相互交流。由于博文暂未通过审核,不想下载的可自查博文。
Android应用源码之umeng_sdk_201312301505_update.zip项目安卓应用源码下载Android应用源码之umeng_sdk_201312301505_update.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合...
安卓Android源码——umeng_sdk_201312301505_fb_update_analytics.rar
Android应用源码之umeng_sdk_201312301505_fb_update_analytics.zip项目安卓应用Android应用源码之umeng_sdk_201312301505_fb_update_analytics.zip项目安卓应用 1.适合学生毕业设计研究参考 2.适合个人学习研究参考...
umeng友盟消息推送sdk集成
umeng_uapp 面向Flutter的Umeng U-App SDK。用法import 'package:umeng_uapp/umeng_uapp.dart' ;UmengUapp . init ( "5b4ef081f29d9868b9000189" );入门该项目是Flutter的起点,Flutter是一个特殊的程序包,其中包括...
Android快速SDK(24)第三方分享UmengShare【肌肉记忆,分钟接入】
友盟分享android Demo和SDK
Laravel开发-umeng Umeng Laravel软件开发包
android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台