Android Cocos2d-x游戏集成友盟社会化组件分享功能

标签: androidcocos2d-x友盟社会化游戏
4023人阅读 评论(1) 收藏 举报
分类:
Cocos2d-x简介
Cocos2d-x 是一个支持多平台的 2D开源游戏引擎,使用 C++ 开发,基于OpenGL ES,支持 WOPhone、iOS 4.1 、 Android 2.1 及更高版本、WindowsXP & Windows7、Windows Phone 8。Cocos2d-X发展的重点是围绕Cocos2d跨平台,使用的API与Cocos2d-iPhone完全兼容。 官方地址 : http://www.cocos2d-x.org/ 
正文 

      最近在帮助开发者集成友盟社会化组件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 );
	}
}

…...

步骤三、 在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)); 

	//  将按钮添加到菜单中
	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 。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1199420次
    • 积分:14530
    • 等级:
    • 排名:第880名
    • 原创:179篇
    • 转载:120篇
    • 译文:23篇
    • 评论:983条
    博客专栏
    最新评论