cocos2d-x C++ (iOS)集成第三方微信分享


1、新建項目並下載 ShareSDK

  • 1、Cocos2d-x項目環境搭建,不會的童鞋自行面壁哈: 網頁鏈接.
  • 2、ShareSDK iOS版本的 Cocos2d-x 插件是在ShareSDK iOS版本基礎上對接口做個C++接口的封裝,是依賴ShareSDK for iOS的。所以下載ShareSDK就包含了以下2部分,下載下來的文件目錄截圖如下:

    (1)ShareSDK iOS版本的下載:網頁鏈接

    (2)Cocos2d-x插件的下載: :網頁鏈接 (包含demo,需要的是C2DXShareSDK)

初始化

  • 將以上2個紅色方框內的文件拖到新建的Cocos2d-x項目中。

2、初始化ShareSDK並設置社交平台

iOS 部分

  • 1、下載的 ShareSDK 文件夾拖拽進項目

    img 注意:請務必在上述步驟中選擇“Create groups for any added folders”單選按鈕組。如果你選擇“Create folder references for any added folders”,一個藍色的文件夾引用將被添加到項目並且將無法找到它的資源。

  • 2、添加必須的依賴庫

    必須添加的依賴庫如下 ( Xcode 7 下 .dylib庫后綴名更改為.tbd ):

    libicucore.dylib
    libz.dylib
    libstdc++.dylib
    JavaScriptCore.framework

    以下依賴庫根據社交平台添加:

    新浪微博SDK依賴庫
    
    ImageIO.framework
    libsqlite3.dylib
    微信SDK依賴庫 
    
    libsqlite3.dylib
    QQ好友和QQ空間SDK依賴庫 
    
    libsqlite3.dylib
    短信和郵件需要依賴庫 
    
    MessageUI.framework
    Google+SDK依賴庫 
    
    CoreMotion.framework
    CoreLocation.framework
    MediaPlayer.framework
    AssetsLibrary.framework

    添加依賴庫的方法如下:

    img

  • 3、各個社交平台需要的配置(url schemes 等)可以參考文檔中的可選配置項:網頁鏈接

Cocos2d-x 部分

  • 1、選擇需要的平台SDK和Cocos2d-x環境

    打開 C2DXShareSDK / iOS / C2DXiOSShareSDK.mm ,按需注釋掉已導入的原生SDK庫

    #define IMPORT_SINA_WEIBO_LIB               //導入新浪微博庫,如果不需要新浪微博客戶端分享可以注釋此行
    #define IMPORT_QZONE_QQ_LIB                 //導入騰訊開發平台庫,如果不需要QQ空間分享、SSO或者QQ好友分享可以注釋此行
    #define IMPORT_RENREN_LIB                   //導入人人庫,如果不需要人人SSO,可以注釋此行
    #define IMPORT_GOOGLE_PLUS_LIB              //導入Google+庫,如果不需要Google+分享可以注釋此行
    #define IMPORT_WECHAT_LIB                   //導入微信庫,如果不需要微信分享可以注釋此行
    //#define IMPORT_ALIPAY_LIB                   //導入支付寶分享庫,如果不需要支付寶分享可以注釋此行
    //#define IMPORT_KAKAO_LIB                    //導入Kakao庫,如果不需要Kakao分享可以注釋此行
    

    打開 C2DXShareSDK / C2DXShareSDKTypeDef.h ,按需選擇要使用的 Cocos2d-x的版本(切換適配Cocos2d-x 2.x 或者 3.x 版本)

    //使用Cocoa2D-X 2.x版本環境打開下面這行注釋
    //#define UsingCocoa2DX2
    
    #ifdef UsingCocoa2DX2
    
    //...
    
  • 2、修改 "AppDelegate" 進行初始化

    a、打開 “AppDelegate.cpp”文件,導入頭文件

    #include "C2DXShareSDK.h"

    b、在 AppDelegate::applicationDidFinishLaunching() 函數中添加 ShareSDK 各個平台的初始化函數,例如(新浪微博、QQ、微信、Facebook、Twitter)

      //設置平台配置 //Platforms __Dictionary *totalDict = __Dictionary::create(); //新浪微博 __Dictionary *sinaWeiboConf= __Dictionary::create(); sinaWeiboConf->setObject(__String::create("568898243"), "app_key"); sinaWeiboConf->setObject(__String::create("38a4f8204cc784f81f9f0daaf31e02e3"), "app_secret"); sinaWeiboConf->setObject(__String::create("http://www.sharesdk.cn"), "redirect_uri"); stringstream sina; sina << cn::sharesdk::C2DXPlatTypeSinaWeibo; totalDict->setObject(sinaWeiboConf, sina.str()); //微信 __Dictionary *wechatConf = __Dictionary::create(); wechatConf->setObject(__String::create("wx4868b35061f87885"), "app_id"); wechatConf->setObject(__String::create("64020361b8ec4c99936c0e3999a9f249"), "app_secret"); stringstream wechat; wechat << cn::sharesdk::C2DXPlatTypeWechatPlatform; totalDict->setObject(wechatConf, wechat.str()); //QQ __Dictionary *qqConf = __Dictionary::create(); qqConf->setObject(__String::create("100371282"), "app_id"); qqConf->setObject(__String::create("aed9b0303e3ed1e27bae87c33761161d"), "app_key"); stringstream qq; qq << cn::sharesdk::C2DXPlatTypeQQPlatform; totalDict->setObject(qqConf, qq.str()); //Facebook __Dictionary *fbConf = __Dictionary::create(); fbConf->setObject(__String::create("107704292745179"), "api_key"); fbConf->setObject(__String::create("38053202e1a5fe26c80c753071f0b573"), "app_secret"); stringstream facebook; facebook << cn::sharesdk::C2DXPlatTypeFacebook; totalDict->setObject(fbConf, facebook.str()); //Twitter __Dictionary *twConf = __Dictionary::create(); twConf->setObject(__String::create("LRBM0H75rWrU9gNHvlEAA2aOy"), "consumer_key"); twConf->setObject(__String::create("gbeWsZvA9ELJSdoBzJ5oLKX0TU09UOwrzdGfo9Tg7DjyGuMe8G"), "consumer_secret"); twConf->setObject(__String::create("http://www.mob.com"), "redirect_uri"); stringstream twitter; twitter << cn::sharesdk::C2DXPlatTypeTwitter; totalDict->setObject(twConf, twitter.str()); //在 ShareSDK 官網后台注冊應用並獲取Appkey,並填入此方法的第一個參數中 cn::sharesdk::C2DXShareSDK::registerAppAndSetPlatformConfig("8e3320a36606", totalDict); 

    以上平台的app_key、app_secret等字段不同分享平台可能不同,詳情可參考

