帮助与文档

> >

ShareSDK Android for Cocos2d-x(2.X)

注意:以下的步骤都均以cocos2d-x 2.2.0版本为例。

1、通用部分集成步骤

1.1、下载ShareSDK的cocos2d-x工具类

打开Github下载C2DXShareSDKSample项目。将项目中的C2DXShareSDK目录拷贝到你的项目中。 (注意:要想运行我们提供的demo,必须先要下载cocos2dx的框架,打开proj.ios文件夹里的工程,然后把我们的相关代码文件以及sdk和C2DXShareSDKSample主键导入到现在工程就行)

1.2、修改AppDelegate文件

打开“AppDelegate.cpp”文件,导入头文件“C2DXShareSDK.h”。如:

#include "C2DXShareSDK.h"

在AppDelegate::applicationDidFinishLaunching方法中,加入下面代码进行初始化ShareSDK并配置社交平台信息。还要记得写上c++的命名空间

using namespace cn::sharesdk;
bool AppDelegate::applicationDidFinishLaunching() { 

/**

注册SDK应用,此应用请到http://mob.com/中进行注册申请。
此方法必须在启动时调用,否则会限制SDK的使用。

**/
C2DXShareSDK::open(CCString::create("api20"), false);
/**

连接新浪微博开放平台应用以使用相关功能,此应用需要引用SinaWeiboConnection.framework
http://open.weibo.com上注册新浪微博开放平台应用,并将相关信息填写到以下字段

**/
CCDictionary *sinaConfigDict = CCDictionary::create();
sinaConfigDict -> setObject(CCString::create("568898243"), "app_key");
sinaConfigDict -> setObject(CCString::create("38a4f8204cc784f81f9f0daaf31e02e3"), "app_secret");
sinaConfigDict -> setObject(CCString::create("http://www.sharesdk.cn"), "redirect_uri");
C2DXShareSDK::setPlatformConfig(C2DXPlatTypeSinaWeibo, sinaConfigDict);

//……
}

注意:其中配置社交平台信息中的配置项说明,请参考《社交平台配置项说明》文档。

1.3、分享内容

先构造分享内容结构,代码如下(注意文件编码如果不为utf-8会导致所有的内容都为Null):

CCDictionary *content = CCDictionary::create();
content -> setObject(CCString::create("这是一条测试内容"), "content");
content -> setObject(CCString::create("http://img0.bdstatic.com/img/image/308342ac65c10385343da168d569113b07ecb8088ef.jpg"), "image");
content -> setObject(CCString::create("测试标题"), "title");
content -> setObject(CCString::create("测试描述"), "description");
content -> setObject(CCString::create("http://sharesdk.cn"), "url");
content -> setObject(CCString::createWithFormat("%d", C2DXContentTypeNews), "type");

然后将内容传入分享接口:

C2DXShareSDK::showShareMenu(NULL, content, CCPointMake(100, 100), C2DXMenuArrowDirectionUp, shareResultHandler);

其中shareResultHandler为回调方法,其定义如下:

void shareResultHandler(C2DXResponseState state, C2DXPlatType platType, CCDictionary *shareInfo, CCDictionary *error)
{
switch (state) {
case C2DXResponseStateSuccess:
CCLog("分享成功");
break;
case C2DXResponseStateFail:
CCLog("分享失败");
break;
default:
break;
}
}

1.4、用户授权

调用C2DXShareSDK中的authorize方法可进行用户授权。代码如下:

C2DXShareSDK::authorize(C2DXPlatTypeSinaWeibo, authResultHandler);

其中authResultHandler为回调方法,其定义如下:

void authResultHandler(C2DXResponseState state, C2DXPlatType platType, CCDictionary *error)
{
switch (state) {
case C2DXResponseStateSuccess:
CCLog("授权成功");
break;
case C2DXResponseStateFail:
CCLog("授权失败");
break;
default:
break;
}
}

1.5、获取用户资料

调用C2DXShareSDK中的getUserInfo方法可获取授权用户信息。代码如下:

