最近做的APP,需要分享功能,于是试了一下友盟的社会化组件。总的感觉还不错,虽然没有比直接集成官方SDK简便多少,但是后台统计的功能不错,所以最后还是用了。官网的文档说明已经挺详细了,不过章节组织得有点乱,本文总结一下
首先去友盟注册一个app key,然后下载它的SDK。这里要注意的是,SDK分为IDFA版和非IDFA版,前者需要设置一个默认的广告页,否则有可能被苹果拒绝上架,我觉得有点风险,所以最后选的是非IDFA的版本。由于目前IDFA是唯一标识设备的最准确手段,所以这个版本有可能在识别新用户时不如IDFA版准确,不过我觉得可以接受
然后友盟提供了多套组件,除了最基础的应用统计,还有社会化组件,推送组件等,我只用了它的基础SDK和社会化SDK。app key是共通的
包括微信好友,朋友圈,收藏
首先需要去微信开放平台注册应用,然后会得到app id和app secret。我之前做过微信公众号的二次开发,对微信的这套玩法已经比较熟悉了。针对移动应用,微信开放平台提供了登陆、分享、支付等接口,我们主要用的是分享接口,这是最基础的接口,目前不需要认证开发者身份,只需要在平台上注册就可以了
得到app id和app secret之后,就可以接入了。用原生SDK和友盟SDK都差不多,iOS APP集成都离不开URL Types这一套,所以首先需要设置URL Types,填上app secret
然后就改用友盟提供的API了,不用微信原生的
#import "UMSocial.h" #import "UMSocialWechatHandler.h"
[UMSocialData setAppKey:@"友盟的AppKey"]; [UMSocialWechatHandler setWXAppId:@"微信app id" appSecret:@"微信app secret" url:nil];
- (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]; }
-(void) socialButtonPressed { NSArray *targetSns = @[UMShareToWechatSession, UMShareToWechatTimeline, UMShareToWechatFavorite]; NSString *url = @"http://xxx.com/分享的消息点击后进入的url"; NSString *title = @"自定义title"; [UMSocialData defaultData].extConfig.wechatSessionData.url = url; [UMSocialData defaultData].extConfig.wechatTimelineData.url = url; [UMSocialData defaultData].extConfig.wechatFavoriteData.url = url; [UMSocialData defaultData].extConfig.wechatSessionData.title = title; [UMSocialData defaultData].extConfig.wechatFavoriteData.title = title; [UMSocialSnsService presentSnsIconSheetView:self appKey:nil shareText:@"内容文字" shareImage:[UIImage imageNamed:@"内容图片"] shareToSnsNames:targetSns delegate:nil]; }
另外如果用户的设备上没有装微信,那么分享界面也就不会出现微信的图标,否则的话苹果会认为是诱导下载,而拒绝上架
感觉集成新浪微博更麻烦一点,因为集成微信基本通过代码就完成了,而新浪微博需要在3个地方配置,比较零散。可能是因为我没有用新浪微博的原生SDK做过接入,所以直接用友盟的SDK感觉不是很能把握
首先当然也是要去新浪平台注册应用,拿到app key和app secret。然后配置URL Types,不过这里用的app key不是刚才我们自己去新浪申请的app key,而是友盟的app key
然后需要在新浪的管理后台配置OAuth的回调地址,根据友盟的文档,把安全域名配置为sns.whalecloud.com,回调地址配置成http://sns.whalecloud.com/sina2/callback,这也是让我觉得比较奇怪的地方,按理说应该是配置成我们应用自己的地址才比较合理。在新浪的文档里找了半天,也没看到这个地址需要实现什么逻辑,就先按友盟介绍的来吧
然后是代码:
#import "UMSocial.h" #import "UMSocialSinaHandler.h"
[UMSocialData setAppKey:@"xxxx"]; [UMSocialSinaHandler openSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];
- (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]; }
然后是分享的代码:
NSArray *targetSns = @[UMShareToSina]; [UMSocialSnsService presentSnsIconSheetView:self appKey:nil shareText:@"测试文字\nhttp://www.baidu.com" shareImage:[UIImage imageNamed:@"image_placeholder"] shareToSnsNames:targetSns delegate:nil];
经过上面的配置,就可以把内容分享到新浪微博了。这里如果用户设备上有微博,就会使用SSO直接分享;如果没有安装,则会跳转到web页面使用OAuth授权。这主要是因为新浪微博为第三方应用提供了OAuth授权的方式,而微信现在貌似只对公众号提供了OAuth接入,移动应用还是只能通过应用跳转
但是现在有个问题,我发现我前面在新浪申请的app key和app secret从头到尾就没用过,这明显是不合理的。果然分享出去的微博,来源都是“友盟社会化组件”,后来找了一圈,发现还需要在友盟的后台配置一下自己的app key和app secret,然后就OK了
除了前面的最基本的分享,还可以自定义分享页面的样式(基础的方式是友盟已经提供了XIB和弹出方式),也可以调用更底层的直接分享接口(无页面),另外还有一些delegate方法,有需要的话可以自行实现