您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x集成shareSDK一键分享

2017-08-25 13:39 681 查看
shareSDK的功能已经封装的很好了,只要保证集成步骤的正确性就可以成功集成到cocos2d-x里,但还是有不少要吐槽的地方。对于没有接触过SDK接入的同学们来讲,就好比一个老外想用筷子吃饭,已经学会的人没有什么压力,不会用的人去网上查到筷子的具体使用方法,但中间还是会出很多差错,我觉得这个比喻算是十分恰当了,而且官方文档虽然步骤齐全但过于简略,网上的教程大多过时,相当一部分教程停留在3.0甚至2.x版本,而官方的最新Demo是8月9号编辑完的,使用的版本为3.2版本。最差劲的是有一部分教程,直接复制粘贴人家官方的文档过来


好了话不多少,还是赶紧来看看怎么把shareSDK集成到自己的cocos项目里吧,这里使用eclipse,引擎版本3.15.1

(以前我一直在用android stuido,然而shareSDK的源码中使用了lambda表达式,需要Java1.8,而sun和Google一直在打官司,所以android studio默认不支持Java1.8,按照网上教程改为支持1.8并集成完毕后apk闪退,所以转战eclipse)

首先大家先打开cmd进入引擎根目录检查环境



然后回车检查sdk,ndk,ant是否可以found,注意这里ndk最小等级必须是10以上



cocos方面没有问题的话,检查一下java的版本



前面提到源码中用到了lambda表达式所以Java要求最低版本为1.8,没有的童鞋请先移步百度,下载并配置环境变量。

上面的环境监测完毕以后,在系统的高级系统设置里配置环境变量NDK_MODULE_PATH



值分别为D:\work\cocos2d-x-3.15.1;          D:\work\cocos2d-x-3.15.1\cocos;                  D:\work\cocos2d-x-3.15.1\external

这里引擎版本可以与我不同但最好高于Mob官方使用的3.2版本,上面的环境变量用分号隔开确定即可。

现在环境的搭建以及完成,接下来建立一个新的cocos2d-x项目,第一次接入shareSDK请大家使用和我一样的包名,等一下要用到



现在项目以及创建完毕,打开eclipse,右键Import导入libscocos2d 和 MyGame项目,路径分别为:

libscocos2d的路径:D:\你的目录\MyGame\cocos2d\cocos\platform\android\java 

MyGame的路径:D:\你的目录\MyGame\proj.android

注意这里必须手动导入,不可复制路径粘贴





右键MyGame选择Build Path 点击Configre build path,选择Java Build Path->projgcts->add ->libcocos2dx把项目对libcocos2d-x的依赖添加进来



接下来是对C++编译环境的搭建,右键MyGame->Properties->Builders->new->program->ok,能选的都选上


点击确定以后是这样



把Name修改为MyGame,Location点击第二个按钮选择你电脑里的NDK里的ndk-build.cmd(只要是版本10及以上均可,是其他软件如studio也可以),working Directory点击第一个按钮选择MyGame即可。



点击Refresh如下图选择,选择好后点击apply



点击Build Options ,下面几个全部勾选



点击Specify Resources把MyGame里的jni选上,点击finish



然后把新建的MyGame移动到最上面



现在所有的环境都已经搭建完毕,不要忘记把项目里面Resources下面的资源复制到项目的assets文件夹下,没有资源的话apk会闪退

先clean一下项目,这时候应该是可以编译或者打包的了,大家先clean,然后真机连上运行,如果在手机上是cocos原生项目helloworld的界面的话,说明环境搭建没有问题

不要

接下来准备进行shareSDK的集成了,先去Mob官网http://www.mob.com/downloads/   下载share sdk for android 和for cocos

先打开for android 文件夹点击.jar文件,可以选择想要集成的平台(和安卓一样,微信钉钉支付宝都需要申请指定的SDK才可以),注意包名



点击确定以后出现一个Sample文件夹,先打开它中的assets文件夹,只需要复制里面的ShareSDK.xml到项目的assets文件夹即可,之后项目的assets文件夹不会再复制入文件,最终如图。



然后打开Smaple的libs文件夹,把出了armeabi之外的全部都复制到项目的libs下



然后打开for cocos,先打开proj.android下的libs文件夹把libPluginProtocol.jar复制到项目的libs下

打开proj.android的res把所有的文件夹全部复制到项目的res文件夹下

最后,打开proj.android的src文件夹,把cn文件夹复制到项目的src下,特别注意下图的目录是否一致



然后就可以把类导入了,把for cocos 下的classes下的C2DXShareSDK文件夹复制到项目的classes下



接下来就是安卓方面配置一些权限和activity,就是加上user-permision,meta-data和activity,具体可以看我上一篇安卓的文章

点击打开链接

最后在主活动里加上代码



安卓方面配置完成,最后一步,打开项目proj.anroid的.mk文件



项目proj.android-studio的.mk文件