3、ShareSDK接口的調用

分享

  • 1、在需要分享操作的代碼塊中進行構造分享參數,示例如下:

    reqID += 1; // 分享計數 __Dictionary *content = __Dictionary::create(); content -> setObject(__String::create("分享文本"), "text"); // 分享文本 content -> setObject(__String::create("HelloWorld.png"), "image");// 分享圖片 content -> setObject(__String::create("測試標題"), "title"); // 分享標題 content -> setObject(__String::create("http://www.mob.com"), "url"); // 分享url content -> setObject(__String::createWithFormat("%d", cn::sharesdk::C2DXContentTypeWebPage), "type"); // 分享類型
  • 2、調用分享方法:

      C2DXShareSDK::showShareMenu(reqID,NULL,content,100,100,shareContentResultHandler); // 第4,5個參數傳入 iPad 視圖要顯示的坐標點,詳見API說明
  • 3、設置分享回調方法 shareContentResultHandler,示例如下:

    //分享回調 void shareContentResultHandler(int seqId, cn::sharesdk::C2DXResponseState state, cn::sharesdk::C2DXPlatType platType, __Dictionary *result) { switch (state) { case cn::sharesdk::C2DXResponseStateSuccess: { log("Success"); } break; case cn::sharesdk::C2DXResponseStateFail: { log("Fail"); //回調錯誤信息 __Array *allKeys = result->allKeys(); allKeys->retain(); for (int i = 0; i < allKeys-> count(); i++) { __String *key = (__String*)allKeys->getObjectAtIndex(i); Ref *obj = result->objectForKey(key->getCString()); log("key = %s", key -> getCString()); if (dynamic_cast<__String *>(obj)) { log("value = %s", dynamic_cast<__String *>(obj) -> getCString()); } else if (dynamic_cast<__Integer *>(obj)) { log("value = %d", dynamic_cast<__Integer *>(obj) -> getValue()); } else if (dynamic_cast<__Double *>(obj)) { log("value = %f", dynamic_cast<__Double *>(obj) -> getValue()); } } } break; case cn::sharesdk::C2DXResponseStateCancel: { log("Cancel"); } break; default: break; } }

授權

  • 1、調用授權方法

    reqID += 1;
    
    C2DXShareSDK::getUserInfo(reqID, cn::sharesdk::C2DXPlatTypeSinaWeibo, getUserResultHandler);
  • 2、設置獲取用戶數據回調 getUserResultHandler,代碼如下:

    void getUserResultHandler(int reqID, C2DXResponseState state, C2DXPlatType platType, __Dictionary *result) { switch (state) { case cn::sharesdk::C2DXResponseStateSuccess: { log("Success"); //輸出信息 try { __Array *allKeys = result -> allKeys(); allKeys->retain(); for (int i = 0; i < allKeys -> count(); i++) { __String *key = (__String *)allKeys -> getObjectAtIndex(i); Ref *obj = result -> objectForKey(key -> getCString()); log("key = %s", key -> getCString()); if (dynamic_cast<__String *>(obj)) { log("value = %s", dynamic_cast<__String *>(obj) -> getCString()); } else if (dynamic_cast<__Integer *>(obj)) { log("value = %d", dynamic_cast<__Integer *>(obj) -> getValue()); } else if (dynamic_cast<__Double *>(obj)) { log("value = %f", dynamic_cast<__Double *>(obj) -> getValue()); } } allKeys->release(); } catch(...) { log("==============error"); } } break; case cn::sharesdk::C2DXResponseStateFail: { log("Fail"); //回調錯誤信息 __Array *allKeys = result->allKeys(); allKeys->retain(); for (int i = 0; i < allKeys-> count(); i++) { __String *key = (__String*)allKeys->getObjectAtIndex(i); Ref *obj = result->objectForKey(key->getCString()); log("key = %s", key -> getCString()); if (dynamic_cast<__String *>(obj)) { log("value = %s", dynamic_cast<__String *>(obj) -> getCString()); } else if (dynamic_cast<__Integer *>(obj)) { log("value = %d", dynamic_cast<__Integer *>(obj) -> getValue()); } else if (dynamic_cast<__Double *>(obj)) { log("value = %f", dynamic_cast<__Double *>(obj) -> getValue()); } } } break; case cn::sharesdk::C2DXResponseStateCancel: { log("Cancel"); } break; default: break; } }

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM