关于友盟分享 1.  分享流程介绍 2.  添加微信及朋友圈 3.  新浪微博分享 4.  添加QQ及Qzone 5.  配置URL schemes 6.  添加SSO授权 7.  第三方登录 8.  添加其他国内分享平台 9.  添加国外分享平台 10.  设置分享内容 11.  常见错误

友盟分享不单单是申请友盟分享的key就行了,在进行qq.微信的分享时还需要再额外申请key才行。

以下是官方给出的使用具体操作方法:

由于苹果审核政策需求,建议大家对未安装客户端平台进行隐藏,在设置QQ、微信AppID之后调用下面的方法,[UMSocialConfig hiddenNotInstallPlatforms:@[UMShareToQQ, UMShareToQzone, UMShareToWechatsession, UMShareToWechatTimeline]];

 设置友盟appkey

  • 获取友盟Appkey。如果你之前已经在友盟注册了应用,获得了Appkey,可以继续使用之前获得Appkey。 

  • 如果你尚未在友盟注册账号,需要先注册,注册之后登录你的账号,点击添加新应用,完成新应用填写之后,将进入应用管理页面。在该页面就能得到Appkey

  • 在代码中设置你的友盟Appkey,在 AppDelegate文件内设置你的AppKey:

#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UMSocialData setAppKey:@"507fcab25270157b37000010"];
}

 使用各种不同的分享接口

 使用默认UI风格

  • 适用人群:希望10分钟集成从无到有实现分享的开发者
  • 接口说明:调用该接口将先弹出分享平台选择页,选择相应的平台将进行授权并分享
//注意:分享到微信好友、微信朋友圈、微信收藏、QQ空间、QQ好友、来往好友、来往朋友圈、易信好友、易信朋友圈、Facebook、Twitter、Instagram等平台需要参考各自的集成方法
//如果需要分享回调,请将delegate对象设置self,并实现下面的回调方法
[UMSocialSnsService presentSnsIconSheetView:self
                                     appKey:@"507fcab25270157b37000010"
                                  shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                 shareImage:[UIImage imageNamed:@"icon"]
                            shareToSnsNames:[NSArray arrayWithObjects:UMShareToSina,UMShareToTencent,UMShareToRenren,nil]
                                   delegate:self]; 

现在会出现效果:
关于友盟分享
1.  分享流程介绍
2.  添加微信及朋友圈
3.  新浪微博分享
4.  添加QQ及Qzone
5.  配置URL schemes
6.  添加SSO授权
7.  第三方登录
8.  添加其他国内分享平台
9.  添加国外分享平台
10.  设置分享内容
11.  常见错误

注意: 1. 支持分享编辑页和授权页面横屏,必须要在出现列表页面前设置:
[UMSocialConfig setSupportedInterfaceOrientations:UIInterfaceOrientationMaskLandscape]; 
2. 点击每个平台后默认会进入内容编辑页面,若想点击后直接分享内容,可以实现下面的回调方法。

//弹出列表方法presentSnsIconSheetView需要设置delegate为self
-(BOOL)isDirectShareInIconActionSheet
{
    return YES;
}

实现回调方法(可选):

-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
    //根据`responseCode`得到发送结果,如果分享成功
    if(response.responseCode == UMSResponseCodeSuccess)
    {
        //得到分享到的微博平台名
        NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
    }      
}

 使用分享API(自动授权后跳转到内容编辑页)

  • 适用人群:较深耕细作型开发者,希望自定义分享列表,使用分享底层API,但仍使用友盟提供的分享编辑页。
  • 接口说明:如果已经授权,则直接跳转到分享编辑页,否则将进行授权操作然后再跳转到分享编辑页.相比presentSnsIconSheetView方法,该接口不需要弹出分享面板。该接口支持所有平台的分享(QQ好友,微信会有选择好友的界面)。

(没有授权则进入授权页面,完成授权后再进入编辑页面。)

#import "UMSocial.h"
……
//注意:分享到微信好友、微信朋友圈、微信收藏、QQ空间、QQ好友、来往好友、来往朋友圈、易信好友、易信朋友圈、Facebook、Twitter、Instagram等平台需要参考各自的集成方法
    [[UMSocialControllerService defaultControllerService] setShareText:@"分享内嵌文字" shareImage:[UIImage imageNamed:@"icon"] socialUIDelegate:self];        //设置分享内容和回调对象
    [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina].snsClickHandler(self,[UMSocialControllerService defaultControllerService],YES);

注意:若弹出横屏的页面,必须要在出现编辑页面前设置
[UMSocialConfig setSupportedInterfaceOrientations:UIInterfaceOrientationMaskLandscape];

实现回调方法(可选):

-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
    //根据`responseCode`得到发送结果,如果分享成功
    if(response.responseCode == UMSResponseCodeSuccess)
    {
        //得到分享到的微博平台名
        NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
    }      
}

 直接分享底层接口(自动检查授权)

  • 适用人群:较深耕细作型开发者,希望自定义分享列表,希望授权和分享发生,使用分享底层API并自动授权。
  • 直接发送微博到对应的微博平台,仅支持分享到一个平台,可以传入文字、图片、地理位置、url资源。图片、地理位置和url资源可以设为nil。
    只发送到一个微博平台,且该平台没有先授权,SDK会自动打开授权页面,授权完成之后再发送微博。
//注意:分享到微信好友、微信朋友圈、微信收藏、QQ空间、QQ好友、来往好友、来往朋友圈、易信好友、易信朋友圈、Facebook、Twitter、Instagram等平台需要参考各自的集成方法
    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToSina] content:@"分享内嵌文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

 直接分享底层接口(授权 + 分享接口分离)

  • 适用人群:深耕细作型开发者,希望完全自定义界面,只使用分享相关底层API实现分享。
  • 接口说明:实现"授权+直接分享",你可以将授权接口(doOauthVerify)跟直接分享接口(directShare)结合起来使用。实现只需简单的几步:
    步骤一:定义自己的分享面板 
    步骤二:实现用户授权(首先判断是否已经授权过,否则会重复授权)
    //判断是否授权
//注意:分享到微信好友、微信朋友圈、微信收藏、QQ空间、QQ好友、来往好友、来往朋友圈、易信好友、易信朋友圈、Facebook、Twitter、Instagram等平台需要参考各自的集成方法
    [UMSocialAccountManager isOauthAndTokenNotExpired:UMShareToSina]
    //进入授权页面
    [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina].loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            //获取微博用户名、uid、token等
            UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToSina];
            NSLog(@"username is %@, uid is %@, token is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken); 
               //进入你的分享内容编辑页面  
        }
    });

