最近在帮助开发者集成友盟社会化组件SDK的过程中,发现Cocos2d-x游戏在集成过程中不适很顺利,因此整理了一篇关于Android Cocos2d-x游戏集成友盟社会化分享组件的文章,按照本文集成,就可以轻松的在游戏中具有分享到微博(包括新浪微博、微信、QQ空间、人人网等平台)等功能。由于本人水平有限,有什么错误或者有更好的方法希望大家指出,以帮助其他开发者更好的集成。
友盟社会化组件需要依赖于Activity,因此需要在你Cocos2d-x游戏的Activity ( 集成自Cocos2dActivity )中进行调用, 步骤如下 :
前提 :添加友盟社会化组件 Android SDK的jar文件、res资源以及相应的AndroidManifest.xml配置, 参考友盟社会化组件SDK在线文档 ;
步骤一、在游戏Activity中定义一个静态方法, 如下示例 :
package com.umeng.game ; ...... public class UmengGameActivity extends Cocos2dxActivity { /** * Handler, 用于包装友盟的openShare方法,保证openShare方法在UI线程执行 */ private static Handler mHandler = null; /** * 保存当前Activity实例, 静态变量 */ private static Activity mActivity = null; /** * 友盟Social SDK实例,整个SDK的Controller */ private static UMSocialService mController = UMServiceFactory.getUMSocialService( "com.umeng.cocos2dx", RequestType.SOCIAL); /** * onCreate方法 */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = this; } /** * 载入cocos2d-x的c++代码,我的.so库命名为umenggame。注意,这里要修改成你自己的.so库名称 */ static { System.loadLibrary("umenggame"); } /** * @Title: openShareBoard * @Description: * 调用友盟的openShare方法, 打开分享平台选择面板 * @throws */ public static void openShareBoard() { mHandler = new Handler(Looper.getMainLooper()); mHandler.postDelayed(new Runnable() { @Override public void run() { if (mActivity != null) { /** * 设置新浪微博、QQ空间、腾讯微博的Handler,进行SSO授权 * * 注意 : 新浪平台支持SSO则需要把友盟提供的com.sina.sso拷进src里面, * 需要将友盟提供的libs、res文件拷贝到您的工程对应的目录里面. */ mController.getConfig().setSsoHandler(new SinaSsoHandler()); mController.getConfig().setSsoHandler(new QZoneSsoHandler(mActivity)); mController.getConfig().setSsoHandler(new TencentWBSsoHandler()); // 打开友盟的分享平台选择面板 mController.openShare(mActivity, false); } } }, 100); } }工程目录如下所示 :
图 1
步骤二、在jni层中实现调用Android中的UmengGameActivity的openShareBoard方法.
例如在这里我们命名为openUmengShareJni , 所在头文件为”yourjni.h”, 实现文件为YourJni.cpp.
…... // 实现代码 void YourJni::openUmengShareJni() { JniMethodInfo methodInfo ; // 获取UmengGameActivity的静态方法openShareBoard bool isHave = JniHelper::getStaticMethodinfo( methodInfo, “com/umeng/game/UmengGameActivity”, “openShareBoard”, “()V”) ; if ( isHave ) { // 实际调用UmengGameActivity中打开umeng分享平台选择面板 methodInfo.env->CallStaticVoidMethod( methodInfo .classID, methodInfo.methodID ); } } …...
…... include “yourjni.h” …... bool UmengGameScene::init() { …... …... /** * 创建分享按钮 * 参数1 : 正常状态的图片 * 参数2 : 按下去时的图片 * 参数3 : 回调函数所在的类 * 参数4 : 按钮点击触发的函数 */ CCMenuItemImage *umengShareBtn = CCMenuItemImage::create( "start_normal.png", "start_pressed.png", this, menu_selector(AppDelegate::openUmengShare)); // 设置按钮显示位置 umengShareBtn->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20)); // 将按钮添加到菜单中 CCMenu *menu = CCMenu::menuWithItems(umengShareBtn, NULL); menu->setPosition(CCPointZero); // 将按钮添加到场景中 this->addChild(menu,1); …... …... return true ; } // 按钮的回调函数 void UmengGameScene::openUmengShare() { // 调用jni方法 openUmengShareJni(); }
点击上文中声明的分享按钮时出现如图2所示面板,至此,集成成功 。
图 2
友盟社会化组件简介
友盟社会化组件是国内首款专为移动应用提供整合社交功能及社会化统计分析的工具。让应用快速具备社会化分享、登录、评论、喜欢等功能,并提供实时、全面的社会化数据统计分析服务。官方地址: http://www.umeng.com/component_social 。