C2DXShareSDK::getUserInfo(C2DXPlatTypeSinaWeibo, getUserResultHandler);

其中getUserResultHandler为回调方法,其定义如下:

void getUserResultHandler(C2DXResponseState state, C2DXPlatType platType, CCDictionary *userInfo, CCDictionary *error)
{
if (state == C2DXResponseStateSuccess)
{
//输出用户信息
CCArray *allKeys = userInfo -> allKeys();
for (int i = 0; i < allKeys -> count(); i++)
{
CCString *key = (CCString *)allKeys -> objectAtIndex(i);
CCObject *obj = userInfo -> objectForKey(key -> getCString()); 

CCLog("key = %s", key -> getCString());
if (dynamic_cast<CCString *>(obj))
{
CCLog("value = %s", dynamic_cast<CCString *>(obj) -> getCString());
}
else if (dynamic_cast<CCInteger *>(obj))
{
CCLog("value = %d", dynamic_cast<CCInteger *>(obj) -> getValue());
}
else if (dynamic_cast<CCDouble *>(obj))
{
CCLog("value = %f", dynamic_cast<CCDouble *>(obj) -> getValue());
}
}
}
}

2、iOS部分集成步骤

(不集成iOS分享可略过此部分)

2.1、将iOS版本的ShareSDK导入到工程中

c2dx_doc_001

  • 将ShareSDK_vX.X.X(X.X.X表示SDK版本号)目录拷贝到cocos2d-x的项目中。如图:

 

  • 将ShareSDK导入工程中,并添加相应的依赖库。此步骤可以参考:《iOS快速集成指南》中的第一、第二步。执行完成后,如下图所示:

c2dx_doc_003

2.2、修改AppController文件

打开“AppController.mm”文件,添加ShareSDK.h头文件:

#import <ShareSDK/ShareSDK.h>

新增handleOpenURL的处理方法,代码如下:

@implementation AppController

//……

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [ShareSDK handleOpenURL:url sourceApplication:nil annotation:nil wxDelegate:nil];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [ShareSDK handleOpenURL:url sourceApplication:sourceApplication annotation:annotation wxDelegate:nil];
}

在集成微信、QQ、Google+、Pinterest、人人网平台时,需要导入相关的类型,代码如下所示:

#import "WXApi.h"      //微信
#import "WeiboApi.h"      //腾讯微博
#import <TencentOpenAPI/QQApiInterface.h>     //QQ互联
#import <TencentOpenAPI/TencentOAuth.h>      //QQ互联
#import <RennSDK/RennSDK.h>     //人人网
#import <Pinterest/Pinterest.h>     //Pinterest
#import <GoogleOpenSource/GoogleOpenSource.h>    //Google+
#import <GooglePlus/GooglePlus.h>     //Google+ 

@implementation AppController

//……

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//……

//导入微信类型
[ShareSDK importWeChatClass:[WXApi class]];

//导入腾讯微博类型
[ShareSDK importTencentWeiboClass:[WBApi class]];

//导入QQ类型
[ShareSDK importQQClass:[QQApiInterface class] tencentOAuthCls:[TencentOAuth class]];

//导入人人网类型
[ShareSDK importRenRenClass:[RennClient class]];

//导入Pinterest类型
[ShareSDK importPinterestClass:[Pinterest class]];

//导入Google+类型
[ShareSDK importGooglePlusClass:[GPPSignIn class] shareClass:[GPPShare class]];

//……
}

3、Android部分集成步骤

(不集成Android分享可略过此部分)

注意:
本节介绍的是结合Jni将Share SDK集成到coco2d-x的方式,如果您想查询“纯Java方式”的集成方法,请点击这里参考“Android 示例项目”条目的相关内容,如果您想查询“plugin-x”的集成方法,请点击这里参考“Android 示例项目”条目的相关内容。

3.1、集成步骤

