在我们实际开发过程中,经常会遇到需要使用第三方SDK的情况。比如我们常用的:友盟,TalkingData之类的统计分析SDK;移动MM,电信爱游戏之类的计费SDK;个推,百度推送之类的推送SDK。诸如此类的在iOS平台也有一大堆。那么在使用Quick-Cocos2d-x的过程中怎么把它们接入到游戏中呢?我们这几篇文章就来介绍下。

  • 引擎版本: Quick-Cocos2d-x 3.3
  • 开发系统: Windows 7 64bit

目前接入方式

目前接入SDK的方式有很多种,我们这里只说下对Cocos2d-x常用的几种:

  1. 使用AnySDK来接入;
  2. 使用第三方SDK提供的Cocos2d-x版本来接入;
  3. 使用第三方SDK提供的Java或者OC版本。

AnySDK是Cocos2d-x官方提供的一套很完善的接入第三方SDK的工具。它接入简单、方便、快捷,而且支持众多的SDK,能够实现一键式的接入。官网请点击这里,另外它还有非常详尽的文档,请点击这里。如果是企业用户的话,推荐使用AnySDK,它本身已经支持了诸如斯凯、移动游戏基地、GooglePlay、91等渠道,也支持用户、支付、广告、分享、统计和推送的大量SDK。对于打包和加固也基本上是一次配置,全程通用了。因为企业渠道的打包往往是几十上百个包,如果使用AnySDK,在一次配置完成之后,每次都只需要轻轻一点就能够在旁边喝茶。这样无疑为企业节约了大量的开发时间和人力成本。




而对于个人或者小团队来说,往往支持的渠道有限,限于开发成本的原因,需要支持的SDK比较少,而且对包的限制也会比较大,这种时候使用2,3种方式相对来说显得更为经济和简单,并且也更为灵活和方便。难点在于需要自己编写集成代码。对于第2种方法,如果是使用C++语言的话来编写游戏的话使用会很方便,如果是使用Lua的话,需要自己写一层C++到Lua的封装。而目前很多的第三方SDK都提供了Cocos2d-x的版本。大部分时候我们都只需要下载一个第三方SDK的C++版本。然后简单的集成一下,就可以在C++代码中直接调用了。

但是又的情况下第三方SDK C++版本对接口的支持可能不如对原生平台版本(Java或者OC)支持的完善,那么这个时候我们更多的可能会使用原生平台版本,中间自己提供一层接口来供C++调用,这也就是我们这里的第3种方式。

接入示例

接下来我们以友盟为例来讲下怎么使用。AnySDK的讲解我们在这里先不讲,大家可以参考官方网站上的文档。

接入Cocos2d-x版本的友盟

首先我们来看下怎么接入友盟的Cocos2d-x版本。

  1. 注册账号
    打开友盟官方网站:http://www.umeng.com/。注册账号并且申请一个应用,如果所示:
  2. 这里需要注意的是如果你是使用Cocos2d-x版本的话最好把那个“使用Cocos2dx插件”的选项勾上,避免产生不必要的错误。
    信息填写完成后点击“提交并获取AppKey”,会显示一些创建出来的游戏的信息。
  3. 这里的信息就是我们需要在游戏里使用的appkey。
  4. 下载SDK
    在账号注册完成后,我们打开友盟的SDK下载界面:http://dev.umeng.com/game_analytics/game-c2d/sdk-download,点击“SDK下载”,下载SDK到本地。
  5. 集成到C++里
  • Android
  • 将libMobClickCpp文件夹复制到[COCOS2DX_ROOT]/external目录下,并且将mobclickcpphelper.jar复制到Android工程的libs目录中,
  • 改你的工程Android.mk文件在LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static后添加LOCAL_WHOLE_STATIC_LIBRARIES += mobclickcpp_static,在$(call import-module,cocos2dx)后添加$(call import-module,libMobClickCpp)。如果你的工程没有使用libcurl库,还要在相应位置添加$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)(cocos2d-x 3.0以上请替换为$(call import-module,curl/prebuilt/android))和LOCAL_WHOLE_STATIC_LIBRARIES += cocos_curl_static
  • 添加权限

在AndroidMainfest.xml文件中添加以下权限

<uses-permission android:name=             "android.permission.ACCESS_NETWORK_STATE"             ></uses-permission>            
             <uses-permission android:name=             "android.permission.INTERNET"             ></uses-permission>            
             <uses-permission android:name=             "android.permission.READ_PHONE_STATE"             ></uses-permission>            
             <uses-permission android:name=             "android.permission.ACCESS_WIFI_STATE"             ></uses-permission>
  • 添加Java代码
 MobClickCppHelper.init(             this             );
  • 在游戏主main.cpp中加入如下代码:
#include "MobClickJniHelper.h"            
                          ...            
             extern              "C"            
             {            
                          jint JNI_OnLoad(JavaVM *vm,              void              *reserved)            
                          {            
                          JniHelper::setJavaVM(vm);            
                          umeng::MobClickJniHelper::setJavaVM(vm);            
                          return              JNI_VERSION_1_4;            
                          }            
             }


  • iOS
    iOS的集成就简单很多了。
  • 所需文件: libMobClickCpp.a(请查看C++ Standard Library的设置,xcode默认的Compiler Default是libstdc++,如果您的项目正在使用libc++编译请使用libMobClickCppWithLibCpp.a) MobClickCpp.h
  • 请在你的工程目录结构中,右键选择Add->Existing Files…,选择这两个文件。或者将这两个文件拖入XCode工程目录结构中,在弹出的界面中勾选Copy items into destination group's folder(if needed), 并确保Add To Targets勾选相应的target。 如果你的工程没有使用libcurl库,还要把[COCOS2DX_ROOT]/external/curl/prebuilt/ios/libcurl.a)按照上面的方法加入到工程中。

集成到这里就算搞定了,接下来的就是使用了。使用的话可以直接参考官方的API文档。

好了,我们先说到这里,后面的章节我们将会将怎么把C++接口转成Lua接口,和怎么在Lua中直接调用Java版本的友盟。