> 彩蛋:如果您已经自己使用其他SDK实现了分享,不希望用户重复授权,友盟分享提供了兼容方法。没有这种奇葩行为的用户请忽略此段:

    UMSocialAccountEntity *weiboAccount = [[UMSocialAccountEntity alloc] initWithPlatformName:UMShareToSina];
        weiboAccount.usid = @"your usid";
        weiboAccount.accessToken = @"your accesstoken";
    //    weiboAccount.openId = @"tencent weibo openId";          //腾讯微博账户必需设置openId
    //同步用户信息
    [UMSocialAccountManager postSnsAccount:weiboAccount completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            //在本地缓存设置得到的账户信息
            [UMSocialAccountManager setSnsAccount:weiboAccount];
            //进入你自定义的分享内容编辑页面或者使用我们的内容编辑页面
    }}];

**步骤三:调用直接分享API接口**

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToSina] content:@"分享内嵌文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *shareResponse){
       if (shareResponse.responseCode == UMSResponseCodeSuccess) {
           NSLog(@"分享成功!");
       }
    }];

设置支持的屏幕方向

支持分享编辑页和授权页面横屏,必须要在出现列表页面前进行下面,并在Xcode上的xxx_info.plist文件支持屏幕方向的字段'Supported interface orientations'增加相应的横屏或者竖屏的枚举值。 

    //根据你要支持的方向,UIInterfaceOrientationMaskLandscape设置成相应的方向
[UMSocialConfig setSupportedInterfaceOrientations:UIInterfaceOrientationMaskLandscape];

处理分享错误

用下面的代码打开我们SDK在控制台的输出后能看到相应的错误码。

    [UMSocialData openLog:YES];

 各平台SSO(免登录)配置

注意:使用各平台SSO分享,需要到各个微博平台申请自己的应用,绑定方法可以参考绑定第三方账号到友盟后台。 

步骤1. 添加URL scheme

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes。如果使用的是Xcode3或更低版本,则需要在plist文件中添加。获取各个平台appkey或者appid的方法可以参考分享详细文档绑定各个平台部分,各个平台的url scheme格式如下表:

平台  url scheme设置格式
新浪微博(使用微博原生SDK) “wb”+新浪appkey,例如“wb126663232”
新浪微博(非微博原生SDK) “sina.”+友盟appkey,例如“sina.507fcab25270157b37000010”
腾讯微博 “wb”+你在友盟后台绑定的腾讯微博App Key,例如“wb801345073”
微信 微信应用appId,例如“wxd9a39c7122aa6516”,微信详细集成步骤参考微信集成方法
人人网 “rm”+你的应用bundle id,例如“rmcom.umeng.SocialSDK”
QQ、QQ空间 需要添加两个URL schemes 1. “QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ05FC5B14”。生成十六进制方法:点击链接,并在QQ互联后台的URL schema中填入此字符串保持一致。2.“tencent“+腾讯QQ互联应用Id,例如“tencent100424468" ,QQ及Qzone详细集成步骤参考手机QQ集成方法
来往 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

关于友盟分享
1.  分享流程介绍
2.  添加微信及朋友圈
3.  新浪微博分享
4.  添加QQ及Qzone
5.  配置URL schemes
6.  添加SSO授权
7.  第三方登录
8.  添加其他国内分享平台
9.  添加国外分享平台
10.  设置分享内容
11.  常见错误

  • 在AppDelegate文件集成相应的开关方法:
#import "UMSocial.h"     
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //设置友盟社会化组件appkey
    [UMSocialData setAppKey:UmengAppkey];
    //设置微信AppId、appSecret,分享url
    [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];
    //设置手机QQ 的AppId,Appkey,和分享URL,需要#import "UMSocialQQHandler.h"
    [UMSocialQQHandler setQQWithAppId:@"100424468" appKey:@"c7394704798a158208a74ab60104f0ba" url:@"http://www.umeng.com/social"];
    //打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。若在新浪后台设置我们的回调地址,“http://sns.whalecloud.com/sina2/callback”,这里可以传nil ,需要 #import "UMSocialSinaHandler.h"
    [UMSocialSinaHandler openSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];
    //打开腾讯微博SSO开关,设置回调地址,需要 #import "UMSocialTencentWeiboHandler.h"
    [UMSocialTencentWeiboHandler openSSOWithRedirectUrl:@"http://sns.whalecloud.com/tencent2/callback"];
    //打开人人网SSO开关,需要 #import "UMSocialRenrenHandler.h"
    [UMSocialRenrenHandler openSSO];
    //设置易信Appkey和分享url地址,注意需要引用头文件 #import UMSocialYixinHandler.h
    [UMSocialYixinHandler setYixinAppKey:@"yx35664bdff4db42c2b7be1e29390c1a06" url:@"http://www.umeng.com/social"];
    //设置来往AppId,appscret,显示来源名称和url地址,注意需要引用头文件 #import "UMSocialLaiwangHandler.h"
    [UMSocialLaiwangHandler setLaiwangAppId:@"8112117817424282305" appSecret:@"9996ed5039e641658de7b83345fee6c9" appDescription:@"友盟社会化组件" urlStirng:@"http://www.umeng.com/social"];
    //设置Facebook,AppID和分享url,需要#import "UMSocialFacebookHandler.h"
    //默认使用iOS自带的Facebook分享framework,在iOS 6以上有效。若要使用我们提供的facebook分享需要使用此开关:
    [UMSocialFacebookHandler setFacebookAppID:@"1440390216179601" shareFacebookWithURL:@"http://www.umeng.com/social"];
    //默认使用iOS自带的Twitter分享framework,在iOS 6以上有效。若要使用我们提供的twitter分享需要使用此开关:
    [UMSocialTwitterHandler openTwitter];
}

步骤2. 在AppDelegate文件里面实现下面三个系统回调方法

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

若你除了使用我们SDK外,还用了其他SDK,需要重写此回调方法的,可以参考下面的写法:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL result = [UMSocialSnsService handleOpenURL:url];
    if (result == FALSE) {
        //调用其他SDK,例如新浪微博SDK等
    }
    return result;
}

步骤3. 添加系统库文件(不使用QQ空间和手机QQ的SSO功能可以忽略此步骤)

  • 添加SDK依赖的系统库文件。

    在Xcode中打开工程配置文件,选择“summary”一栏。在“summary”中选择“Linked Frameworks and Libraries”一栏,点击“+”图标添加下面八个库文件,分别是

    • Security.framework
    • libiconv.dylib
    • SystemConfiguration.framework
    • CoreGraphics.Framework
    • libsqlite3.dylib
    • CoreTelephony.framework
    • libstdc++.dylib
    • libz.dylib

2.  添加微信及朋友圈

2.1  注册应用

使用微信分享首先需要在微信开放平台(点击链接)申请, 按照要求填写应用信息,审核通过后获取到微信APPID和APPsecret

2.2  添加相关文件

UMSocial_Sdk_Extra_Frameworks目录下,添加Wechat文件夹到工程

2.3  添加微信

2.3.1  添加微信及朋友圈到分享列表

