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 文件夹拖拽进项目

     注意:请务必在上述步骤中选择“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

    添加依赖库的方法如下:

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

cocos2d-x C++ (iOS)集成第三方微信分享的更多相关文章

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

    ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...

  2. iOS无处不在详解iOS集成第三方登录(SSO授权登录无需密码)

    链接地址:http://www.it165.net/pro/html/201408/18884.html 1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社 ...

  3. iOS- 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)

    1.前言   不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可 ...

  4. iOS 学习 - 13.微信分享链接、QQ 分享图片

    准备工作---原文来自这个 首先要在微信开放平台申请 AppID 和 QQ ID(我第一天晚上申请的,第二天中午就通过了),接着导入 SDK,也就是3个 .h 和一个 .a 文件,详情见这里 如果你是 ...

  5. IOS 集成第三方登录

    我使用的是友盟上集成的第三方登录功能,一共使用了三个应用的登录授权,QQ.微信.新浪微博.由于第三方登录授权成功后,需要跳转到一个新的界面,所以这里需要在项目里设置第三方登录的SSO授权.就是必须安装 ...

  6. IOS 集成友盟分享

    #import <Foundation/Foundation.h> @interface UMSocialSinaHandler : NSObject +(void)openSSOWith ...

  7. Android集成第三方微信登录

    第一步: 在微信开放平台创建安卓应用,需要输入的包名和签名就不用再提吧,不知道的自行百度. 应用创建完毕后会得到两个值:AppID.AppSecret,用这两个值来请求微信. 然后去微信开放平台的资源 ...

  8. iOS 集成友盟分享图片链接为http时无法加载问题解决

    一.问题描述 UMShareWebpageObject *obj = [UMShareWebpageObject shareObjectWithTitle:title descr:shareText ...

  9. iOS 集成微信支付【转载】

    目前项目里有微信支付的需求,调研过一段时间后,发现其实并没有想象中的那么困难.如果你只是想实现该功能,一个方法足以,但是若你想深入了解实现原理.就需要花费更多的功夫了.目前我只清楚微信支付需要做签名, ...

随机推荐

  1. 电子产品使用感受之--Mac Mini 买了之后有什么用?-- 开发啊!

    2019.01.29 更新 Mac Mini 2018这么强劲的性能,不用来做点儿什么真是可惜了. 如果只是用来看看Youtube视频,打开网页看看twitter什么的,那可真是巨大的浪费了. 因为这 ...

  2. AutoFac Ioc依赖注入容器

    本文原著:牛毅  原文路径 http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ 理解IOC容器请看下图: 没有使用IOC容器的情况 ...

  3. windows10安装

    https://www.microsoft.com/zh-cn/software-download/windows10

  4. nowcoder 211B - 列队 - [(伪·良心贪心)真·毒瘤暴力]

    题目链接:https://www.nowcoder.com/acm/contest/211/B 题目描述 炎热的早上,gal男神们被迫再操场上列队,gal男神们本来想排列成x∗x的正方形,可是因为操场 ...

  5. [No0000178]改善C#程序的建议1:非用ICloneable不可的理由

    好吧,我承认,这是一个反标题,实际的情况是:我找不到一个非用ICloneable不可的理由.事实上,接口ICloneable还会带来误解,因为它只有一个Clone方法. 我们都知道,对象的拷贝分为:浅 ...

  6. [No0000E1]C# 关键字

    关键字是 C# 编译器预定义的保留字.这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀. 在 C# 中,有些标识符在代码的上下文中有特殊的意义, ...

  7. [No0000C7]windows 10桌面切换快捷键,win10

    windows 10桌面切换快捷键:Ctrl+Win+←/→ 切换窗口:Alt+Tab(不是新的,但任务切换界面改进)任务视图:Win+Tab(松开键盘界面不会消失)创建新的虚拟桌面:Win+Ctrl ...

  8. 【数论】Prime Time UVA - 10200 大素数 Miller Robin 模板

    题意:验证1~10000 的数 n^n+n+41 中素数的个数.每个询问给出a,b  求区间[a,b]中质数出现的比例,保留两位 题解:质数会爆到1e8 所以用miller robin , 另外一个优 ...

  9. 查看ElasticSearch服务状态和结果的URL

    1,查看es集群状态 http://ip:port/_cat/health?v 2,集群节点健康查看 http://ip:port/_cat/nodes?v 3,列出集群索引 http://ip:po ...

  10. WinForm将一个窗体的值传到另一个窗体的listbox控件,C#

    做arcgisengine二次开发,读取当前图层文件的字段值,别名,类型.  读取文件是在有地图图层的窗体(假设为Form1),由于窗体有限,所以想把读取的数据在另一个窗体(假设为Form2)显示出来 ...