首先感谢Devstore的特约评测员Steven对友盟社会化组件做出的细致评测,下面就是关于使用友盟社会化组件的详细过程:
一、集成过程
集成友盟社会化组件的主要流程是: 注册友盟帐号=》创建推送应用=》下载SDK=》集成开发=》测试应用=》发布应用
1、注册友盟账号
友盟开发者账号的注册地址:http://www.umeng.com/users/sign_up
2、创建新应用
使用注册的友盟账号登录后进入我的产品,在屏幕左方会看到添加应用的按钮,点击选择添加新应用,提交成功后会获得Appkey然后就可以进入测试。
3、下载iOS SDK
友盟社会化组件iOS SDK的下载地址:http://dev.umeng.com/social/ios/sdk-download ,进入后选择下载根据自己需要选择模块
4、集成开发
1)新建一个工程
2)添加友盟SDK和静态库
解压iOS SDK压缩包,将其中的UMSocial_Sdk_4.0和UMSocial_Sdk_Extra_Frameworks文件夹加入到工程中去,再添加系统framework:
1
2
3
|
Security
.
framework
,
libiconv
.
dylib
,
SystemConfiguration
.
framework
,
CoreGraphics
.
framework,
libsqlite3
.
dylib,
CoreTelephony
.
framework
,
libstdc
++
.
dylib
,
libz
.
dylib。
|
3)导入头文件,添加测试文件
为了引用头文件方便,在工程的.pch文件内添加如下代码:
1
2
|
#import "UMSocial.h"
#define APPKEY @"53cde22c56240b55aa02368c"
|
UMSocial头文件内包含众多社会化分析库文件的引用,直接引用一个UMSocial就可以使用全部功能,不用重复导入,很方便,APPKEY就是申请应用获得的Appkey。
为了测试分享图片的功能,在工程内加入了一个名为”108.png”的静态图片和一个名为”001.gif”的动态图片。
4)基本功能集成
首先在AppDelegate内设置AppKey,在didFinishLauchingWIthOptions方法内添加如下代码:
1
2
3
|
[
UMSocialDatasetAppKey
:
APPKEY
]
;
//打开调试日志
[
UMSocialDataopenLog
:
YES
]
;
|
在ViewController.m中添加实现基本分享功能的代码,各个参数的设置请参考绿字注释部分:
1
2
3
4
5
6
7
8
9
10
|
/**
弹出一个分享列表的UITableViewController
@param controller 在该controller弹出分享列表的UIActionSheet
@param appKey 友盟appKey
@param shareText 分享编辑页面的内嵌文字
@param shareImage 可以传入`UIImage`,或者`NSData`类型,分享内嵌图片,用户可以在编辑页面删除
@param snsNames 你要分享到的sns平台类型,该NSArray值是`UMSocialSnsPlatformManager.h`定义的平台名的字符串常量,有UMShareToSina,UMShareToTencent,UMShareToRenren,UMShareToDouban,UMShareToQzone,UMShareToEmail,UMShareToSms等
@param delegate 实现分享完成后的回调对象,如果不关注分享完成的状态,可以设为nil
*/
[
UMSocialSnsServicepresentSnsIconSheetView
:
selfappKey
:
APPKEYshareText
:
@
"好开心啊,今天又没有吃药!"
shareImage
:
[
UIImage
imageNamed
:
@
"001.gif"
]
shareToSnsNames
:
[
NSArray
arrayWithObjects
:
UMShareToWechatSession
,
UMShareToQzone
,
UMShareToSina
,
UMShareToTencent
,
UMShareToRenren
,
nil
]
delegate
:
nil
]
;
|
会有如下效果:
5)使用直接分享底层接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/**
发送微博内容到多个微博平台
@param platformTypes 分享到的平台,数组的元素是`UMSocialSnsPlatformManager.h`定义的平台名的常量字符串,例如`UMShareToSina`,`UMShareToTencent`等。
@param content 分享的文字内容
@param image 分享的图片,可以传入UIImage类型或者NSData类型
@param location 分享的地理位置信息
@param urlResource 图片、音乐、视频等url资源
@param completion 发送完成执行的block对象
@param presentedController 如果发送的平台微博只有一个并且没有授权,传入要授权的viewController,将弹出授权页面,进行授权。可以传nil,将不进行授权。
*/
[
[
UMSocialDataServicedefaultDataService
]
postSNSWithTypes
:
@
[
UMShareToSina
]
content
:
@
"今天又没有吃药!"
image
:
[
UIImage
imageNamed
:
@
"001.gif"
]
location
:
nilurlResource
:
nilpresentedController
:
self
completion
:
^
(
UMSocialResponseEntity *
response
)
{
if
(
response
.
responseCode
==
UMSResponseCodeSuccess
)
{
NSLog
(
@
"respon%@"
,
response
)
;
NSLog
(
@
"分享成功!"
)
;
}
}
]
;
|
发送成功后进入新浪微博查看自己发送的微博,看到如下界面:
6)分享url资源
1
2
3
4
5
6
7
|
//根据url创建一个UMSocialUrlResource对象;resourceType:多媒体资源类型,图片、音乐或者视频;urlString:url字符串
UMSocialUrlResource *
urlResource
=
[
[
UMSocialUrlResourcealloc
]
initWithSnsResourceType
:
UMSocialUrlResourceTypeImageurl
:
@
"http://img0.pcgames.com.cn/pcgames/1407/07/4057451_1_thumb.jpg"
]
;
//分享url资源
[
[
UMSocialDataServicedefaultDataService
]
postSNSWithTypes
:
@
[
UMShareToSina
]
content
:
@
"Chinajoy的萌妹子"
image
:
nillocation
:
nilurlResource
:
urlResource
presentedController
:
selfcompletion
:
^
(
UMSocialResponseEntity *
response
)
{
if
(
response
.
responseCode
==
UMSResponseCodeSuccess
)
{
NSLog
(
@
"分享成功!"
)
;
}
}
]
;
|
效果如下:
7)分享本地动态gif图片
把本地的gif图片声称NSData对象,再进行分享,参考如下方法:
1
2
3
|
NSString *
path
=
[
[
NSBundlemainBundle
]
pathForResource
:
@
"001"
ofType
:
@
"gif"
]
;
NSData *
gifData
=
[
NSDatadataWithContentsOfFile
:
path
]
;
[
UMSocialSnsServicepresentSnsIconSheetView
:
selfappKey
:
APPKEYshareText
:
@
"今天一直都要萌萌哒!"
shareImage
:
gifData
shareToSnsNames
:
nildelegate
:
self
]
;
|
效果如下(请原谅我只能截取到静态图):
8)摇一摇截屏分享
实现摇一摇截图分享需要导入两个头文件,功能实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#import "UMSocialShakeService.h"
#import "UMSocialScreenShoter.h"
/**
设置响应摇一摇事件,并且弹出分享页面
@param snsTypes 要分享的平台类型名,例如@[UMShareToSina,UMShareToTencent,UMShareToWechatSession]
@param shareText 分享内嵌文字
@param screenShoter 摇一摇分享用到的截屏对象
@param controller 出现分享界面所在的ViewController
@param delegate 实现摇一摇后,或者分享完成后的回调对象,如果不处理这些事件,可以设置为nil
*/
[
UMSocialShakeServicesetShakeToShareWithTypes
:
@
[
UMShareToTencent
,
UMShareToSina
,
UMShareToRenren
]
shareText
:
@
"摇一摇"
screenShoter
:
[
UMSocialScreenShoterDefaultscreenShoter
]
inViewController
:
selfdelegate
:
nil
]
;
//设置摇一摇灵敏度
[
UMSocialShakeServicesetShakeThreshold
:
1.0
]
;
|
手机端摇一摇出现如下界面:
9)进入授权信息页面
个人中心的登录账号可以选择下面已经授权的平台登录
1
2
|
UINavigationController *
accountViewController
=
[
[
UMSocialControllerServiceCommentdefaultControllerService
]
getSocialAccountController
]
;
[
selfpresentModalViewController
:
accountViewController
animated
:
YES
]
;
|
效果图如下:
10)获取授权用户信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//判断是否授权
BOOL
isOauth
=
[
UMSocialAccountManagerisOauthAndTokenNotExpired
:
UMShareToSina
]
;
if
(
isOauth
==
YES
)
{
//授权成功,获取微博平台账户信息
NSDictionary *
snsAccountDic
=
[
UMSocialAccountManagersocialAccountDictionary
]
;
//创建一个微博账户对象
UMSocialAccountEntity *
sinaAccount
=
[
snsAccountDic
valueForKey
:
UMShareToSina
]
;
NSLog
(
@
"sina name is %@, icon URL is %@"
,
sinaAccount
.
userName
,
sinaAccount
.
iconURL
)
;
//获取用户微博账号详细信息
[
[
UMSocialDataServicedefaultDataService
]
requestSnsInformation
:
UMShareToSinacompletion
:
^
(
UMSocialResponseEntity *
response
)
{
NSLog
(
@
"response is %@"
,
response
.
data
)
;
self
.
textView
.
text
=
[
response
.
datadescription
]
;
}
]
;
}
else
{
//未授权,进入授权页面
[
UMSocialSnsPlatformManagergetSocialPlatformWithName
:
UMShareToSina
]
.
loginClickHandler
(
self
,
[
UMSocialControllerServicedefaultControllerService
]
,
YES
,
^
(
UMSocialResponseEntity *
response
)
{
if
(
response
.
responseCode
==
UMSResponseCodeSuccess
)
{
//获取微博用户名、uid、token等
UMSocialAccountEntity *
snsAccount
=
[
[
UMSocialAccountManagersocialAccountDictionary
]
valueForKey
:
UMShareToSina
]
;
NSLog
(
@
"username is %@, uid is %@, token is %@"
,
snsAccount
.
userName
,
snsAccount
.
usid
,
snsAccount
.
accessToken
)
;
}
}
)
;
}
|
11)社会化操作栏
1
2
3
4
5
|
//初始化一个`UMSocialData`对象,identifier是一个`UMSocialData`对象的标识符,相同标识符的`UMSocialData`拥有相同的属性
UMSocialData *
socialData
=
[
[
UMSocialDataalloc
]
initWithIdentifier
:
@
"A Book Named BILI"
]
;
UMSocialBar *
socialBar
=
[
[
UMSocialBaralloc
]
initWithUMSocialData
:
socialData
withViewController
:
self
]
;
socialBar
.
center
=
CGPointMake
(
160
,
435
)
;
[
self
.
viewaddSubview
:
socialBar
]
;
|
在屏幕的下方会出现这样的一个操作栏,从左往右依次是评论、喜欢、分享、用户信息:
二、主要功能
三、功能特色
1、摇一摇截图分享:
4、DEMO展示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
-
(
IBAction
)
share
:
(
id
)
sender
{
//使用分享API(自动授权后,进入编辑页面)
// [[UMSocialControllerService defaultControllerService]setShareText:@"今天又没有吃药!" shareImage:[UIImage imageNamed:@"001.gif"] socialUIDelegate:self];
// [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina].snsClickHandler(self,[UMSocialControllerService defaultControllerService],YES);
[
UMSocialSnsServicepresentSnsIconSheetView
:
selfappKey
:
APPKEYshareText
:
@
"好开心啊,今天又没有吃药!"
shareImage
:
[
UIImage
imageNamed
:
@
"001.gif"
]
shareToSnsNames
:
[
NSArray
arrayWithObjects
:
UMShareToWechatSession
,
UMShareToQzone
,
UMShareToSina
,
UMShareToTencent
,
UMShareToRenren
,
nil
]
delegate
:
nil
]
;
}
//直接分享底层接口
-
(
IBAction
)
postShare
:
(
id
)
sender
{
//直接发送分享,如果未授权,则跳转到授权页面
[
[
UMSocialDataServicedefaultDataService
]
postSNSWithTypes
:
@
[
UMShareToSina
]
content
:
@
"今天又没有吃药!"
image
:
[
UIImage
imageNamed
:
@
"001.gif"
]
location
:
nilurlResource
:
nilpresentedController
:
self
completion
:
^
(
UMSocialResponseEntity *
response
)
{
if
(
response
.
responseCode
==
UMSResponseCodeSuccess
)
{
NSLog
(
@
"respon%@"
,
response
)
;
NSLog
(
@
"分享成功!"
)
;
}
}
]
;
}
-
(
IBAction
)
shareUrlResource
:
(
id
)
sender
{
//设置URL分享内容
//[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeImage url:@"http://img0.pcgames.com.cn/pcgames/1407/07/4057451_1_thumb.jpg"];
//[UMSocialSnsService presentSnsIconSheetView:self appKey:@"53cde22c56240b55aa02368c" shareText:@"Chinajoy的萌妹子" shareImage:nil shareToSnsNames:@[UMShareToWechatSession,UMShareToQzone,UMShareToSina,UMShareToTencent,UMShareToRenren] delegate:nil];
//根据url创建一个UMSocialUrlResource对象;resourceType:多媒体资源类型,图片、音乐或者视频;urlString:url字符串
UMSocialUrlResource *
urlResource
=
[
[
UMSocialUrlResourcealloc
]
initWithSnsResourceType
:
UMSocialUrlResourceTypeImageurl
:
@
"http://img0.pcgames.com.cn/pcgames/1407/07/4057451_1_thumb.jpg"
]
;
//分享url资源
[
[
UMSocialDataServicedefaultDataService
]
postSNSWithTypes
:
@
[
UMShareToSina
]
content
:
@
"Chinajoy的萌妹子"
image
:
nillocation
:
nilurlResource
:
urlResource
presentedController
:
selfcompletion
:
^
(
UMSocialResponseEntity *
response
)
{
if
(
response
.
responseCode
==
UMSResponseCodeSuccess
)
{
NSLog
(
@
"分享成功!"
)
;
}
}
]
;
}
-
(
IBAction
)
shareGif
:
(
id
)
sender
{
NSString *
path
=
[
[
NSBundlemainBundle
]
pathForResource
:
@
"001"
ofType
:
@
"gif"
]
;
NSData *
gifData
=
[
NSDatadataWithContentsOfFile
:
path
]
;
[
UMSocialSnsServicepresentSnsIconSheetView
:
selfappKey
:
APPKEYshareText
:
@
"今天一直都要萌萌哒!"
shareImage
:
gifData
shareToSnsNames
:
nildelegate
:
self
]
;
}
-
(
IBAction
)
shakeAndShare
:
(
id
)
sender
{
[
UMSocialShakeServicesetShakeToShareWithTypes
:
nil
shareText
:
nil
screenShoter
:
nil
inViewController
:
nil
delegate
:
self
]
;
}
-
(
IBAction
)
shakeScreenShoot
:
(
id
)
sender
{
/**
设置响应摇一摇事件,并且弹出分享页面
@param snsTypes 要分享的平台类型名,例如@[UMShareToSina,UMShareToTencent,UMShareToWechatSession]
@param shareText 分享内嵌文字
@param screenShoter 摇一摇分享用到的截屏对象
@param controller 出现分享界面所在的ViewController
@param delegate 实现摇一摇后,或者分享完成后的回调对象,如果不处理这些事件,可以设置为nil
*/
[
UMSocialShakeServicesetShakeToShareWithTypes
:
@
[
UMShareToTencent
,
UMShareToSina
,
UMShareToRenren
]
shareText
:
@
"摇一摇"
screenShoter
:
[
UMSocialScreenShoterDefaultscreenShoter
]
inViewController
:
selfdelegate
:
nil
]
;
//设置摇一摇灵敏度
[
UMSocialShakeServicesetShakeThreshold
:
1.0
]
;
}
-
(
IBAction
)
login
:
(
id
)
sender
{
UINavigationController *
accountViewController
=
[
[
UMSocialControllerServiceCommentdefaultControllerService
]
getSocialAccountController
]
;
[
selfpresentModalViewController
:
accountViewController
animated
:
YES
]
;
}
|
5、测试日志
四、遇到的问题
在分享url资源的时候,笔者使用了setResourceType这个方法来设置url图片为分享内容并且发送了一个分享,分享以后发现其它分享方式的图片都变成了这个url图片,如果只是需要这一个分享使用的,而不改变其它分享方式的图片,则需要创建一个UMSocialUrlResource对象,用postSNSWithTypes方法发送分享。详情可以参考demo中的shareUrlResource方法。
五、上手难易
友盟社会化组件集成比较简单,用户只需引用友盟社会化类,直接调用API方法即可,处理返回内容也比较轻松。
六、开发文档
友盟社会化组件API列表下载地址:点击下载
iOS SDK下载时可选一个Demo测试源码工程,可以参考这个工程和API文档完成项目集成。
七、测试点评
友盟社会化组件可以帮助移动应用快速集成分享、登录、评论、喜欢等社交功能,并提供数据统计分析服务。下面是笔者对其试用过程,总结出以下特点:
1.友盟社会化组件是一款跨Android,iOS,Windows Phone三大平台的社会化分享组件,并且同时支持Cocos2d-x和PhoneGap平台的开发;
2.友盟分享的接口简便,如果只使用最基本的分享功能,只需不到半个小时就可以为APP增加新浪微博、腾讯微博等平台的分享功能;
3.友盟分享支持的社交平台很多,截止到目前未知,友盟分享已经支持了14种社交平台甚至包括来往、易信这些用户比较少用到的平台,提供的平台比较广泛;
4.友盟分享可以分享url资源,例如图片、音乐、视频等,另外还有摇一摇截屏分享功能;
5.友盟分享提供了一个登录授权接口,可以查看各个平台的授权情况,用户可以对授权账号进行增加、更改、删除,并可以对各个平台进行授权和解除授权,方便管理;
6.用户可以针对一篇文章、一首歌曲等内容点击喜欢或不喜欢、或评论并分享,友盟也提供了一个操作栏来提供提供这些功能,使用起来非常简便;
7.除了分享功能外,友盟还提供有一个后台数据统计分析功能,可以对用户的分享情况进行统计分析;
8.友盟分享目前最新版本为iOS SDK v4.1,更新时间为2014/08/18,更新及时。
八、适用人群
如果开发者需要一款支持多种平台分享的第三方服务,那么友盟社会化分享很不错,可供用户自定义的部分也比较多。友盟的评论分享功能做的很好,在APP中集成的话实用性很高。
IOS , 我的分享组件不显示QQ/微信/微信朋友圈的图标。
IOS , 我的分享组件不显示QQ/微信/微信朋友圈的图标。
2014-09-17 18:52:09.731 CanLove[1897:60b] UMSocial—-getSnsPlatformWithName snsName is wxsession
2014-09-17 18:52:09.732 CanLove[1897:60b] UMSocial—-wxsession, Error: displayName error!
2014-09-17 18:52:09.732 CanLove[1897:60b] UMSocial—-getSnsPlatformWithName snsName is wxtimeline
2014-09-17 18:52:09.734 CanLove[1897:60b] UMSocial—-wxtimeline, Error: displayName error!
2014-09-17 18:52:09.736 CanLove[1897:60b] UMSocial—-getSnsPlatformWithName snsName is qq
2014-09-17 18:52:09.736 CanLove[1897:60b] UMSocial—-qq, Error: displayName error!