在你的程序APPdelegate入口方法添加下面的代码

  #import "UMSocialWechatHandler.h"
    //设置微信AppId、appSecret,分享url
    [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];

  • 如果不添加上面的代码,则分享列表中不会出现微信及朋友圈图标
  • URL必须为http链接,如果设置为nil则默认为友盟官网链接 

2.3.2  配置URL schemes

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,添加xcode的url scheme为微信应用appId,例如“wxd9a39c7122aa6516”

2.3.3  添加系统回调

在APPdelegate中实现下面两个系统回调方法:

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

2.4  设置分享内容

2.4.1  默认分享样式

使用友盟默认分享UI页面,分享到微信好友、微信朋友圈、微信收藏

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                              shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UMShareToWechatFavorite]
                                    delegate:self]; 
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

2.4.2  自定义分享样式

使用自定义分享面板,则在对于的微信分享按钮中实现下面的方法

    //使用UMShareToWechatSession,UMShareToWechatTimeline,UMShareToWechatFavorite分别代表微信好友、微信朋友圈、微信收藏
    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToWechatSession] content:@"分享内嵌文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

2.4.3  设置点击分享内容跳转链接

当分享消息类型为图文时,点击分享内容会跳转到预设的链接,设置方法如下

[UMSocialData defaultData].extConfig.wechatSessionData.url = @"http://baidu.com";

如果是朋友圈,则替换平台参数名即可

[UMSocialData defaultData].extConfig.wechatTimelineData.url = @"http://baidu.com";

注意设置的链接必须为http链接

2.4.4  设置title

设置微信好友title方法为

[UMSocialData defaultData].extConfig.wechatSessionData.title = @"微信好友title";

设置微信朋友圈title方法替换平台参数名即可

[UMSocialData defaultData].extConfig.wechatTimelineData.title = @"微信朋友圈title";

微信朋友圈分享消息只显示title

2.4.5  设置分享消息类型

微信分享消息类型分为图文、纯图片、纯文字、应用三种类型,默认分享类型为图文分享,即展示分享文字及图片缩略图,点击后跳转到预设链接

纯图片分享类型方法为

[UMSocialData defaultData].extConfig.wxMessageType = UMSocialWXMessageTypeImage;

纯图片分享类型没有文字,点击图片可以查看大图

纯文字分享类型方法为

[UMSocialData defaultData].extConfig.wxMessageType = UMSocialWXMessageTypeText;

纯文字分享类型没有图片,点击不会跳转

应用分享类型方法

[UMSocialData defaultData].extConfig.wxMessageType = UMSocialWXMessageTypeApp;

应用分享类型点击分享内容后跳转到应用下载页面,下载地址自动抓取开发者在微信开放平台填写的应用地址,如果用户已经安装应用,则打开APP

3.  新浪微博分享

3.1  注册应用

在微博开放平台(点击链接)注册应用,完整填写相关应用信息,并且审核通过,未审核应用会遇到5034错误码,详情参考文档

3.2  添加相关文件

解压SDK压缩包,将形如UMSocial_Sdk_x.x.x的文件夹拖入工程目录 

3.3  使用SSO授权方式

使用SSO授权方式,在用户安装了微博客户端并登录时,可以在分享过程中不需要输入账号密码,直接通过微博客户端授权,随后进行网页分享,免去了用户输入密码的过程。 在用户未安装客户端时,则自动跳转到网页授权方式,微博SSO授权我们提供微博原生SDK与非原生SDK两种方式,选择其中一种即可。

3.3.1  添加相关库文件(使用微博原生SDK)

解压下载文件夹,将SinaSSO文件夹添加到工程。

在other linker flags增加-ObjC 选项,并添加ImageIO 系统framework

3.3.2  配置URL schemes(使用微博原生SDK)

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为“wb”+新浪appkey,例如“wb126663232”

3.3.3  添加SSO授权开关(使用微博原生SDK)

在APPdelegate中集成新浪微博开关

  #import "UMSocialSinaSSOHandler.h"
  //打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。若在新浪后台设置我们的回调地址,“http://sns.whalecloud.com/sina2/callback”,这里可以传nil
  [UMSocialSinaSSOHandler openNewSinaSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

回调URL必须和后台保持一致,否则会报错redirect URL mismatch

安全域名设置必须为sns.whalecloud.com ,设置方法参考文档

3.3.4  添加系统回调 (使用微博原生SDK)

在APPdelegate中实现下面的回调方法

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

3.3.5  添加相关库文件(非微博原生SDK)

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Sina文件夹添加到工程。

3.3.6  配置URL schemes(非微博原生SDK)

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为“sina.”+友盟appkey,例如“sina.507fcab25270157b37000010”

3.3.7  添加SSO授权开关(非微博原生SDK)

在APPdelegate中集成新浪微博开关

#import "UMSocialSinaHandler.h"
    //打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。若在新浪后台设置我们的回调地址,“http://sns.whalecloud.com/sina2/callback”,这里可以传nil
    [UMSocialSinaHandler openSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

回调URL必须和后台保持一致,否则会报错redirect URL mismatch

安全域名设置必须为sns.whalecloud.com ,设置方法参考文档

3.3.8  添加系统回调(非微博原生SDK)

在APPdelegate中实现下面的回调方法

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

3.4  设置分享内容

3.4.1  使用默认分享界面

使用友盟默认提供的分享面板,调用下面的代码 

[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:[UIImage imageNamed:@"icon.png"]
                          shareToSnsNames:@[UMShareToSina]
                                    delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

使用上面的接口,将使用友盟默认的分享面板以及分享编辑页 

3.4.2  使用自定义分享面板

使用自己定义的分享列表,但仍然使用友盟分享编辑页,则使用下面的代码

#import "UMSocial.h"

[[UMSocialControllerService defaultControllerService] setShareText:@"分享内嵌文字" shareImage:[UIImage imageNamed:@"icon"] socialUIDelegate:self];        //设置分享内容和回调对象
    [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina].snsClickHandler(self,[UMSocialControllerService defaultControllerService],YES);

3.4.3  使用直接分享接口

直接分享接口,分享过程没有分享编辑页,适用于希望直接在后台进行分享或希望自定义分享编辑页的开发者

[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToSina] content:@"分享内嵌文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *shareResponse){
   if (shareResponse.responseCode == UMSResponseCodeSuccess) {
       NSLog(@"分享成功!");
   }
}];

3.5  分享多媒体资源

3.5.1  分享URL图片

分享过程中一次只能上传一个图片,因此URL图片和本地图片不可共存,当两者都存在时会默认忽略本地图片

3.5.1.1  使用默认分享界面分享URL图片

[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeImage url:@"http://www.baidu.com/img/bdlogo.gif"];
//调用快速分享接口

在设置分享内容前调用即可 

3.5.1.2  使用自定义界面分享URL图片

UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:
                                    @"http://www.baidu.com/img/bdlogo.gif"];
