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 文件夹拖拽进项目
注意:请务必在上述步骤中选择“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);
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)集成第三方微信分享的更多相关文章
- cocos2d-x C++ (Android)集成第三方微信分享
ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...
- iOS无处不在详解iOS集成第三方登录(SSO授权登录无需密码)
链接地址:http://www.it165.net/pro/html/201408/18884.html 1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社 ...
- iOS- 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)
1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可 ...
- iOS 学习 - 13.微信分享链接、QQ 分享图片
准备工作---原文来自这个 首先要在微信开放平台申请 AppID 和 QQ ID(我第一天晚上申请的,第二天中午就通过了),接着导入 SDK,也就是3个 .h 和一个 .a 文件,详情见这里 如果你是 ...
- IOS 集成第三方登录
我使用的是友盟上集成的第三方登录功能,一共使用了三个应用的登录授权,QQ.微信.新浪微博.由于第三方登录授权成功后,需要跳转到一个新的界面,所以这里需要在项目里设置第三方登录的SSO授权.就是必须安装 ...
- IOS 集成友盟分享
#import <Foundation/Foundation.h> @interface UMSocialSinaHandler : NSObject +(void)openSSOWith ...
- Android集成第三方微信登录
第一步: 在微信开放平台创建安卓应用,需要输入的包名和签名就不用再提吧,不知道的自行百度. 应用创建完毕后会得到两个值:AppID.AppSecret,用这两个值来请求微信. 然后去微信开放平台的资源 ...
- iOS 集成友盟分享图片链接为http时无法加载问题解决
一.问题描述 UMShareWebpageObject *obj = [UMShareWebpageObject shareObjectWithTitle:title descr:shareText ...
- iOS 集成微信支付【转载】
目前项目里有微信支付的需求,调研过一段时间后,发现其实并没有想象中的那么困难.如果你只是想实现该功能,一个方法足以,但是若你想深入了解实现原理.就需要花费更多的功夫了.目前我只清楚微信支付需要做签名, ...
随机推荐
- yum install 下载后保存rpm包
keepcache=0 更改为1下载RPM包 不会自动删除 vi /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever ...
- linux shutdown命令以及参数详解
在说shutdown命令之前 先说一下sync命令: sync:将内存中尚未写入硬盘的数据写入硬盘 因为linux为了保证数据读写速度,把常用的数据放在内存中,不会立即写入硬盘,如果有不当关机,这些数 ...
- [No0000103]JavaScript-基础课程3
在 JavaScript 中,函数的参数是比较有意思的,比如,你可以将任意多的参数传递给一个函数,即使这个函数声明时并未制定形式参数 function adPrint(str, len, option ...
- 《Redis 主从复制》
万念俱灰,说的就是我现在的心情...... 周六下午写了一下午的读书笔记,由于我的 MAC 有点问题,重启了一下...... 灰飞烟灭...... 读 第八章<集群> 总结 1:如何开启主 ...
- Win10系统桌面右键新建没有内容怎么恢复
Win10系统桌面右键新建没有内容怎么恢复 添加txt文本文档 运行->regedit,打开注册表编辑器 展开HKEY_CLASSES_ROOT 找到.txt 选中.txt,修改右侧窗格的“默认 ...
- 第三方python 加密库 --- cryptography
1,安装依赖 pip install cryptography 2,生成秘钥 from cryptography.fernet import Fernet #秘钥#随机生成秘钥 cipher_key ...
- CloudStack和OpenStack该如何选择(如果准备选择OpenStack,请做好hack的准备。CloudStack的底层功能已经做的很完善了,更适合商用)
国内做云计算的目前基本会在OpenStack和CloudStack中做一个选择.CloudStack 和OpenStack选哪一个,要根据自己的业务模式和研发力量来定. 作者:来源:cloudstac ...
- java 泛型的通配符和限定
package cn.sasa.demo1; import java.util.ArrayList; import java.util.Collection; import java.util.Ite ...
- CF997C Sky Full of Stars 数论
正解:容斥 解题报告: 传送门! 两个方法,分别港下QAQ 先说第一种 首先要推出式子,就∑2*C(i,n)*(-1)i+1*3i*3n*n-n+3*∑∑(-1)i+j+1*C(i,n)*C(j,n) ...
- zabbix准备:mysql安装
php在编译时需要mysql的配置,这样PHP远程连接mysql才有用.1.创建mysql用户和相关目录(配置文件里设置的目录) groupadd mysql useradd -g mysql -M ...