集成到你的cocos2dx里要做的是
1:把ShareSDK的cocos2dx的sample项目里的libs架包复制到你的项目里,除了armeabi目录不用复制其他都要。
2:把ShareSDK的cocos2dx的sample项目里的Classes目录下的文件都复制到你的项目里的Classes目录下。
3:把ShareSDK的cocos2dx的sample项目里的res里的drawable-xhdpi和values目录下的oks_string.xml、ssdk_string.xml复制到你的项目里的res目录下,values-en是国际化需要用到的
4:把ShareSDK的cocos2dx的sample项目里的AndroidManifest.xml里的的属性和都复制到你的项目里的AndroidManifes.xml里,如果需要集成微信分享还需要设置微信的回调activity,具体如何写可以查阅 快速集成指南 的配置AndroidManifes.xml节点。
5:添加代码把ShareSDKUtils.java一定要放在cn.sharesdk目录下,onekeyshare是做快捷分享,onekeyshare也在cn.sharesdk下创建变成cn.sharesdk.onekeyshare,然后把onekeyshare代码复制到你的项目里
6:在主activity里的onCreate方法里添加ShareSDKUtils.prepare()方法。

这里演示的是一个小的Demo集成ShareSDK cocos2dx的分享插件的集成步骤(使用的cocos2dx的版本为2.2.1)
1、从官网下载cocos2dx专用组件 http://sharesdk.cn/Download
解压后的目录如下:

QQ图片20140422221823

2、使用python创建一个cocos2dx项目
如何使用python创建cocos2dx项目Google一下哦

 

项目名为:ShareSDKC2DX
包名为:cn.sharesdk.hellocpp

创建后打开cocos2dx根目录里的projects文件夹

QQ图片20140422225933

3、把proj.android项目导入到eclipse里

QQ图片20140422230212

eclipse需要安装cdt插件(cdt是用于在eclipse上编写c++程序的插件),如果eclipse已经可以进行C++开发就不用安装此插件
也可以使用cygwin进行编译C/C++代码,这里演示使用的使用CDT

QQ图片20140424093725

4、从cocos2dx根目录打开cocos2dx->platform->android->java->src
复制org整个目录到刚新建的cocos2dx项目里的pro.android目录里的src目录下

QQ图片20140422231806

然后刷新eclipse里的项目

QQ图片20140423012720
5、重新回到从ShareSDK下载的C2DXSample

QQ图片20140422232239

复制Class整个目录到在cocos2dx建的项目,覆盖替换Classes目录

QQ图片20140422232406

在proj.android目录下新建assets目录,把Resources资源复制到assets目录下

QQ图片20140423013837

QQ图片20140423013935

6、回到从ShareSDK下载的C2DXSample

QQ图片20140422232239

进入proj.android->jni复制Android.mk替换eclipse项目里的Android.mk文件

QQ图片20140423012926

jni目录里的Android.mk文件。

7、右键项目选择属性

QQ图片20140422233452

8、选择C/C++ builder,在build command处填入NDK存放路径\ndk-build.cmd
ndk要使用r9d或者更高版本

QQ图片20140423013139

9、添加一些环境变量

QQ图片20140423013240

添加COCOS2DX,也就是cocos2dx解压缩的根目录
添加NDK_ROOT,也就是NDK解压缩的根目录
添加NDK_MODULE_PATH,添加cocos2dx的解压缩的根目录后加上\;E:\cocos2dx\cocos2d-x-2.2.1\cocos2dx\platform\third_party\android\prebuilt
具体如何添加请参考图片

10、设置一下资源的环境变量

QQ图片20140422235010

添加COCOS2DX,也就是cocos2dx解压缩的根目录

11、构建项目
选中eclipse里的项目

QQ图片20140422235256

点击Build Project

QQ图片20140423003309

12、复制ShareSDK下载的C2DX项目的字符串资源和图片资源到eclipse项目里
复制values、values-en、drawable-xhdpi资源

QQ图片20140423004421

13、复制ShareSDK的jar包到ShareSDKC2DX项目里
一:打开从ShareSDK下载的cocos2dx的Sample目录如下

QQ图片20140425102038

二:进入proj.android目录

QQ图片20140425102106

三:打开libs目录

QQ图片20140425102110

除了armeabi目录不用复制其他都要复制到你建的ShareSDKC2DX项目里的libs目录下