[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToSina] content:@"分享内嵌文字" image:nil location:nil urlResource:urlResource presentedController:self completion:^(UMSocialResponseEntity *shareResponse){
   if (shareResponse.responseCode == UMSResponseCodeSuccess) {
       NSLog(@"分享成功!");
   }
}];

3.5.2  分享本地gif图片

分享本地gif图片到各个开放平台,需要生成把本地gif图片生成NSData对象,作为各个分享方法的shareImage参数,例如快速分享接口如下写法。
分享png、jpg图片则只需要生成UIImage,传入到shareImage参数,不能使用这种写法。

  //分享gif图片
  NSString *path = [[NSBundle mainBundle] pathForResource:@"picName"
                                                     ofType:@"gif"];
    NSData *gifData = [NSData dataWithContentsOfFile:path];
    [UMSocialSnsService presentSnsIconSheetView:self appKey:UmengAppkey shareText:shareText shareImage:gifData shareToSnsNames:@[UMShareToSina] delegate:self];
    //分享png、jpg图片
    [UMSocialSnsService presentSnsIconSheetView:self appKey:UmengAppkey shareText:shareText shareImage:[UIImage imageNamed:@"picName"] shareToSnsNames:@[UMShareToSina] delegate:self];

3.5.3  分享url音乐

分享URL音乐资源将UrlResourceType设置为Music即可

[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeMusic url:@"http://music.huoxing.com/upload/20130330/1364651263157_1085.mp3"];
//调用快速分享接口

3.5.4  分享url视频

分享URL视频资源将UrlResourceType设置为Video即可

[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeVideo url:@"http://v.youku.com/v_show/id_XNjQ1NjczNzEy.html?f=21207816&ev=2"];
//调用快速分享接口

3.6  关注官方微博

//usid为官方微博的uid
[UMSocialConfig setFollowWeiboUids:@{UMShareToSina:@"12312312"}];

如果采用webview方式授权,则在授权页面中显示关注官方微博的复选框,如果采用SSO方式授权,则在分享编辑页显示关注微博复选框

如果希望直接静默关注(不出现选项),则在代码中添加下面的方法

//usid为官方微博的uid
[[UMSocialDataService defaultDataService] requestAddFollow:UMShareToSina followedUsid:@[@"2937537507"] completion:nil];

4.  添加QQ及Qzone

4.1  注册应用

使用QQ及Qzone分享首先在腾讯开放平台注册应用,地址:http://open.qq.com 按照要求填写,审核通过前需要添加测试账号,否则会报错110406或110404

4.2  添加相关文件

UMSocial_Sdk_Extra_Frameworks目录下的,添加TencentOpenAPI文件夹到工程 添加下面几个系统framework

在Xcode中打开工程配置文件,选择“summary”一栏。在“summary”中选择“Linked Frameworks and Libraries”一栏,点击“+”图标添加下面八个库文件,分别是

  • Security.framework
  • libiconv.dylib
  • SystemConfiguration.framework
  • CoreGraphics.Framework
  • libsqlite3.dylib
  • CoreTelephony.framework
  • libstdc++.dylib
  • libz.dylib

4.3  添加QQ及Qzone

4.3.1  添加QQ及Qzone到分享列表

在AppDelegate应用入口方法打开集成手机QQ、Qzone开关

//设置分享到QQ/Qzone的应用Id,和分享url 链接
#import "UMSocialQQHandler.h"
[UMSocialQQHandler setQQWithAppId:@"100424468" appKey:@"c7394704798a158208a74ab60104f0ba" url:@"http://www.umeng.com/social"];

  • 如果不添加上面的代码,则分享列表中不会出现QQ及Qzone图标
  • URL必须为http链接,如果设置为nil则默认为友盟官网链接 

4.3.2  配置URL schemes

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,设置Xcode的url scheme格式为“QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ05FC5B14”。并在QQ互联后台的URL schema中填入此字符串保持一致。 额外设置 url schemes 的格式为"tencent"+腾讯QQ互联应用appId,例如“tencent100424468”

如果 URL schemes 配置错误,则分享完成后无法返回应用

在Xcode 6.0创建工程时,默认可能没有单独设置Bundle display name属性值。但是因为SDK需要用到Bundle display name的值,所以务必请检查确保这个属性存在,如果没有请添加上。

关于友盟分享
1.  分享流程介绍
2.  添加微信及朋友圈
3.  新浪微博分享
4.  添加QQ及Qzone
5.  配置URL schemes
6.  添加SSO授权
7.  第三方登录
8.  添加其他国内分享平台
9.  添加国外分享平台
10.  设置分享内容
11.  常见错误

4.3.3  添加系统回调

在APPdelegate中实现下面的方法

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

4.4  设置分享内容

4.4.1  默认分享样式

使用友盟默认分UI界面,添加下面代码

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                                shareToSnsNames:@[UMShareToQQ,UMShareToQzone]
                                    delegate:self]; 
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

Qzone分享文字与图片缺一不可,否则会出现错误码10001

4.4.2  自定义分享样式

使用自定义分享UI界面,则在对应的QQ分享按钮中实现下面的方法

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToQQ] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

Qzone分享则替换平台参数为Qzone即可

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToQzone] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

Qzone分享文字与图片缺一不可,否则会出现错误码10001

4.4.3  设置点击分享内容跳转链接

QQ设置点击分享内容跳转链接调用下面的方法

 [UMSocialData defaultData].extConfig.qqData.url = @"http://baidu.com";

Qzone设置点击分享内容跳转链接替换平台参数名即可

 [UMSocialData defaultData].extConfig.qzoneData.url = @"http://baidu.com";

4.4.4  设置title

QQ设置title方法为

 [UMSocialData defaultData].extConfig.qqData.title = @"QQ分享title";

Qzone设置title方法将平台参数名替换即可

 [UMSocialData defaultData].extConfig.qzoneData.title = @"Qzone分享title";

4.4.5  设置分享消息类型

QQ分享消息类型分为图文、纯图片,QQ空间分享只支持图文分享(图片文字缺一不可)

QQ分享消息默认为图文类型,设置纯图片类型方法为

[UMSocialData defaultData].extConfig.qqData.qqMessageType = UMSocialQQMessageTypeImage;

在调用分享代码前调用即可

5.  配置URL schemes

5.1  为什么要配置 URL schemes

URL schemes 和跳出应用后返回应用的逻辑相关,因此如果使用了SSO授权功能或QQ、微信、webview方式的Facebook,就必须配置URL schemes,否则跳出应用后将无法返回

5.2  如何设置 URL schemes

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes。如果使用的是Xcode3或更低版本,则需要在plist文件中添加。获取各个平台appkey或者appid的方法可以参考分享详细文档绑定各个平台部分,各个平台的url scheme格式如下表:

