天天看點

Android Cocos2d-x遊戲內建友盟社會化元件分享功能

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

工程目錄如下所示 : 

Android Cocos2d-x遊戲內建友盟社會化元件分享功能

                                                                                                  圖 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所示面闆,至此,內建成功 。

Android Cocos2d-x遊戲內建友盟社會化元件分享功能

                                                         圖 2

友盟社會化元件簡介

友盟社會化元件是國内首款專為移動應用提供整合社交功能及社會化統計分析的工具。讓應用快速具備社會化分享、登入、評論、喜歡等功能,并提供實時、全面的社會化資料統計分析服務。官方位址: http://www.umeng.com/component_social 。

繼續閱讀