使用cocos2d-x 3.x(发行版)版本新建的工程,需要修改应用编译架构,修改方法为:将Xcode中Build Settings的Architectures修改为$(ARCHS_STANDARD_32_BIT)
,Valid Architectures删除arm64。另外你使用的cocos2d-x的SDK,应该使用带有32位版本的库文件。
若要编译64位版本应用,可以到SDK下载页面,选择64位包下载。并替换Platforms目录下的iOS文件夹的内容。
使用cocos2d-x 3.0以下版本新建的工程,默认编译成32位架构,忽略此步骤。
解压SDK压缩包,将Platforms/iOS文件夹和Cocos2dx文件夹拖入工程目录,并删除Cocos2dx/Android文件夹.
确认勾选了“Copy items to destination's group folder”选项,并选择你要添加到的Target:
现在应该是这样的效果:
UMSocial_Sdk_x.x.x 文件夹的目录结构
文件或文件夹 | 含义 |
---|---|
libUMSocial_Sdk_x.x.x.a, libUMSocial_Sdk_Comment_3.0.a | 库文件 |
Header | 头文件 |
SocialSDKXib | xib文件 |
en.lproj,zh-Hans.lproj | 英文和中文语言文件 |
UMSocial_Sdk_Extra_Frameworks 文件夹的目录结构
文件或文件夹 | 含义 |
---|---|
微信 | |
TencentOpenAPI | QQ互联SDK |
Facebook SDK | |
LaiWang | 来往 SDK |
YiXin | 易信 SDK |
Security.framework,libiconv.dylib,SystemConfiguration.framework,CoreGraphics.framework,libsqlite3.dylib,CoreTelephony.framework,libstdc++.dylib,libz.dylib,Social.framework,Accounts.framework。
平台 | url scheme设置格式 |
---|---|
微信 | 微信应用appId,例如“wxd9a39c7122aa6516”,微信详细集成步骤参考微信集成方法 |
分享到手机QQ、QQ空间 | “QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ05FA957C”。生成十六进制方法:在命令行输入
echo 'ibase=10;obase=16;您的腾讯QQ互联应用Id'|bc
,并在QQ互联后台的URL schema中填入此字符串保持一致,手机QQ详细集成步骤参考手机QQ集成方法 |
单独登录到QQ、QQ空间(不分享) | “tencent“+腾讯QQ互联应用Id,例如“tencent100308348” |
来往 | Identifier填“Laiwang”,URL Schemes填来往AppId.注意使用来往SDK后,Xcode工程other linker flags需要添加-ObjC参数 |
易信 | 易信Appkey,例如“yx35664bdff4db42c2b7be1e29390c1a06” |
默认使用iOS自带的Facebook分享framework,在iOS 6以上有效,若要使用我们提供的facebook分享需要设置“fb”+facebook AppID,例如“fb1440390216179601”,详细集成方法见[集成facebook](#social_facebook) |
在Xcode工程中的ios文件夹下的AppController.mm文件,实现下面的系统回调
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [UMSocialSnsService handleOpenURL:url];
}
然后您就可以到在Cocos2d-x游戏中添加分享功能章节添加分享代码到cocos2d-x游戏中。
将所需的资源添加到对应的工程以后, 您就可以在cocos2d-x中使用该友盟社会化组件的分享、登录功能了。
首先将sdk压缩包下的根目录下的Cocos2dx文件夹拷贝到您的工程的Classes目录下,Cocos2dx包括:
- Android文件夹,Android平台的调用实现;
- iOS文件夹,iOS平台的调用实现;
- Common文件夹,针对Cocos2d-x的统一接口和类型定义 ;
- ShareButton文件夹,针对Cocos2d-x封装的分享按钮,点击按钮即可打开分享面板;
针对Android平台, 如果开发者需要使用facebook、易信、易信朋友圈、来往、来往动态、twitter、instagram平台则需要到添加更多平台 ( 按需集成 )章节添加相应的平台。
友盟提供了三种方式来方便开发者使用分享功能,示例如下 :
方式一 :
开发者可以通过UMShareButton类来快速的实现分享功能,UMShareButton是CCMenuItemImage的子类,当用户点击该按钮时将会打开友盟的分享面板。 集成代码如下 :
// 引入相关的头文件
#include "Cocos2dx/Common/CCUMSocialSDK.h"
#include "Cocos2dx/ShareButton/UMShareButton.h"
// 使用友盟命令空间
USING_NS_UM_SOCIAL;
// ...... 代码省略
// HelloWorld为cocos2d::CCLayer的子类
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
// 创建分享按钮, 参数1为按钮正常情况下的图片, 参数2为按钮选中时的图片,参数3为友盟appkey, 参数4为分享回调
UMShareButton *shareButton = UMShareButton::create("shareNormal.png","shareSelected.png", "你的友盟appkey", share_selector(shareCallback)) ;
// 显示在友盟分享面板上的平台
vector<int>* platforms = new vector<int>();
platforms->push_back(SINA);
platforms->push_back(RENREN) ;
platforms->push_back(DOUBAN) ;
platforms->push_back(QZONE) ;
platforms->push_back(QQ) ;
// 设置友盟分享面板上显示的平台
shareButton->setPlatforms(platforms);
// 设置文本分享内容
shareButton->setShareContent("umeng social cocos2d-x sdk.") ;
// 设置要分享的图片, 图片支持本地图片和url图片, 但是url图片必须以http://或者https://开头
shareButton->setShareImage("/sdcard/header.jpeg") ;
// 设置按钮的位置
shareButton->setPosition(ccp(150, 180));
// 然后开发者需要将该按钮添加到游戏场景中
CCMenu* pMenu = CCMenu::create(shareButton, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);
// ********************** 设置平台信息 ***************************
// CCUMSocialSDK *sdk = shareButton->getSocialSDK();
// sdk->setQQAppIdAndAppKey("设置QQ的app id", "appkey");
// sdk->setWeiXinAppId("设置微信和朋友圈的app id");
// sdk->setYiXinAppKey("设置易信和易信朋友圈的app id");
// sdk->setLaiwangAppInfo("设置来往和来往动态的app id",
// "设置来往和来往动态的app key", "我的应用名");
// sdk->setFacebookAppId("你的facebook appid");
// 设置用户点击一条图文分享时用户跳转到的目标页面, 一般为app主页或者下载页面
// sdk->setTargetUrl("http://www.umeng.com/social");
// // 打开或者关闭log
// sdk->setLogEnable(true) ;
// ********************** END ***************************
return true;
}
方式二 :
开发者可以使用CCUMSocialSDK类来完成分享、授权、删除授权等操作, 实际上UMShareButton就是包装了CCUMSocialSDK以实现相关的功能。具体功能请参考CCUMSocialSDK中的注释。 开发者可以自行定义某个按钮,然后在该按钮的点击事件中通过CCUMSocialSDK来进行相应的操作,示例代码如下 :
// 引入相关的头文件
#include "Cocos2dx/Common/CCUMSocialSDK.h"
// 使用友盟命令空间
USING_NS_UM_SOCIAL;
// ...... 代码省略
// HelloWorld为cocos2d::CCLayer的子类, shareButtonClick为某个按钮点击事件的处理函数
void HelloWorld::shareButtonClick()
{
// 获取一个CCUMSocialSDK实例
CCUMSocialSDK *sdk = CCUMSocialSDK::create("你的友盟appkey");
// 设置友盟appkey,如果create中设置了不用调用该函数
// sdk->setAppKey("4eaee02c527015373b000003");
// ********************** 设置平台信息 ***************************
// sdk->setQQAppIdAndAppKey("设置QQ的app id", "appkey");
// sdk->setWeiXinAppId("设置微信和朋友圈的app id");
// sdk->setYiXinAppKey("设置易信和易信朋友圈的app id");
// sdk->setLaiwangAppInfo("设置来往和来往动态的app id",
// "设置来往和来往动态的app key", "我的应用名");
// sdk->setFacebookAppId("你的facebook appid");
// // 打开或者关闭log
// sdk->setLogEnable(true) ;
// ********************** END ***************************
// 设置用户点击一条图文分享时用户跳转到的目标页面, 一般为app主页或者下载页面
sdk->setTargetUrl("http://www.umeng.com/social");
// 设置友盟分享面板上显示的平台
vector<int>* platforms = new vector<int>();
platforms->push_back(SINA);
platforms->push_back(RENREN) ;
platforms->push_back(DOUBAN) ;
platforms->push_back(QZONE) ;
platforms->push_back(QQ) ;
// 设置平台, 在调用分享、授权相关的函数前必须设置SDK支持的平台
sdk->setPlatforms(platforms) ;
// 打开分享面板, 注册分享回调, 参数1为分享面板上的平台, 参数2为要分享的文字内容,
// 参数3为要分享的图片路径(android和IOS的图片地址格式不一致,因此分平台设置), 参数4为分享回调.
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
sdk->openShare("要分享的文字内容", "/sdcard/image.png", share_selector(shareCallback));
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
sdk->openShare("要分享的文字内容","share.png", share_selector(shareCallback));
#endif
}
方式三 :
开发者也可以自行定义某个按钮,然后在该按钮的点击事件中通过CCUMSocialSDK的directShare函数来进行直接分享到某个平台的操作,该接口为api分享接口,不会弹出分享面板和内容编辑界面,用户授权之后直接分享。示例代码如下 :
// 引入相关的头文件
#include "Cocos2dx/Common/CCUMSocialSDK.h"
// 使用友盟命令空间
USING_NS_UM_SOCIAL;
// ...... 代码省略
// HelloWorld为cocos2d::CCLayer的子类, shareButtonClick为某个按钮点击事件的处理函数
void HelloWorld::shareButtonClick()
{
// 获取一个CCUMSocialSDK实例
CCUMSocialSDK *sdk = CCUMSocialSDK::create("你的友盟appkey");
// 设置用户点击一条图文分享时用户跳转到的目标页面, 一般为app主页或者下载页面
sdk->setTargetUrl("http://www.umeng.com/social");
// ********************** 设置平台信息 ***************************
// sdk->setQQAppIdAndAppKey("设置QQ的app id", "appkey");
// sdk->setWeiXinAppId("设置微信和朋友圈的app id");
// sdk->setYiXinAppKey("设置易信和易信朋友圈的app id");
// sdk->setLaiwangAppInfo("设置来往和来往动态的app id",
// "设置来往和来往动态的app key", "我的应用名");
// sdk->setFacebookAppId("你的facebook appid");
// // 打开或者关闭log
// sdk->setLogEnable(true) ;
// ********************** END ***************************
// 直接分享,参数1为要分享到的目标平台, 参数2为要分享的文字内容,
// 参数3为要分享的图片路径(android和IOS的图片地址格式不一致,因此分平台设置), 参数4为分享回调.
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
sdk->directShare(SINA, "要分享的文字内容","/sdcard/image.png", share_selector(shareCallback));
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
sdk->directShare(SINA, "要分享的文字内容","image.png", share_selector(shareCallback));
#endif
特别说明 :
使用CCUMSocialSDK对象设置各个平台的app id或者app key.CCUMSocialSDK对象可以通过CCUMSocialSDK::create("umeng appkey")函数获取,如果使用UMShareButton可以通过getSocialSDK()函数获取.
1.如果集成了QQ或者QQ空间平台,则必须通过CCUMSocialSDK类的setQQAppIdAndAppKey("appid","appkey")函数来设置QQ或者QQ空间的AppId、AppKey;
2.如果集成了微信或者微信朋友圈平台,则必须通过CCUMSocialSDK类的setWeiXinAppId("")函数来设置微信或者朋友圈的App id;
3.如果集成了易信或者易信朋友圈平台,则必须通过CCUMSocialSDK类的setYiXinAppKey("")函数来设置微信的App key;
4.如果集成了来往或者来往动态平台,则必须通过CCUMSocialSDK类的setLaiwangAppInfo("app id ", "app key", "app Name")来设置来往和来往动态的App id、App key、App Name(应用名). 在设置完平台的app id或者app key之后,需要调用CCUMSocialSDK对象的setPlatforms函数将所需的平台添加到sdk中,这样该平台才会在sdk得到支持。
最后,点击对应的按钮则会弹出如下界面 :
分享回调的为如下形式 :
请不要在该回调中更新UI,友盟社会化组件Cocos2d-x SDK不保证在分享回调中更新UI一定会被顺利执行。
/*
* 分享回调, 该回调不是某个类的成员函数, 而是一个普通的函数, 具体使用参考HelloWorldScene的例子
* @param platform 要分享到的目标平台
* @param stCode 返回码, 200代表分享成功, 100代表开始分享
* @param errorMsg 分享失败时的错误信息,android平台没有错误信息
*/
void shareCallback(int platform, int stCode, string& errorMsg)
{
if ( stCode == 100 )
{
CCLog("#### HelloWorld 开始分享");
}
else if ( stCode == 200 )
{
CCLog("#### HelloWorld 分享成功");
}
else
{
CCLog("#### HelloWorld 分享出错");
}
CCLog("platform num is : %d.", platform);
}