平台  url scheme设置格式
新浪微博 “sina.”+友盟appkey,例如“sina.507fcab25270157b37000010”
腾讯微博 “wb”+你在友盟后台绑定的腾讯微博App Key,例如“wb801345073”
微信 微信应用appId,例如“wxd9a39c7122aa6516”,微信详细集成步骤参考微信集成方法
人人网 “rm”+你的应用bundle id,例如“rmcom.umeng.SocialSDK”
QQ、QQ空间 需要添加两个URL schemes 1. “QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ05FC5B14”。生成十六进制方法:点击链接,并在QQ互联后台的URL schema中填入此字符串保持一致。2.“tencent“+腾讯QQ互联应用Id,例如“tencent100424468" ,QQ及Qzone详细集成步骤参考手机QQ集成方法
来往 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

6.  添加SSO授权

6.1  SSO授权简介

SSO指单点登录,当用户安装了对应第三方客户端且登录时,可以在登录时免去输入账号密码的过程,简化分享流程,目前友盟支持新浪、腾讯微博、人人网、QQ及Qzone平台,由于腾讯微博和人人网官方没有提供64位SDK,因此选择友盟64位版本下载时无法使用腾讯微博及人人网SSO功能。

6.2  新浪微博SSO

使用SSO授权方式,在用户安装了微博客户端并登录时,可以在分享过程中不需要输入账号密码,直接通过微博客户端授权,随后进行网页分享,免去了用户输入密码的过程。 在用户未安装客户端时,则自动跳转到网页授权方式,微博SSO授权我们提供微博原生SDK与非原生SDK两种方式,选择其中一种即可。

6.2.1  添加相关库文件(使用微博原生SDK)

解压下载文件夹,将SinaSSO文件夹添加到工程。

在other linker flags增加-ObjC 选项,并添加ImageIO 系统framework

6.2.2  配置URL schemes(使用微博原生SDK)

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为“wb”+新浪appkey,例如“wb126663232”

6.2.3  添加SSO授权开关(使用微博原生SDK)

在APPdelegate中集成新浪微博开关

  #import "UMSocialSinaSSOHandler.h"
  //打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。若在新浪后台设置我们的回调地址,“http://sns.whalecloud.com/sina2/callback”,这里可以传nil
  [UMSocialSinaSSOHandler openNewSinaSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

回调URL必须和后台保持一致,否则会报错redirect URL mismatch

安全域名设置必须为sns.whalecloud.com ,设置方法参考文档

6.2.4  添加系统回调 (使用微博原生SDK)

在APPdelegate中实现下面的回调方法

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

6.2.5  添加相关库文件(非微博原生SDK)

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Sina文件夹添加到工程。

6.2.6  配置URL schemes(非微博原生SDK)

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为“sina.”+友盟appkey,例如“sina.507fcab25270157b37000010”

6.2.7  添加SSO授权开关(非微博原生SDK)

在APPdelegate中集成新浪微博开关

#import "UMSocialSinaHandler.h"
    //打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。若在新浪后台设置我们的回调地址,“http://sns.whalecloud.com/sina2/callback”,这里可以传nil
    [UMSocialSinaHandler openSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

回调URL必须和后台保持一致,否则会报错redirect URL mismatch

安全域名设置必须为sns.whalecloud.com ,设置方法参考文档

6.2.8  添加系统回调(非微博原生SDK)

在APPdelegate中实现下面的回调方法

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

6.3  腾讯微博SSO

6.3.1  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把TencentWeibo文件夹添加到工程。

6.3.2  配置URL schemes

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为"wb"+你的腾讯微博App Key,例如“wb801345073”

6.3.3  添加SSO授权开关

在你的Appdelegate入口方法,添加下面的代码

    //打开腾讯微博SSO开关,设置回调地址
    [UMSocialTencentWeiboHandler openSSOWithRedirectUrl:@"http://sns.whalecloud.com/tencent2/callback"];

6.3.4  添加系统回调

在APPdelegate中实现下面的回调方法

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

6.4  人人网SSO

6.4.1  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Renren文件夹添加到工程。

6.4.2  配置URL schemes

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为“rm”+你的应用bundle id,例如“rmcom.umeng.SocialSDK”

6.4.3  添加SSO授权开关

在你的Appdelegate入口方法,添加下面的代码

//打开人人网SSO开关
[UMSocialRenrenHandler openSSO];

6.4.4  添加系统回调

在APPdelegate中实现下面的回调方法

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

7.  第三方登录

7.1  第三方登录概述

第三方登录主要用于简化用户登录流程,通过用户拥有的微博、QQ、微信等第三方账号进行登录并且构建APP自己的登录账号体系。

实现第三方登录主要通过下面两步:

  • 在第三方平台完成授权
  • 获取第三方平台的accesstoken信息及用户资料

7.1.1  第三方登录支持的平台

目前友盟社会化组件支持的第三方登录平台为:新浪微博、微信、QQ、QQ空间、腾讯微博、人人网、豆瓣、Facebook、Twitter

7.2  新浪微博登录

在新浪微博登录按钮中实现下面的方法

UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          获取微博用户名、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToSina];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});

在授权完成后调用获取用户信息的方法

//获取accestoken以及新浪用户信息,得到的数据在回调Block对象形参respone的data属性
[[UMSocialDataService defaultDataService] requestSnsInformation:UMShareToSina  completion:^(UMSocialResponseEntity *response){
        NSLog(@"SnsInformation is %@",response.data);
    }];

获取好友列表调用下面的方法,由于新浪官方限制,获取好友列表只能获取到30%好友

[[UMSocialDataService defaultDataService] requestSnsFriends:UMShareToSina  completion:^(UMSocialResponseEntity *response){
        NSLog(@"SnsFriends is %@",response.data);
    }];

删除授权调用下面的方法

[[UMSocialDataService defaultDataService] requestUnOauthWithType:UMShareToSina  completion:^(UMSocialResponseEntity *response){
        NSLog(@"response is %@",response);
    }];

7.3  QQ及Qzone登录

QQ登录只支持SSO登录方式,必须具备手机QQ客户端,Qzone默认调用SSO登录

添加配置文件参考文档:添加QQ及Qzone,添加相关库文件,配置URL schemes及添加系统回调

在AppDelegate应用入口方法添加下面的方法

    //设置分享到QQ/Qzone的应用Id,和分享url 链接
    #import "UMSocialQQHandler.h"
    [UMSocialQQHandler setQQWithAppId:@"100424468" appKey:@"c7394704798a158208a74ab60104f0ba" url:@"http://www.umeng.com/social"];

在QQ登录按钮中实现下面的方法

UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToQQ];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          获取微博用户名、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToQQ];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});

在Qzone登录按钮中实现下面的方法

 UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToQzone];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          获取微博用户名、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToQzone];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});

在授权完成后调用获取用户信息的方法