最后只要在VS或者记事本或者NotePad++打开

修改AppDelegate.h和.cpp(这个不可以复制或者用官方的实例替换,因为不同的版本可能结构不同)

在.h里加入


在.cpp里



然后在applicationDidFinishLaunching()中调用初始化



下面是initShareSDKConfig()的代码

void AppDelegate::initShareSDKConfig()

{
//设置平台配置
//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());

//腾讯微博
__Dictionary *tencentConf = __Dictionary::create();
tencentConf->setObject(__String::create("801307650"), "app_key");
tencentConf->setObject(__String::create("ae36f4ee3946e1cbb98d6965b0b2ff5c"), "app_secret");
tencentConf->setObject(__String::create("http://www.sharesdk.cn"), "redirect_uri");
stringstream tencent;
tencent << cn::sharesdk::C2DXPlatTypeTencentWeibo;
totalDict->setObject(tencentConf, tencent.str());

//Facebook
__Dictionary *fbConf = __Dictionary::create();
fbConf->setObject(__String::create("107704292745179"), "api_key");
fbConf->setObject(__String::create("38053202e1a5fe26c80c753071f0b573"), "app_secret");
fbConf->setObject(__String::create("ShareSDK"), "display_name");
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());

//Mail
__Dictionary *mailConf = __Dictionary::create();
stringstream mail;
mail << cn::sharesdk::C2DXPlatTypeMail;
totalDict->setObject(mailConf, mail.str());

//Facebook Messenger
/*
iOS 需在info.plist 中增加
<key>FacebookAppID</key>
<string>107704292745179</string>
*/
__Dictionary *fbMessengerConf = __Dictionary::create();
stringstream messenger;
messenger << cn::sharesdk::C2DXPlatTypeFacebookMessenger;
totalDict->setObject(fbMessengerConf, messenger.str());

//钉钉(Ding Talk)
__Dictionary *dingTalkConf = __Dictionary::create();
dingTalkConf->setObject(__String::create("dingoanxyrpiscaovl4qlw"), "app_id");
stringstream dingTalk;
dingTalk << cn::sharesdk::C2DXPlatTypeDingTalk;
totalDict->setObject(dingTalkConf, dingTalk.str());

//Mai Pai
/*
iOS 需要在 info.plist 配置 授权相册权限
<key>NSPhotoLibraryUsageDescription</key>
<string>从手机相册中选择</string>
*/
__Dictionary *meiPaiConf = __Dictionary::create();
meiPaiConf->setObject(__String::create("1089867596"), "app_key");
stringstream meiPai;
meiPai << cn::sharesdk::C2DXPlatTypeMeiPai;
totalDict->setObject(meiPaiConf, meiPai.str());

//line
/*
ios 需要在 info.plist 配置
<key>LineSDKConfig</key>
<dict>
<key>ChannelID</key>
<string>1502330683</string>
</dict>
设置 URL Scheme : line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)
LSApplicationQueriesSchemes : lineauth line line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)
*/
__Dictionary *lineConf = __Dictionary::create();
stringstream line;
line << cn::sharesdk::C2DXPlatTypeLine;
totalDict->setObject(lineConf, line.str());

/*
//Youtube
__Dictionary *youTubeConf = __Dictionary::create();
youTubeConf->setObject(__String::create("906418427202-jinnbqal1niq4s8isbg2ofsqc5ddkcgr.apps.googleusercontent.com"), "client_id");
youTubeConf->setObject(__String::create("http://localhost"), "redirect_uri");
stringstream youTube;
youTube << cn::sharesdk::C2DXPlatTypeYouTube;
totalDict -> setObject(youTubeConf, youTube.str());
*/

//Share iOS SDK4.0.0及以上版本 appkey 及 appSecret 在Info.plist 中设置
//<key>MOBAppKey</key>
// <string>iosv1101</string>
// <key>MOBAppSecret</key>
// <string></string>
cn::sharesdk::C2DXShareSDK::registerAppAndSetPlatformConfig("moba6b6c6d6", "b89d2427a3bc7ad1aea1e1e8c1d36bf3", totalDict);

}

然后HelloWorld.h和.cpp可以复制代码或者直接替换。

到现在所有工作完成,clean一下项目就可以打包或者连真机运行了(不要一边看官方文档一边看我的,如果按照我前面搭建了环境一定不可以走官方文档第8步添加环境变量),下面列举一下可能出现的错误

错误1:和我一样下载的最新版源码,在ShareSDKUtils.java文件夹下报错,这个是官方源码的一点小问题,这里使用了lambda表达式,多了一个括号(),删掉即可

错误2:打包的时候出现values-en错误,在res文件夹下面把values-en删除就行,然后最终效果是这样



点击show share Menu就是总的分享了,这个项目是我新建的,步骤也和上面说的完全一样,如果版本环境都没有问题的话应该是可以接入成功的。


拒绝抄袭,从我做起
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息