8.在Cocos2d-x中集成umeng的社会化分享组件

本文转自http://blog.umeng.com/index.php/2013/09/android-cocos2d-x/



最近在帮助开发者集成友盟社会化组件SDK的过程中,发现Cocos2d-x游戏在集成过程中不是很顺利,因此整理了一篇关于Android Cocos2d-x游戏集成友盟社会化分享组件的文章,按照本文集成,就可以轻松实现分享到微信、QQ、新浪微博、Facebook、Twitter、Google+等社交平台的功能。由于本人水平有限,有什么错误或者有更好的方法希望大家指出,以帮助其他开发者更好的集成。

 

  友盟社会化组件需要依赖于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.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);
    }
}

工程目录如下所示 :

8.在Cocos2d-x中集成umeng的社会化分享组件_第1张图片

图 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();
}


你可能感兴趣的:(jni,cocos2dx)