`

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
分享到:
评论

相关推荐

    Laravel开发-umeng-laravel5

    下面将详细介绍Laravel框架以及如何在Laravel项目中整合Umeng SDK。 **Laravel框架** Laravel是PHP世界中的一款流行且功能强大的Web应用开发框架,它遵循MVC(模型-视图-控制器)设计模式,旨在提高开发效率,降低...

    Laravel开发-umeng

    【Laravel开发与Umeng整合】 在现代移动应用开发中,数据分析和推送服务扮演着至关重要的角色。Umeng(友盟)是中国领先的移动开发者服务提供商,提供了包括统计分析、消息推送、社会化分享等功能,帮助开发者更好...

    Laravel开发-umeng-push

    然后,可以通过Composer安装相应的Laravel Umeng Push SDK或者手动添加SDK到项目中。配置好服务提供者和服务别名,确保Laravel能识别并使用Umeng的API。 4. **配置与认证**: 配置Laravel的环境变量或`.env`文件,将...

    完整的意见分享Umeng

    通过集成Umeng SDK,开发者可以轻松地在应用内添加分享按钮,支持包括微信、QQ、微博等主流社交平台在内的多种分享渠道,从而扩大内容的传播范围,提升用户的参与度和活跃度。 二、快速部署与运行 "下载下来可以...

    AdviewSDK历史版本记录

    总结来说,Adviewv3.2.1版本SDK接入涉及了从理解SDK核心功能、遵循接入指南,到跟踪版本变化、调试示例代码,再到整合第三方服务等多个环节。深入研究这些资料,开发者不仅可以熟练掌握AdviewSDK的使用,还能根据...

    友盟消息推送Java springboot

    &lt;artifactId&gt;umeng-message-server-sdk 最新版本号 ``` 请替换“最新版本号”为当前友盟服务器SDK的最新稳定版本。 接下来,我们需要在SpringBoot应用中配置友盟的相关参数,如AppKey、AppSecret等。这些参数...

    Android-umeng友盟分享快速集成库

    通过这个"Android-umeng友盟分享快速集成库",开发者可以轻松地整合QQ和微信的分享和登录功能,提升应用的用户体验。同时,友盟的其他服务如数据分析和推送通知也是优化应用的重要工具,值得开发者深入了解和利用。

    友盟sdk工具

    在本文中,我们将深入探讨友盟SDK的主要特性、使用方法以及如何将其整合到Android应用程序中。 友盟SDK的核心功能包括数据分析、推送服务、社会化分享和广告联盟等。其中,社交功能是开发者关注的重点之一。umeng_...

    java友盟sdk服务端.zip

    在IT行业中,友盟(Umeng)是一家提供全方位移动应用数据分析和运营支持的服务平台,尤其在SDK集成方面具有广泛的应用。对于"java友盟sdk服务端.zip"这个压缩包,我们可以推断它包含了友盟提供的Java SDK,专门针对...

    android 一键分享整合文档

    - Android的分享功能可以通过集成第三方库来简化,例如`ShareSDK`和`UMeng Social SDK`。这些库已经集成了多个社交平台,提供了统一的API,简化了开发者的工作。 - `ShareSDK`是由友盟提供的一个开源分享组件,...

    Android-友盟第三方登录、分享实现 完整实例源码

    在Android应用开发中,集成第三方登录...通过研究这个实例源码,你可以更深入地理解如何在实际项目中整合友盟的第三方登录和分享功能。在实际开发中,应根据项目需求进行适当的定制和优化,确保用户体验的顺畅和安全。

    QQ配置文件

    QQ配置文件指的是与QQ登录相关的配置和资源集合,通常用于集成QQ社交功能到移动应用中。在本例中,我们看到的"友盟QQ登录的包"是一个名为...通过正确理解和使用这个SDK,开发者可以快速地将QQ登录整合进自己的应用中。

    友盟分享登录

    通过这个SDK,开发者可以快速地将社交平台的登录和分享功能整合到自己的应用程序中,提高用户体验并促进用户之间的互动。以下是关于友盟分享登录SDK的一些关键知识点: 1. **SDK集成**:首先,开发者需要在项目中...

    AndroidDataCollect:像Umeng,Cobub Razor

    总结,AndroidDataCollect项目可能是一个类似于Umeng和Cobub Razor的开源数据分析解决方案,开发者可以通过学习Java和Android SDK来实现自己的数据收集功能。这个过程中,理解和应用数据收集的最佳实践,以及尊重...

    友盟分享,最新,arm64

    描述中提到的“QQ,微信,来往,易信,新浪”是几个在中国非常流行的社交平台,它们的API已经被友盟整合进了其SDK中。开发者通过集成这个SDK,可以一键实现用户在应用内向这些平台发布内容,极大地提升了用户体验和...

    使用友盟快速集成QQ分享与QQ授权登录

    友盟(UMeng)作为国内知名的第三方移动应用分析与推广平台,提供了便捷的SDK和服务,使得这一过程更为高效。 首先,我们需要了解友盟(UMeng)的角色。友盟为开发者提供了一整套的解决方案,包括数据分析、用户...

    umsdk_Android_analytics_v5.6.7.zip_android

    `友盟统计分析SDK集成文档Android.url`是一个链接,指向详细的集成指南,开发者可以从中学习如何将友盟的统计功能整合到自己的Android项目中。这份文档通常会涵盖设置环境、添加依赖库、初始化SDK、设置权限、处理...

    友盟自动更新.docx

    【友盟自动更新 SDK】是专门为安卓应用设计的一款自动更新工具,它可以帮助开发者轻松地集成到自己的应用程序中,实现无缝的版本更新...通过正确集成并调用其接口,开发者可以轻松地将自动更新功能整合到自己的应用中。

    umengplus-CC_Demo_Android-master_java_

    "umengplus-CC_Demo_Android-master_java_" 这个标题表明这是一个关于Umeng Plus在Android平台上的示例项目,特别关注...同时,这也可能是对那些希望将数据分析与业务流程管理整合到自己应用中的开发者的一个宝贵资源。

    友盟第三方

    1. **友盟SDK**:`umeng_android_social_sdk_5.1.2_custom` 文件名表明这是友盟提供的Android社交SDK的一个版本,版本号为5.1.2,且可能是定制版。友盟SDK是开发者集成到自己应用中的工具包,它包含了各种服务的接口...

Global site tag (gtag.js) - Google Analytics