//获取accestoken以及QQ用户信息,得到的数据在回调Block对象形参respone的data属性
[[UMSocialDataService defaultDataService] requestSnsInformation:UMShareToQQ  completion:^(UMSocialResponseEntity *response){
        NSLog(@"SnsInformation is %@",response.data);
    }];

Qzone将UMShareToQQ替换为UMShareToQzone即可,获取QQ用户信息时,获取的头像为Qzone头像

7.4  微信登录

添加配置文件参考文档:添加微信及朋友圈,添加相关库文件,配置URL schemes及添加系统回调

在你的程序APPdelegate入口方法添加下面的代码

  #import "UMSocialWechatHandler.h"
    //设置微信AppId、appSecret,分享url
    [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];

在微信登录按钮中实现下面的方法

  UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToWechatSession];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary]valueForKey:UMShareToWechatSession];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }

 });

在授权完成后调用获取用户信息的方法

//得到的数据在回调Block对象形参respone的data属性
[[UMSocialDataService defaultDataService] requestSnsInformation:UMShareToWechatsession  completion:^(UMSocialResponseEntity *response){
        NSLog(@"SnsInformation is %@",response.data);
    }];

8.  添加其他国内分享平台

8.1  国内分享平台简介

友盟社会化组件支持的国内分享平台包括:新浪、微信及朋友圈、QQ及Qzone、腾讯微博、人人网、豆瓣、短信、邮件、易信和来往

8.2  添加腾讯微博

8.2.1  使用默认分享界面

使用友盟默认提供的分享面板,调用下面的代码 

[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:[UIImage imageNamed:@"icon.png"]
                          shareToSnsNames:@[UMShareToTencent]
                                    delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

8.2.2  使用自定义分享界面

自定义分享样式,可以在自己定义的分享按钮中实现下面的方法

[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToTencent] content:@"分享内嵌文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *shareResponse){
   if (shareResponse.responseCode == UMSResponseCodeSuccess) {
       NSLog(@"分享成功!");
   }
}];

8.3  添加人人网

8.3.1  使用默认分享界面

使用友盟默认提供的分享面板,调用下面的代码 

[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:[UIImage imageNamed:@"icon.png"]
                          shareToSnsNames:@[UMShareToRenren]
                                    delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

8.3.2  使用自定义分享界面

自定义分享样式,可以在自己定义的分享按钮中实现下面的方法

[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToRenren] content:@"分享内嵌文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *shareResponse){
   if (shareResponse.responseCode == UMSResponseCodeSuccess) {
       NSLog(@"分享成功!");
   }
}];

8.4  添加豆瓣、短信、邮件

在默认分享界面下,直接在分享平台的数组中传递平台参数名即可

[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:[UIImage imageNamed:@"icon.png"]
                          shareToSnsNames:@[UMShareToDouban,UMShareToEmail,UMShareToSms]
                                    delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

8.5  添加易信

8.5.1  添加相关文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把YiXin文件夹添加到工程

8.5.2  配置URL schemes 及系统回调

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为易信Appkey,例如“yx35664bdff4db42c2b7be1e29390c1a06”

在APPdelegate中实现下面的回调方法

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

8.5.3  添加易信及朋友圈到分享列表

在APPdelegate中添加下面的方法

//设置易信Appkey和分享url地址,注意需要引用头文件 #import UMSocialYixinHandler.h
[UMSocialYixinHandler setYixinAppKey:@"yx35664bdff4db42c2b7be1e29390c1a06" url:@"http://www.umeng.com/social"];

8.5.4  设置分享内容

使用默认分享界面调用下面的方法,其中UMShareToYXSession代表易信好友,UMShareToYXTimeline代表易信朋友圈

[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                  shareImage:[UIImage imageNamed:@"icon.png"]
                          shareToSnsNames:@[UMShareToYXSession,UMShareToYXTimeline]
                                delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

使用自定义分享界面,则在对应的按钮中实现下面的方法

[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToYXSession] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
    if (response.responseCode == UMSResponseCodeSuccess) {
        NSLog(@"分享成功!");
    }
}];

上述代码为分享到易信好友,易信朋友圈将平台参数UMShareToYXSession替换为UMShareToYXTimeline即可 

8.6  添加来往

8.6.1  添加相关文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把LaiWang文件夹添加到工程

8.6.2  配置URL schemes 及系统回调

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,Identifier填“Laiwang”,URL Schemes填来往AppId.注意使用来往SDK后,Xcode工程other linker flags需要添加-ObjC参数

在APPdelegate中实现下面的回调方法

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

8.6.3  添加来往及来往动态到分享列表

在APPdelegate中添加下面的方法

//设置来往AppId,appscret,显示来源名称和url地址,注意需要引用头文件 #import "UMSocialLaiwangHandler.h"
[UMSocialLaiwangHandler setLaiwangAppId:@"8112117817424282305" appSecret:@"9996ed5039e641658de7b83345fee6c9" appDescription:@"友盟社会化组件" urlStirng:@"http://www.umeng.com/social"];

8.6.4  设置分享内容

使用默认分享界面调用下面的方法,其中UMShareToLWSession代表来往好友,UMShareToLWTimeline代表来往动态

[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                  shareImage:[UIImage imageNamed:@"icon.png"]
                          shareToSnsNames:@[UMShareToLWSession,UMShareToLWTimeline]
                                delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

使用自定义分享界面,则在对应的按钮中实现下面的方法

[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToLWSession] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
    if (response.responseCode == UMSResponseCodeSuccess) {
        NSLog(@"分享成功!");
    }
}];

上述代码为分享到来往好友,来往动态将平台参数UMShareToLWSession替换为UMShareToLWTimeline即可 

9.  添加国外分享平台

9.1  国外分享平台简介

友盟社会化组件支持多个国外分享平台,包括Facebook、Twitter、Instagram、Line、Whatsapp、Tumblr,其中Facebook和Twitter分享支持应用内网页分享,其余平台仅支持跳转客户端分享。

9.2  添加Facebook

9.2.1  使用系统自带Facebook分享

使用系统自带Facebook需要先在手机上设置Facebook账号

使用默认分享界面调用下面的代码

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                                 shareToSnsNames:@[UMShareToFacebook]
                                        delegate:self];
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

使用自定义分享界面在对应的Facebook分享按钮中实现下面的方法

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToFacebook] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

9.2.2  使用应用内网页分享

9.2.2.1  注册应用

在Facebook开放平台(点击链接) 注册你的facebook应用,注意在你的应用Native iOS App填写Bundle ID

9.2.2.2  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Facebook文件夹添加到工程

9.2.2.3  添加URL schemes 及系统回调

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,设置Xcode的url scheme格式为“fb”+facebook AppID,例如“fb1440390216179601”

在APPdelegate中实现下面的回调

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

9.2.2.4  添加Facebook

