[cocos2dx]接入友盟第三方sdk方法(iOS版)

使用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位架构,忽略此步骤。

2.2.2 加入iOS SDK

解压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 文件夹的目录结构

文件或文件夹 含义
Wechat 微信
TencentOpenAPI QQ互联SDK
Facebook Facebook SDK
LaiWang 来往 SDK
YiXin 易信 SDK

2.2.3 添加下面的系统framework

Security.framework,libiconv.dylib,SystemConfiguration.framework,CoreGraphics.framework,libsqlite3.dylib,CoreTelephony.framework,libstdc++.dylib,libz.dylib,Social.framework,Accounts.framework。

2.2.4 按需设置各个平台的URL Scheme

平台 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”
Facebook 默认使用iOS自带的Facebook分享framework,在iOS 6以上有效,若要使用我们提供的facebook分享需要设置“fb”+facebook AppID,例如“fb1440390216179601”,详细集成方法见[集成facebook](#social_facebook)

2.2.5 在AppDelegate实现系统回调方法

在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游戏中。

2.3 在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);
}

你可能感兴趣的:(cocos2dx)