复制后如下图:

QQ图片20140425102606

14、复制ShareSDK下载的C2DX项目里的ShareSDKUtils.java和onekeyshare到eclipse里的项目
ShareSDKUtils.java一定要放在cn.sharesdk目录下

QQ图片20140425101732

15、打开ShareSDK下载的C2DX项目里的AndroidManifest.xml文件
复制如下属性到eclipse里的cocos2dx项目里的AndroidManifest.xml配置文件

QQ图片20140423005649

16、项目要使用utf-8编码格式
设置方法为右击项目选择properties选择Resource
修改Text file encoding为utf-8

QQ图片20140425174750

17、打开ShareSDK下载的C2DX项目里assets目录
复制ShareSDK.xml配置文件到eclipse里的cocos2dx项目里的assets目录下

QQ图片20140423005940

18、添加代码
在eclipse里的cocos2dx项目里的启动的activity里的onCreate方法里添加ShareSDKUtils.prepare()代码

QQ图片20140423010235

19、运行

QQ图片20140423010509

点击分享正常显示此图就表明集成ShareSDK C2DX成功了,恭喜你

QQ图片20140423012001

20、ShareSDK.xml配置文件说明
里面配置的信息是你的应用到各个分享平台注册你的应用时所返回的注册信息,把项目的注册信息填写到ShareSDK.xml
详细的JAVA代码说明和配置信息说明请查阅Android_快速集成指南
此demo不能执行分享功能,因为没有到各个分享平台里注册此应用信息,所以要你的应用到各个分享平台里注册应用信息后把相关的注册信息填写到ShareSDK.xml就能执行分享了,祝你顺利。

分享过程中出现异常请查阅
Android_常见问题

各个平台可以分享那些参数请查阅
Android_不同平台分享内容的详细说明

3.2、java层代码解释

java层代码基本上只有ShareSDKUtils一个类,而且java层的代码也仅仅需要调用这个类的prepare方法,此外的可以不理会。但是如果您想修改分享的参数(github上的例子提供的分享参数很少),则需要涉及下面的方法:

 nativeMapToJavaMap(HashMap<String, String>)
 这个方法是将从native层传递上来的分享数据的名称修改为java层可以理解的名称,如果您在native层添加了分享的参数,则需要修改这个方法,将这些参数“翻译”为Java层可以理解的字段,
 这些字段实际上就是不同平台ShareParams的字段,完整列表,可以参考这里
 onekeyShare(HashMap<String, String>)
 这个方法是调用java层快捷分享GUI模块的入口,和上面的方法一样,如果您修改了native层的分享参数,这个方法里面的方法也需要增删。

需要特别注意的是,ShareSDKUtils.prepare()必须在主线程中调用,而且需要在触发Share SDK的任何操作前触发,否则会因为没有初始化ShareSDKUtils而导致错误。

3.3、native层代码解释

直接使用jni的方式集成Share SDK并不是Android平台所推荐的做法,实践证明,这种方式需要涉及大量的native-java反射操作,低效且容易发生错误,但是这种方法可以在编写c/c++代码时屏蔽平台差异,也可以当作是对Plugin-x的补充。
native层的代码基本上是反射操作,开发者可以完全不理会其实现,直接调用C2DXShareSDK上的方法完成需要的功能即可,如果需要修改其中的功能,可以到ShareSDKUtils中改动,但是需要注意下面的方法:

Java_cn_sharesdk_ShareSDKUtils_onCancel
Java_cn_sharesdk_ShareSDKUtils_onComplete
Java_cn_sharesdk_ShareSDKUtils_onError
这三个方法是java层的操作回调,不应该修改方法的名称
hashmapToCCDictionary及其引用的方法
这个方法的用途主要是将包含操作返回的json容器hashmap转成ccdictionary
CCDictionaryToHashMap
这个方法是hashmapToCCDictionary的逆操作,但事实上这个方法只能转换key和value都是string的数据
setPlatformDevInfo
这不是Android平台所必需的方法,可以通过ShareSDK.xml来更简便完成应用信息配置