在AppDelegate的入口方法增加下面代码

    //设置Facebook,AppID和分享url,需要#import "UMSocialFacebookHandler.h"
    [UMSocialFacebookHandler setFacebookAppID:@"1440390216179601" shareFacebookWithURL:@"http://www.umeng.com/social"];

设置分享内容方法和调用系统Facebook分享相同

9.3  添加Twitter

9.3.1  使用系统自带Twitter分享

使用系统自带Twitter分享需要先在手机中设置Twitter账户

使用默认分享界面分享调用下面的代码

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                                 shareToSnsNames:@[UMShareToTwitter]
                                       delegate:self];
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

使用自定义分享界面,在对于的Twitter分享按钮中实现下面的方法

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToTwitter] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

9.3.2  使用应用内网页分享

9.3.2.1  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Twitter文件夹添加到工程,并添加系统Framework:Accounts.frameworkSocial.framework

9.3.2.2  添加Twitter

在AppDelegate的入口方法设置:

#import "UMSocialTwitterHandler.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UMSocialTwitterHandler openTwitter];
}

设置分享内容方法与使用系统自带Twitter分享相同

9.4  添加Instagram

9.4.1  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Instagram文件夹添加到工程

9.4.2  添加Instagram开关

在AppDelegate的入口方法设置:

#import "UMSocialInstagramHandler.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UMSocialInstagramHandler openInstagramWithScale:NO paddingColor:[UIColor blackColor]];
}

9.4.3  设置分享内容

使用默认分享界面调用下面的方法

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                                shareToSnsNames:@[UMShareToInstagram]
                                       delegate:self];
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

使用自定义界面,在对应的Instagram分享按钮中实现下面的方法

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToInstagram] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

9.5  添加Line

9.5.1  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Line文件夹添加到工程

9.5.2  添加Line开关

在AppDelegate的入口方法设置:

#import "UMSocialLineHandler.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//分享到line,只能分享纯文本消息或者纯图片消息
    [UMSocialLineHandler openLineShare:UMSocialLineMessageTypeImage];
}

9.5.3  设置分享内容

使用默认分享界面,添加下面的代码

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                                shareToSnsNames:@[UMShareToLine]
                                       delegate:self];
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

使用自定义分享界面,在对应的Line分享按钮中实现下面的方法

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToLine] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

9.6  添加Whatsapp

9.6.1  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Whatsapp文件夹添加到工程

9.6.2  添加Whatsapp开关

在AppDelegate的入口方法设置:

#import "UMSocialLineHandler.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//分享到whatsapp,只能分享纯文本消息或者纯图片消息
    [UMSocialWhatsappHandler openWhatsapp:UMSocialWhatsappMessageTypeImage];
}

9.6.3  设置分享内容

使用默认分享界面,添加下面的代码

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                                shareToSnsNames:@[UMShareToWhatsapp]
                                       delegate:self];
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

使用自定义分享界面,在对应的Whapsapp分享按钮中实现下面的方法

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToWhatsapp] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

9.7  添加Tumblr

注意:我们采用打开Tumblr客户端方式分享到Tumblr,由于Tumblr客户端没有兼容iOS8,因此在iOS8上分享失败

9.7.1  添加相关库文件

解压下载文件夹,在UMSocial_Sdk_Extra_Frameworks目录下,把Tumblr文件夹添加到工程

9.7.2  添加Tumblr开关

在AppDelegate的入口方法设置

#import "UMSocialTumblrHandler.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UMSocialTumblrHandler openTumblr];
}

9.7.3  设置分享内容

使用默认分享界面,添加下面的代码

    [UMSocialSnsService presentSnsIconSheetView:self
                                          appKey:你的友盟应用Appkey
                                       shareText:@"友盟社会化分享让您快速实现分享等社会化功能,www.umeng.com/social"
                                      shareImage:[UIImage imageNamed:@"icon.png"]
                                shareToSnsNames:@[UMShareToTumblr]
                                       delegate:self];
    //实现回调方法(可选):
    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
            //根据`responseCode`得到发送结果,如果分享成功
            if(response.responseCode == UMSResponseCodeSuccess)
            {
                //得到分享到的微博平台名
                NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
            }      
    }

使用自定义分享界面,在对应的Tumblr分享按钮中实现下面的方法

    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToTumblr] content:@"分享文字" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
        if (response.responseCode == UMSResponseCodeSuccess) {
            NSLog(@"分享成功!");
        }
    }];

10.  设置分享内容

10.1  使用默认分享界面

在分享按钮中实现下面的方法

[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:[UIImage imageNamed:@"icon.png"]
                            shareToSnsNames:@[UMShareToSina,UMShareToTencent,UMShareToRenren,UMShareToDouban,UMShareToEmail]
                                delegate:self]; 
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

  • shareToSnsNames中传递的参数顺序即为分享面板中各个分享平台的排列顺序
  • 如果需要支持横屏,则在弹出分享列表页前调用[UMSocialConfig setSupportedInterfaceOrientations:UIInterfaceOrientationMaskLandscape];

10.2  使用自定义分享界面

需要使用自定义分享界面,可以在对应的分享按钮中调用下面的方法,如新浪微博

[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToSina] content:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
    if (response.responseCode == UMSResponseCodeSuccess) {
        NSLog(@"分享成功!");
    }
}];

其他平台替换UMShareToSina如腾讯微博则替换为UMShareToTencent 各平台参数列表为

平台名 参数
新浪微博 UMShareToSina
腾讯微博 UMShareToTencent
QQ UMShareToQQ
QQ空间 UMShareToQzone
微信 UMShareToWechatSession
微信朋友圈 UMShareToWechatTimeline
微信收藏 UMShareToFavorite
邮件 UMShareToEmail
短信 UMShareToSms
豆瓣 UMShareToSms
短信 UMShareToDouban
人人网 UMShareToRenren
Facebook UMShareToFacebook
Twitter UMShareToTwitter
易信 UMShareToYXSession
易信朋友圈 UMShareToYXTimeline
来往 UMShareToLWSession
来往动态 UMShareToLWTimeline
Instagram UMShareToInstagram
Line UMShareToLine
Whatsapp UMShareToWhatsapp
Tumblr UMShareToTumblr

10.3  分享多媒体资源

10.3.1  分享URL图片

使用默认分享界面,使用下面的代码

[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeImage url:@"http://www.baidu.com/img/bdlogo.gif"];
//调用快速分享接口
[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:nil
                          shareToSnsNames:@[UMShareToSina]
                                delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

使用自定义分享界面,在对应平台分享按钮中实现下面的方法

UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:
                                        @"http://www.baidu.com/img/bdlogo.gif"];
[[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToSina] content:@"分享内嵌文字" image:nil location:nil urlResource:urlResource presentedController:self completion:^(UMSocialResponseEntity *shareResponse){
       if (shareResponse.responseCode == UMSResponseCodeSuccess) {
           NSLog(@"分享成功!");
       }
    }];

