最近在帮助开发者集成友盟社会化组件的过程中,发现游戏的集成过程遇到一些困难,而Cocos2d-x具有较好的代表性,因此整理了一篇关于Android Cocos2d-x游戏集成友盟社会化组件指南,由于本人水平有限,有什么错误或者有更好的方法希望大家指出,以帮助其他开发者更好的集成。
友盟社会化组件需要依赖于Activity,因此需要在你Cocos2d-x游戏的Activity ( 集成自Cocos2dActivity )中进行调用, 步骤如下 :
步骤一、在游戏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.aigcar", RequestType.SOCIAL); /** * onCreate方法 */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = this; } /** * 载入cocos2d-x的c++代码,这里命名为umenggame */ 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 ); } } …...
步骤三、 在Cocos2d-x的UmengGameScene(派生自CCLayer的类,需要替换成你对应的类)中声明一个按钮, 使得点击该按钮时打开友盟的分享平台选择面板.( 这里需要include 步骤二中定义jni方法openUmengShareJni 的头文件 )
…... 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)); // 将按钮添加到菜单中 CMenu *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 。