分享其他平台替换UMShareToSina为其他平台参数即可

10.3.2  分享本地gif图片

分享本地gif图片到各个开放平台,需要生成把本地gif图片生成NSData对象,作为各个分享方法的shareImage参数,例如快速分享接口如下写法。
分享png、jpg图片则只需要生成UIImage,传入到shareImage参数,不能使用这种写法。

    //分享gif图片
    NSString *path = [[NSBundle mainBundle] pathForResource:@"picName"
                                                     ofType:@"gif"];
    NSData *gifData = [NSData dataWithContentsOfFile:path];
    [UMSocialSnsService presentSnsIconSheetView:self appKey:UmengAppkey shareText:shareText shareImage:gifData shareToSnsNames:nil delegate:self];
    //分享png、jpg图片
    [UMSocialSnsService presentSnsIconSheetView:self appKey:UmengAppkey shareText:shareText shareImage:[UIImage imageNamed:@"picName"] shareToSnsNames:nil delegate:self];

10.3.3  分享URL音乐

分享音乐资源只需要将UMSocialUrlResourceType设置为Music类型即可

[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeMusic url:@"http://mr4.douban.com/201401091529/6e0b23f37fa584f2a6e58ac70d03b31e/view/song/small/p759182.mp3"];
//调用快速分享接口
[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:nil
                          shareToSnsNames:@[UMShareToSina]
                                delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

微信设置分享音乐方法

微信分享音乐方法直接调用原生SDK方法

WXMusicObject *musicObject = [WXMusicObject object];
                musicObject.musicUrl = @"要跳转的连接";
                musicObject.musicDataUrl = @"我分享的是mp3,这里是mp3的连接";
                [UMSocialData defaultData].extConfig.wxMediaObject = musicObject;
                [UMSocialData defaultData].extConfig.wxMessageType = UMSocialWXMessageTypeOther;

10.3.4  分享URL视频

分享视频资源需要将UMSocialUrlResourceType设置为Video类型即可

[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeVideo url:@"http://v.youku.com/v_show/id_XNjQ1NjczNzEy.html?f=21207816&ev=2"];
//调用快速分享接口
[UMSocialSnsService presentSnsIconSheetView:self
                                      appKey:你的友盟应用Appkey
                                   shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                                  shareImage:nil
                          shareToSnsNames:@[UMShareToSina]
                                delegate:self];
//实现回调方法(可选):
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的微博平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
}

10.4  分平台设置分享内容

[UMSocialData defaultData].extConfig下设置各个分享平台的分享文字、分享图片、分享视频、音乐等。各个平台的对象名,请参看头文件定义,此设置方法不支持直接发送分享内容的底层分享方法,只支持使用有界面的分享方法,示例代码如下:

[UMSocialData defaultData].extConfig.sinaData.shareText = @"分享到新浪微博内容";
[UMSocialData defaultData].extConfig.tencentData.shareImage = [UIImage imageNamed:@"icon"]; //分享到腾讯微博图片 
[[UMSocialData defaultData].extConfig.wechatSessionData.urlResource setResourceType:UMSocialUrlResourceTypeImage url:@"http://www.baidu.com/img/bdlogo.gif"];  //设置微信好友分享url图片
[[UMSocialData defaultData].extConfig.wechatTimelineData.urlResource setResourceType:UMSocialUrlResourceTypeVideo url:@"http://v.youku.com/v_show/id_XNjQ1NjczNzEy.html?f=21207816&ev=2"]; //设置微信朋友圈分享视频

10.5  添加自定义平台

如果需要修改已有面板中的按钮,可以参考下面的方法修改平台相应的图片、文字和点击事件等,例如下面修改新浪微博的图片、文字和点击事件

    UMSocialSnsPlatform *sinaPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];
    sinaPlatform.bigImageName = @"icon";
    sinaPlatform.displayName = @"微博";
    sinaPlatform.snsClickHandler = ^(UIViewController *presentingController, UMSocialControllerService * socialControllerService, BOOL isPresentInController){
        NSLog(@"点击新浪微博的响应");
    };

如果需要添加自定义按钮,如复制链接等按钮,在appdelegate方法内添加下面的代码:

UMSocialSnsPlatform *snsPlatform = [[UMSocialSnsPlatform alloc] initWithPlatformName:@"CustomPlatform"];
snsPlatform.displayName = @"自定义平台";
snsPlatform.snsClickHandler = ^(UIViewController *presentingController, UMSocialControllerService * socialControllerService, BOOL isPresentInController){
NSLog(@"点击自定义平台的响应");
};
[UMSocialConfig addSocialSnsPlatform:@[snsPlatform]];
//设置你要在分享面板中出现的平台
[UMSocialConfig setSnsPlatformNames:@[UMShareToSina,@"CustomPlatform"]];

11.  常见错误

11.1  错误码列表

5001 错误的友盟appkey,或者此appkey没有绑定任何平台.如果开发者绑定了,依然出现这个问题,让开发者再试一下,可能是刚绑定马上就测试的原因,最好等2分钟。
5002 这个友盟appkey已经被禁止
5003 请求的参数中没有uid
5004 未知的错误,具体的错误信息会在log的输出中
5005 访问频率超限,可一会儿再试
5006 请求参数中没有content字段
5007 请求参数中content字段的内容为空
5008 没有上传图片
5009 此友盟的appkey没有绑定对应平台的appkey和appsecret
5010 userid无效,这个用户并没有进行授权
5013 请求的参数中没有appkey这个字段
5014 没有对此用户进行授权
5016 分享信息重复
5017 分享图片大小有问题
5024 获取access token失败,具体看log输出
5025 获取access token失败,具体看log输出
5027 授权已经过期
5028 授权已经过期
5015 请求中没有state参数
5016 发送了重复内容的微博
5017 图像文件大小不正确
5018 appurl不正确
5019 图像url不正确
5020 没有使用Qzone add_share接口的权限
5029 该用户已经关注过了
5030 没有使用此api的权限
5031 openid错误
5032 用户不存在或者用户无法在平台发言
5033 请求参数非法
5034 用户不在平台的应用测试列表当中
5035 发布内容频率太高
5036 IMEI参数错误
5037 此App尚未授权过
500 给定uid的用户并不存在
501 绑定账户失败
502 解绑定失败
503 评论失败
504 获取评论失败
505 用户被加入黑名单
506 获取好友失败
507 获取授权url失败
508 解除授权失败
510 分享失败
511 获取bar失败
512 从平台获取用户信息失败
513 url跳转失败
514 从social获取用户信息失败
515 请求的参数错误
516 请求喜欢失败
517 版本号错误
-101 没有Oauth授权
-102 未知错误
-103 服务器没响应
-104 初始化失败
-105 参数错误